diff --git a/.gitignore b/.gitignore index 1855dfce2..f03022605 100644 --- a/.gitignore +++ b/.gitignore @@ -8,6 +8,7 @@ *.vcxproj.filters *.vcxproj.user *.xcodeproj +*.lib *~ build/bin build/guidodir diff --git a/guidoar-dev/.gitignore b/guidoar-dev/.gitignore new file mode 100644 index 000000000..a7e2f5e84 --- /dev/null +++ b/guidoar-dev/.gitignore @@ -0,0 +1,23 @@ +.DS_Store +*~ +*.o +build/guidoar.framework/ +build/guidoar.tgz +build/guidoardir +build/iosdir +build/lib +build/libguidoar.a +build/macos/ +build/android/libguidoar.so +build/android/libs/ +build/android/obj/ +guidocalculus/package/GuidoCalculus.app/ +guidocalculus/src/.qmake.stash +guidocalculus/src/Debug/ +guidocalculus/src/GuidoCalculus.build/ +guidocalculus/src/GuidoCalculus.xcodeproj/ +guidocalculus/src/Info.plist +guidocalculus/src/Release/ +guidocalculus/src/project.pbxproj +guidocalculus/src/tmpSrc/ +validation/0.90/ diff --git a/guidoar-dev/.travis.yml b/guidoar-dev/.travis.yml new file mode 100644 index 000000000..9c47e31c9 --- /dev/null +++ b/guidoar-dev/.travis.yml @@ -0,0 +1,14 @@ +os: linux +dist: xenial +language: cpp +compiler: clang + +before_install: + - sudo apt-get -qq update + +branches: + only: + - dev + - master + +script: make -C build MIDIEXPORT=no diff --git a/guidoar-dev/build/.vs/CMake Overview b/guidoar-dev/build/.vs/CMake Overview new file mode 100644 index 000000000..e69de29bb diff --git a/guidoar-dev/build/.vs/ProjectSettings.json b/guidoar-dev/build/.vs/ProjectSettings.json new file mode 100644 index 000000000..2b7b33d8d --- /dev/null +++ b/guidoar-dev/build/.vs/ProjectSettings.json @@ -0,0 +1,3 @@ +{ + "CurrentProjectSetting": "x64-Debug (default)" +} \ No newline at end of file diff --git a/guidoar-dev/build/.vs/VSWorkspaceState.json b/guidoar-dev/build/.vs/VSWorkspaceState.json new file mode 100644 index 000000000..139d745b2 --- /dev/null +++ b/guidoar-dev/build/.vs/VSWorkspaceState.json @@ -0,0 +1,10 @@ +{ + "ExpandedNodes": [ + "", + "\\android", + "\\android\\jni", + "\\out", + "\\out\\build" + ], + "PreviewInSolutionExplorer": false +} \ No newline at end of file diff --git a/guidoar-dev/build/.vs/build/v16/.suo b/guidoar-dev/build/.vs/build/v16/.suo new file mode 100644 index 000000000..6b678615a Binary files /dev/null and b/guidoar-dev/build/.vs/build/v16/.suo differ diff --git a/guidoar-dev/build/.vs/cmake.db b/guidoar-dev/build/.vs/cmake.db new file mode 100644 index 000000000..91062d47d Binary files /dev/null and b/guidoar-dev/build/.vs/cmake.db differ diff --git a/guidoar-dev/build/.vs/slnx.sqlite b/guidoar-dev/build/.vs/slnx.sqlite new file mode 100644 index 000000000..7e97f95d6 Binary files /dev/null and b/guidoar-dev/build/.vs/slnx.sqlite differ diff --git a/guidoar-dev/build/CMakeLists.txt b/guidoar-dev/build/CMakeLists.txt new file mode 100644 index 000000000..bf3d2a011 --- /dev/null +++ b/guidoar-dev/build/CMakeLists.txt @@ -0,0 +1,191 @@ +####################################### +# CMAKE guidoar +####################################### +project(guidoar) +cmake_minimum_required(VERSION 2.6) + +set(target guidoar) + +####################################### +# version management +set (VERSION 1.00) +set (VERSIONSTR "v.1.00") +set (SOVERS 1) + +set (BINDIR ${CMAKE_CURRENT_SOURCE_DIR}/bin) +set (LIBDIR ${CMAKE_CURRENT_SOURCE_DIR}/lib) +get_filename_component(ROOT ${CMAKE_CURRENT_SOURCE_DIR} DIRECTORY) + +set (CMAKE_BUILD_TYPE Release) + +if(UNIX) + add_definitions(-Wall -DGCC) +endif() + +set (CMAKE_CXX_STANDARD 11) + +####################################### +# windows support +if(WIN32) + add_definitions(-DWINVER=0x0400 -DWIN32) + if (${CMAKE_GENERATOR} MATCHES ".*Win64") + set (WIN win64) + else() + set (WIN win32) + endif () +endif() + +####################################### +# Options disabled by default +option ( ALL "build the library and the tools" off ) +option ( MIDIEXPORT "MIDI export" off ) + +if(APPLE) + add_definitions(-DAPPLE) + +####################################### +# iOS support + if ( IOS ) + message (STATUS "Generates project for iOS - Use -DIOS=no to change.") + set (ALL "no") + set (CMAKE_XCODE_EFFECTIVE_PLATFORMS "iPhoneOS") + # set (CMAKE_OSX_ARCHITECTURES "arm64 armv7 armv7s x86_64") + set (CMAKE_OSX_SYSROOT "iphoneos") + set (IOS_DEPLOYMENT_TARGET 9.0) + set (libtype STATIC) + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -DGUIDOAR_EXPORTS -stdlib=libc++") + else () + message (STATUS "Generates Mac OS project- Use -DIOS=yes to change.") + ####################################### + set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -stdlib=libc++") + set (CMAKE_C++_FLAGS -mmacosx-version-min=10.9) + set (CMAKE_LDFLAGS -mmacosx-version-min=10.9) + set (CMAKE_OSX_DEPLOYMENT_TARGET 10.9) + set (MACOSX_DEPLOYMENT_TARGET 10.9) + endif () +endif() + +if(NOT WIN32) + set (CMAKE_C++_FLAGS ${CMAKE_C++_FLAGS} -Wno-overloaded-virtual) +endif() + + + +####################################### +# set directories, src and headers. +set (GAR ${CMAKE_CURRENT_SOURCE_DIR}/..) +set (GARSRC ${GAR}/src) +set (GARTOOLS ${GAR}/tools) +set (SRCFOLDERS interface guido guido/abstract lib operations visitors midi parser) + +foreach(folder ${SRCFOLDERS}) + set(SRC ${SRC} "${GARSRC}/${folder}/*.cpp") # add source files +endforeach(folder) +file (GLOB CORESRC RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} ${SRC}) + +foreach(folder ${SRCFOLDERS}) + set(HEADERS ${HEADERS} "${GARSRC}/${folder}/*.h") # add header files +endforeach(folder) +file (GLOB COREH RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} ${HEADERS}) + +foreach(folder ${SRCFOLDERS}) + set(INCL ${INCL} "${GARSRC}/${folder}") # add include folders +endforeach(folder) + + +####################################### +# set includes +include_directories( ${INCL} ${GARSRC}/midisharelight) +#set_source_files_properties (${COREH} PROPERTIES HEADER_FILE_ONLY TRUE) + +####################################### +# midi export support +if (MIDIEXPORT STREQUAL "yes") + message (STATUS "MIDI export will be generated (requires MidiShareLight) - Use -DMIDIEXPORT=no to change.") + add_definitions(-DMIDIEXPORT) + if (WIN32) + if (${CMAKE_CL_64}) + set(LINK ${LINK} " ${GARSRC}/midisharelight/win64/midisharelight64.lib") + else() + set(LINK ${LINK} " ${GARSRC}/midisharelight/win32/midisharelight.lib") + endif() + elseif(APPLE) + set(LINK ${LINK} "-L${GARSRC}/midisharelight/macos -lmidisharelight") + elseif(UNIX) + set(LINK ${LINK} "-L/usr/local/lib -lmidisharelight") + endif (WIN32) +else() + message (STATUS "MIDI export will not be generated - Use -DMIDIEXPORT=yes to change (requires MidiShareLight).") +endif() + + +####################################### +# set library target +set(LIBCONTENT ${CORESRC} ${COREH}) +if(WIN32) + enable_language(RC) + set(LIBCONTENT ${LIBCONTENT} ${GAR}/rsrc/libguidoar.rc) +endif() + +if (IOS) + add_library(${target} STATIC ${LIBCONTENT}) + set_target_properties ( ${target} PROPERTIES + XCODE_ATTRIBUTE_IPHONEOS_DEPLOYMENT_TARGET ${IOS_DEPLOYMENT_TARGET} ) + +else() + add_library(${target} SHARED ${LIBCONTENT}) + set_target_properties (${target} PROPERTIES DEFINE_SYMBOL GUIDOAR_EXPORTS) + set_target_properties (${target} PROPERTIES PUBLIC_HEADER "${COREH}") + set_target_properties (${target} PROPERTIES + FRAMEWORK TRUE + FRAMEWORK_VERSION A + VERSION ${VERSION} + SOVERSION ${SOVERS} + MACOSX_FRAMEWORK_SHORT_VERSION_STRING ${VERSIONSTR} + MACOSX_FRAMEWORK_BUNDLE_VERSION ${VERSION} + ) +endif() + +target_link_libraries( ${target} ${LINK}) +set_target_properties( ${target} PROPERTIES + ARCHIVE_OUTPUT_DIRECTORY ${LIBDIR} + LIBRARY_OUTPUT_DIRECTORY ${LIBDIR} + ARCHIVE_OUTPUT_DIRECTORY_RELEASE ${LIBDIR} + LIBRARY_OUTPUT_DIRECTORY_RELEASE ${LIBDIR}) + + +####################################### +# set tools targets +if (ALL) + +file (GLOB TOOLS RELATIVE ${GARTOOLS} "${GARTOOLS}/*.cpp") + +foreach(toolcpp ${TOOLS}) + string(REPLACE ".cpp" "" tool ${toolcpp}) + add_executable( ${tool} ${GARTOOLS}/${tool}.cpp ) + target_link_libraries( ${tool} ${target}) + set_target_properties( ${tool} PROPERTIES + RUNTIME_OUTPUT_DIRECTORY ${BINDIR} + RUNTIME_OUTPUT_DIRECTORY_RELEASE ${BINDIR}) + add_dependencies(${tool} ${target}) +endforeach() + +if(${USEMidiShare}) + target_link_libraries( guido2midi ${MSH}) + set_target_properties (guido2midi PROPERTIES COMPILE_FLAGS -I/usr/local/include) +endif() +endif() + + +if(NOT IOS) +####################################### +# install setup +message (STATUS "Install prefix set to ${CMAKE_INSTALL_PREFIX}") +install ( TARGETS ${target} + RUNTIME DESTINATION ${CMAKE_INSTALL_PREFIX}/bin + FRAMEWORK DESTINATION ${CMAKE_INSTALL_PREFIX}/lib + LIBRARY DESTINATION ${CMAKE_INSTALL_PREFIX}/lib + PUBLIC_HEADER DESTINATION ${CMAKE_INSTALL_PREFIX}/include/guidoar +) + +endif() diff --git a/guidoar-dev/build/CMakeSettings.json b/guidoar-dev/build/CMakeSettings.json new file mode 100644 index 000000000..9d005acac --- /dev/null +++ b/guidoar-dev/build/CMakeSettings.json @@ -0,0 +1,15 @@ +{ + "configurations": [ + { + "name": "x64-Debug (default)", + "generator": "Ninja", + "configurationType": "Debug", + "inheritEnvironments": [ "msvc_x64_x64" ], + "buildRoot": "${projectDir}\\out\\build\\${name}", + "installRoot": "${projectDir}\\out\\install\\${name}", + "cmakeCommandArgs": "", + "buildCommandArgs": "", + "ctestCommandArgs": "" + } + ] +} \ No newline at end of file diff --git a/guidoar-dev/build/Makefile b/guidoar-dev/build/Makefile new file mode 100644 index 000000000..79e6d3da3 --- /dev/null +++ b/guidoar-dev/build/Makefile @@ -0,0 +1,101 @@ +# +# Guido AR Makefile +# +# + + +TARGET := undefined + +system := $(shell uname -s) +# normalizes MINGW versions +system := $(shell echo $(system) | grep -e MINGW -e MSYS > /dev/null && echo MINGW || echo $(system)) +ifeq ($(system), Darwin) + GENERATOR ?= Xcode + PREFIX ?= /usr/local + PROJ ?= $(BUILDDIR)/guidolib.xcodeproj + JOBS ?= -jobs 4 +else +ifeq ($(system), MINGW) + GENERATOR ?= "Visual Studio 14 2015 Win64" + PROJ ?= $(BUILDDIR)/guidolib.sln + JOBS ?= /maxcpucount:4 +else + GENERATOR ?= "Unix Makefiles" + PREFIX ?= /usr/local + PROJ ?= $(BUILDDIR)/Makefile + JOBS ?= -j 4 +endif +endif + +.PHONY: ios android + +BUILDDIR ?= guidoardir +BUILDDIR ?= guidoardir +MIDIEXPORT ?= no +CMAKEOPT ?= -Wno-dev + +ifeq ($(MIDIEXPORT), yes) + CMAKEOPT += -DMIDIEXPORT=yes +else + CMAKEOPT += -DMIDIEXPORT=no +endif +BUILDOPT ?= --config Release + + +#=============================================================== +all : $(PROJ) + cmake --build $(BUILDDIR) $(BUILDOPT) -- $(JOBS) + +$(PROJ) : $(BUILDDIR) + cd $(BUILDDIR) && cmake $(CMAKEOPT) .. -G $(GENERATOR) + +cmake : $(BUILDDIR) + cd $(BUILDDIR) && cmake $(CMAKEOPT) .. + +$(BUILDDIR) : + mkdir $(BUILDDIR) + + +#=============================================================== +help : + @echo guidoar makefile - Targets are : + @echo " all (default): build the guidoar library," + @echo + @echo "Platform targets to build the guidoar library are:" + @echo " ios" + @echo " windows (build 32 and 64 bits library)" + @echo " linux" + @echo " android : build the guidoar static library for Android" + +#=============================================================== +# building the library for iOS +#=============================================================== +ios : iosdir/guidoar.xcodeproj + cd iosdir && cmake --build . $(BUILDOPT) --target guidoar -- $(JOBS) + +iosdir/guidoar.xcodeproj: + @[ -d iosdir ] || mkdir iosdir + cd iosdir && cmake -DIOS=yes -DMIDIEXPORT=no -DIOS=on .. -G Xcode + + +#=============================================================== +# building the library for Android +#=============================================================== +android : PLATFORM ?= 22 +android : J ?= 6 +android : + @echo "### Android platform is android-$(PLATFORM)" + @echo "### Use PLATFORM=xx to change" + ndk-build -C android -j $(J) APP_PLATFORM=android-$(PLATFORM) + +androidclean: + cd android && rm -rf libs obj + + +#=============================================================== +# install target +#=============================================================== +install: + cmake --build $(BUILDDIR) --config Release --target install + + diff --git a/guidoar-dev/build/android/jni/Android.mk b/guidoar-dev/build/android/jni/Android.mk new file mode 100644 index 000000000..6d4c1755c --- /dev/null +++ b/guidoar-dev/build/android/jni/Android.mk @@ -0,0 +1,18 @@ +#### Shared library for Guido engine #### + +LOCAL_PATH := $(call my-dir) +SRC := $(LOCAL_PATH)/../../../src + +include $(CLEAR_VARS) + +LOCAL_MODULE := guidoar + +# SRC var is a trick to use wildcard in android.mk +# if no wildcard, you have better to use relative path, conforming to android doc +LOCAL_SRC_FILES := $(subst $(LOCAL_PATH)/,,$(wildcard $(SRC)/guido/*.cpp) $(wildcard $(SRC)/guido/abstract/*.cpp) $(wildcard $(SRC)/lib/*.cpp) $(wildcard $(SRC)/operations/*.cpp) $(wildcard $(SRC)/visitors/*.cpp) $(wildcard $(SRC)/parser/*.cpp) $(wildcard $(SRC)/interface/*.cpp) ) +LOCAL_EXPORT_C_INCLUDES := $(addprefix $(SRC)/, interface) +LOCAL_C_INCLUDES := $(subst $(LOCAL_PATH)/../,,$(wildcard $(SRC)/*/) $(SRC)/guido/abstract) +LOCAL_CPPFLAGS := -DGUIDOAR_EXPORTS -frtti + +include $(BUILD_SHARED_LIBRARY) + diff --git a/guidoar-dev/build/android/jni/Application.mk b/guidoar-dev/build/android/jni/Application.mk new file mode 100644 index 000000000..c9b502157 --- /dev/null +++ b/guidoar-dev/build/android/jni/Application.mk @@ -0,0 +1,4 @@ + +APP_STL := c++_static +APP_PLATFORM ?= android-22 +APP_ABI := all diff --git a/guidoar-dev/build/out/build/x64-Debug (default)/.cmake/api/v1/query/client-MicrosoftVS/query.json b/guidoar-dev/build/out/build/x64-Debug (default)/.cmake/api/v1/query/client-MicrosoftVS/query.json new file mode 100644 index 000000000..308f68dd8 --- /dev/null +++ b/guidoar-dev/build/out/build/x64-Debug (default)/.cmake/api/v1/query/client-MicrosoftVS/query.json @@ -0,0 +1 @@ +{"requests":[{"kind":"cache","version":2},{"kind":"cmakeFiles","version":1},{"kind":"codemodel","version":2}]} \ No newline at end of file diff --git a/guidoar-dev/build/out/build/x64-Debug (default)/.cmake/api/v1/reply/cache-v2-e9fde77deefa93be2183.json b/guidoar-dev/build/out/build/x64-Debug (default)/.cmake/api/v1/reply/cache-v2-e9fde77deefa93be2183.json new file mode 100644 index 000000000..0c61e9cbc --- /dev/null +++ b/guidoar-dev/build/out/build/x64-Debug (default)/.cmake/api/v1/reply/cache-v2-e9fde77deefa93be2183.json @@ -0,0 +1,1095 @@ +{ + "entries" : + [ + { + "name" : "ALL", + "properties" : + [ + { + "name" : "HELPSTRING", + "value" : "build the library and the tools" + } + ], + "type" : "BOOL", + "value" : "OFF" + }, + { + "name" : "CMAKE_AR", + "properties" : + [ + { + "name" : "HELPSTRING", + "value" : "Path to a program." + } + ], + "type" : "FILEPATH", + "value" : "C:/Program Files (x86)/Microsoft Visual Studio/2019/Community/VC/Tools/MSVC/14.28.29333/bin/Hostx64/x64/lib.exe" + }, + { + "name" : "CMAKE_BUILD_TYPE", + "properties" : + [ + { + "name" : "HELPSTRING", + "value" : "No help, variable specified on the command line." + } + ], + "type" : "STRING", + "value" : "Debug" + }, + { + "name" : "CMAKE_CACHEFILE_DIR", + "properties" : + [ + { + "name" : "HELPSTRING", + "value" : "This is the directory where this CMakeCache.txt was created" + } + ], + "type" : "INTERNAL", + "value" : "f:/guidolib/guidoar-dev/build/out/build/x64-Debug (default)" + }, + { + "name" : "CMAKE_CACHE_MAJOR_VERSION", + "properties" : + [ + { + "name" : "HELPSTRING", + "value" : "Major version of cmake used to create the current loaded cache" + } + ], + "type" : "INTERNAL", + "value" : "3" + }, + { + "name" : "CMAKE_CACHE_MINOR_VERSION", + "properties" : + [ + { + "name" : "HELPSTRING", + "value" : "Minor version of cmake used to create the current loaded cache" + } + ], + "type" : "INTERNAL", + "value" : "18" + }, + { + "name" : "CMAKE_CACHE_PATCH_VERSION", + "properties" : + [ + { + "name" : "HELPSTRING", + "value" : "Patch version of cmake used to create the current loaded cache" + } + ], + "type" : "INTERNAL", + "value" : "20081302" + }, + { + "name" : "CMAKE_COMMAND", + "properties" : + [ + { + "name" : "HELPSTRING", + "value" : "Path to CMake executable." + } + ], + "type" : "INTERNAL", + "value" : "C:/Program Files (x86)/Microsoft Visual Studio/2019/Community/Common7/IDE/CommonExtensions/Microsoft/CMake/CMake/bin/cmake.exe" + }, + { + "name" : "CMAKE_CPACK_COMMAND", + "properties" : + [ + { + "name" : "HELPSTRING", + "value" : "Path to cpack program executable." + } + ], + "type" : "INTERNAL", + "value" : "C:/Program Files (x86)/Microsoft Visual Studio/2019/Community/Common7/IDE/CommonExtensions/Microsoft/CMake/CMake/bin/cpack.exe" + }, + { + "name" : "CMAKE_CTEST_COMMAND", + "properties" : + [ + { + "name" : "HELPSTRING", + "value" : "Path to ctest program executable." + } + ], + "type" : "INTERNAL", + "value" : "C:/Program Files (x86)/Microsoft Visual Studio/2019/Community/Common7/IDE/CommonExtensions/Microsoft/CMake/CMake/bin/ctest.exe" + }, + { + "name" : "CMAKE_CXX_COMPILER", + "properties" : + [ + { + "name" : "ADVANCED", + "value" : "1" + }, + { + "name" : "HELPSTRING", + "value" : "No help, variable specified on the command line." + } + ], + "type" : "FILEPATH", + "value" : "C:/Program Files (x86)/Microsoft Visual Studio/2019/Community/VC/Tools/MSVC/14.28.29333/bin/Hostx64/x64/cl.exe" + }, + { + "name" : "CMAKE_CXX_FLAGS", + "properties" : + [ + { + "name" : "ADVANCED", + "value" : "1" + }, + { + "name" : "HELPSTRING", + "value" : "Flags used by the CXX compiler during all build types." + } + ], + "type" : "STRING", + "value" : "/DWIN32 /D_WINDOWS /W3 /GR /EHsc" + }, + { + "name" : "CMAKE_CXX_FLAGS_DEBUG", + "properties" : + [ + { + "name" : "ADVANCED", + "value" : "1" + }, + { + "name" : "HELPSTRING", + "value" : "Flags used by the CXX compiler during DEBUG builds." + } + ], + "type" : "STRING", + "value" : "/MDd /Zi /Ob0 /Od /RTC1" + }, + { + "name" : "CMAKE_CXX_FLAGS_MINSIZEREL", + "properties" : + [ + { + "name" : "ADVANCED", + "value" : "1" + }, + { + "name" : "HELPSTRING", + "value" : "Flags used by the CXX compiler during MINSIZEREL builds." + } + ], + "type" : "STRING", + "value" : "/MD /O1 /Ob1 /DNDEBUG" + }, + { + "name" : "CMAKE_CXX_FLAGS_RELEASE", + "properties" : + [ + { + "name" : "ADVANCED", + "value" : "1" + }, + { + "name" : "HELPSTRING", + "value" : "Flags used by the CXX compiler during RELEASE builds." + } + ], + "type" : "STRING", + "value" : "/MD /O2 /Ob2 /DNDEBUG" + }, + { + "name" : "CMAKE_CXX_FLAGS_RELWITHDEBINFO", + "properties" : + [ + { + "name" : "ADVANCED", + "value" : "1" + }, + { + "name" : "HELPSTRING", + "value" : "Flags used by the CXX compiler during RELWITHDEBINFO builds." + } + ], + "type" : "STRING", + "value" : "/MD /Zi /O2 /Ob1 /DNDEBUG" + }, + { + "name" : "CMAKE_CXX_STANDARD_LIBRARIES", + "properties" : + [ + { + "name" : "ADVANCED", + "value" : "1" + }, + { + "name" : "HELPSTRING", + "value" : "Libraries linked by default with all C++ applications." + } + ], + "type" : "STRING", + "value" : "kernel32.lib user32.lib gdi32.lib winspool.lib shell32.lib ole32.lib oleaut32.lib uuid.lib comdlg32.lib advapi32.lib" + }, + { + "name" : "CMAKE_C_COMPILER", + "properties" : + [ + { + "name" : "ADVANCED", + "value" : "1" + }, + { + "name" : "HELPSTRING", + "value" : "No help, variable specified on the command line." + } + ], + "type" : "FILEPATH", + "value" : "C:/Program Files (x86)/Microsoft Visual Studio/2019/Community/VC/Tools/MSVC/14.28.29333/bin/Hostx64/x64/cl.exe" + }, + { + "name" : "CMAKE_C_FLAGS", + "properties" : + [ + { + "name" : "ADVANCED", + "value" : "1" + }, + { + "name" : "HELPSTRING", + "value" : "Flags used by the C compiler during all build types." + } + ], + "type" : "STRING", + "value" : "/DWIN32 /D_WINDOWS /W3" + }, + { + "name" : "CMAKE_C_FLAGS_DEBUG", + "properties" : + [ + { + "name" : "ADVANCED", + "value" : "1" + }, + { + "name" : "HELPSTRING", + "value" : "Flags used by the C compiler during DEBUG builds." + } + ], + "type" : "STRING", + "value" : "/MDd /Zi /Ob0 /Od /RTC1" + }, + { + "name" : "CMAKE_C_FLAGS_MINSIZEREL", + "properties" : + [ + { + "name" : "ADVANCED", + "value" : "1" + }, + { + "name" : "HELPSTRING", + "value" : "Flags used by the C compiler during MINSIZEREL builds." + } + ], + "type" : "STRING", + "value" : "/MD /O1 /Ob1 /DNDEBUG" + }, + { + "name" : "CMAKE_C_FLAGS_RELEASE", + "properties" : + [ + { + "name" : "ADVANCED", + "value" : "1" + }, + { + "name" : "HELPSTRING", + "value" : "Flags used by the C compiler during RELEASE builds." + } + ], + "type" : "STRING", + "value" : "/MD /O2 /Ob2 /DNDEBUG" + }, + { + "name" : "CMAKE_C_FLAGS_RELWITHDEBINFO", + "properties" : + [ + { + "name" : "ADVANCED", + "value" : "1" + }, + { + "name" : "HELPSTRING", + "value" : "Flags used by the C compiler during RELWITHDEBINFO builds." + } + ], + "type" : "STRING", + "value" : "/MD /Zi /O2 /Ob1 /DNDEBUG" + }, + { + "name" : "CMAKE_C_STANDARD_LIBRARIES", + "properties" : + [ + { + "name" : "ADVANCED", + "value" : "1" + }, + { + "name" : "HELPSTRING", + "value" : "Libraries linked by default with all C applications." + } + ], + "type" : "STRING", + "value" : "kernel32.lib user32.lib gdi32.lib winspool.lib shell32.lib ole32.lib oleaut32.lib uuid.lib comdlg32.lib advapi32.lib" + }, + { + "name" : "CMAKE_EXECUTABLE_FORMAT", + "properties" : + [ + { + "name" : "HELPSTRING", + "value" : "Executable file format" + } + ], + "type" : "INTERNAL", + "value" : "Unknown" + }, + { + "name" : "CMAKE_EXE_LINKER_FLAGS", + "properties" : + [ + { + "name" : "ADVANCED", + "value" : "1" + }, + { + "name" : "HELPSTRING", + "value" : "Flags used by the linker during all build types." + } + ], + "type" : "STRING", + "value" : "/machine:x64" + }, + { + "name" : "CMAKE_EXE_LINKER_FLAGS_DEBUG", + "properties" : + [ + { + "name" : "ADVANCED", + "value" : "1" + }, + { + "name" : "HELPSTRING", + "value" : "Flags used by the linker during DEBUG builds." + } + ], + "type" : "STRING", + "value" : "/debug /INCREMENTAL" + }, + { + "name" : "CMAKE_EXE_LINKER_FLAGS_MINSIZEREL", + "properties" : + [ + { + "name" : "ADVANCED", + "value" : "1" + }, + { + "name" : "HELPSTRING", + "value" : "Flags used by the linker during MINSIZEREL builds." + } + ], + "type" : "STRING", + "value" : "/INCREMENTAL:NO" + }, + { + "name" : "CMAKE_EXE_LINKER_FLAGS_RELEASE", + "properties" : + [ + { + "name" : "ADVANCED", + "value" : "1" + }, + { + "name" : "HELPSTRING", + "value" : "Flags used by the linker during RELEASE builds." + } + ], + "type" : "STRING", + "value" : "/INCREMENTAL:NO" + }, + { + "name" : "CMAKE_EXE_LINKER_FLAGS_RELWITHDEBINFO", + "properties" : + [ + { + "name" : "ADVANCED", + "value" : "1" + }, + { + "name" : "HELPSTRING", + "value" : "Flags used by the linker during RELWITHDEBINFO builds." + } + ], + "type" : "STRING", + "value" : "/debug /INCREMENTAL" + }, + { + "name" : "CMAKE_EXPORT_COMPILE_COMMANDS", + "properties" : + [ + { + "name" : "ADVANCED", + "value" : "1" + }, + { + "name" : "HELPSTRING", + "value" : "Enable/Disable output of compile commands during generation." + } + ], + "type" : "BOOL", + "value" : "" + }, + { + "name" : "CMAKE_EXTRA_GENERATOR", + "properties" : + [ + { + "name" : "HELPSTRING", + "value" : "Name of external makefile project generator." + } + ], + "type" : "INTERNAL", + "value" : "" + }, + { + "name" : "CMAKE_GENERATOR", + "properties" : + [ + { + "name" : "HELPSTRING", + "value" : "Name of generator." + } + ], + "type" : "INTERNAL", + "value" : "Ninja" + }, + { + "name" : "CMAKE_GENERATOR_INSTANCE", + "properties" : + [ + { + "name" : "HELPSTRING", + "value" : "Generator instance identifier." + } + ], + "type" : "INTERNAL", + "value" : "" + }, + { + "name" : "CMAKE_GENERATOR_PLATFORM", + "properties" : + [ + { + "name" : "HELPSTRING", + "value" : "Name of generator platform." + } + ], + "type" : "INTERNAL", + "value" : "" + }, + { + "name" : "CMAKE_GENERATOR_TOOLSET", + "properties" : + [ + { + "name" : "HELPSTRING", + "value" : "Name of generator toolset." + } + ], + "type" : "INTERNAL", + "value" : "" + }, + { + "name" : "CMAKE_HOME_DIRECTORY", + "properties" : + [ + { + "name" : "HELPSTRING", + "value" : "Source directory with the top level CMakeLists.txt file for this project" + } + ], + "type" : "INTERNAL", + "value" : "F:/guidolib/guidoar-dev/build" + }, + { + "name" : "CMAKE_INSTALL_PREFIX", + "properties" : + [ + { + "name" : "HELPSTRING", + "value" : "No help, variable specified on the command line." + } + ], + "type" : "PATH", + "value" : "F:/guidolib/guidoar-dev/build/out/install/x64-Debug (default)" + }, + { + "name" : "CMAKE_LINKER", + "properties" : + [ + { + "name" : "ADVANCED", + "value" : "1" + }, + { + "name" : "HELPSTRING", + "value" : "Path to a program." + } + ], + "type" : "FILEPATH", + "value" : "C:/Program Files (x86)/Microsoft Visual Studio/2019/Community/VC/Tools/MSVC/14.28.29333/bin/Hostx64/x64/link.exe" + }, + { + "name" : "CMAKE_MAKE_PROGRAM", + "properties" : + [ + { + "name" : "HELPSTRING", + "value" : "make program" + } + ], + "type" : "FILEPATH", + "value" : "C:/Program Files (x86)/Microsoft Visual Studio/2019/Community/Common7/IDE/CommonExtensions/Microsoft/CMake/Ninja/ninja.exe" + }, + { + "name" : "CMAKE_MODULE_LINKER_FLAGS", + "properties" : + [ + { + "name" : "ADVANCED", + "value" : "1" + }, + { + "name" : "HELPSTRING", + "value" : "Flags used by the linker during the creation of modules during all build types." + } + ], + "type" : "STRING", + "value" : "/machine:x64" + }, + { + "name" : "CMAKE_MODULE_LINKER_FLAGS_DEBUG", + "properties" : + [ + { + "name" : "ADVANCED", + "value" : "1" + }, + { + "name" : "HELPSTRING", + "value" : "Flags used by the linker during the creation of modules during DEBUG builds." + } + ], + "type" : "STRING", + "value" : "/debug /INCREMENTAL" + }, + { + "name" : "CMAKE_MODULE_LINKER_FLAGS_MINSIZEREL", + "properties" : + [ + { + "name" : "ADVANCED", + "value" : "1" + }, + { + "name" : "HELPSTRING", + "value" : "Flags used by the linker during the creation of modules during MINSIZEREL builds." + } + ], + "type" : "STRING", + "value" : "/INCREMENTAL:NO" + }, + { + "name" : "CMAKE_MODULE_LINKER_FLAGS_RELEASE", + "properties" : + [ + { + "name" : "ADVANCED", + "value" : "1" + }, + { + "name" : "HELPSTRING", + "value" : "Flags used by the linker during the creation of modules during RELEASE builds." + } + ], + "type" : "STRING", + "value" : "/INCREMENTAL:NO" + }, + { + "name" : "CMAKE_MODULE_LINKER_FLAGS_RELWITHDEBINFO", + "properties" : + [ + { + "name" : "ADVANCED", + "value" : "1" + }, + { + "name" : "HELPSTRING", + "value" : "Flags used by the linker during the creation of modules during RELWITHDEBINFO builds." + } + ], + "type" : "STRING", + "value" : "/debug /INCREMENTAL" + }, + { + "name" : "CMAKE_MT", + "properties" : + [ + { + "name" : "ADVANCED", + "value" : "1" + }, + { + "name" : "HELPSTRING", + "value" : "Path to a program." + } + ], + "type" : "FILEPATH", + "value" : "C:/wk/10/bin/10.0.19041.0/x64/mt.exe" + }, + { + "name" : "CMAKE_NUMBER_OF_MAKEFILES", + "properties" : + [ + { + "name" : "HELPSTRING", + "value" : "number of local generators" + } + ], + "type" : "INTERNAL", + "value" : "1" + }, + { + "name" : "CMAKE_PLATFORM_INFO_INITIALIZED", + "properties" : + [ + { + "name" : "HELPSTRING", + "value" : "Platform information initialized" + } + ], + "type" : "INTERNAL", + "value" : "1" + }, + { + "name" : "CMAKE_PROJECT_DESCRIPTION", + "properties" : + [ + { + "name" : "HELPSTRING", + "value" : "Value Computed by CMake" + } + ], + "type" : "STATIC", + "value" : "" + }, + { + "name" : "CMAKE_PROJECT_HOMEPAGE_URL", + "properties" : + [ + { + "name" : "HELPSTRING", + "value" : "Value Computed by CMake" + } + ], + "type" : "STATIC", + "value" : "" + }, + { + "name" : "CMAKE_PROJECT_NAME", + "properties" : + [ + { + "name" : "HELPSTRING", + "value" : "Value Computed by CMake" + } + ], + "type" : "STATIC", + "value" : "guidoar" + }, + { + "name" : "CMAKE_RC_COMPILER", + "properties" : + [ + { + "name" : "ADVANCED", + "value" : "1" + }, + { + "name" : "HELPSTRING", + "value" : "RC compiler" + } + ], + "type" : "FILEPATH", + "value" : "C:/wk/10/bin/10.0.19041.0/x64/rc.exe" + }, + { + "name" : "CMAKE_RC_COMPILER_WORKS", + "properties" : + [ + { + "name" : "HELPSTRING", + "value" : "" + } + ], + "type" : "INTERNAL", + "value" : "1" + }, + { + "name" : "CMAKE_RC_FLAGS", + "properties" : + [ + { + "name" : "ADVANCED", + "value" : "1" + }, + { + "name" : "HELPSTRING", + "value" : "Flags for Windows Resource Compiler during all build types." + } + ], + "type" : "STRING", + "value" : "-DWIN32" + }, + { + "name" : "CMAKE_RC_FLAGS_DEBUG", + "properties" : + [ + { + "name" : "ADVANCED", + "value" : "1" + }, + { + "name" : "HELPSTRING", + "value" : "Flags for Windows Resource Compiler during DEBUG builds." + } + ], + "type" : "STRING", + "value" : "-D_DEBUG" + }, + { + "name" : "CMAKE_RC_FLAGS_MINSIZEREL", + "properties" : + [ + { + "name" : "ADVANCED", + "value" : "1" + }, + { + "name" : "HELPSTRING", + "value" : "Flags for Windows Resource Compiler during MINSIZEREL builds." + } + ], + "type" : "STRING", + "value" : "" + }, + { + "name" : "CMAKE_RC_FLAGS_RELEASE", + "properties" : + [ + { + "name" : "ADVANCED", + "value" : "1" + }, + { + "name" : "HELPSTRING", + "value" : "Flags for Windows Resource Compiler during RELEASE builds." + } + ], + "type" : "STRING", + "value" : "" + }, + { + "name" : "CMAKE_RC_FLAGS_RELWITHDEBINFO", + "properties" : + [ + { + "name" : "ADVANCED", + "value" : "1" + }, + { + "name" : "HELPSTRING", + "value" : "Flags for Windows Resource Compiler during RELWITHDEBINFO builds." + } + ], + "type" : "STRING", + "value" : "" + }, + { + "name" : "CMAKE_ROOT", + "properties" : + [ + { + "name" : "HELPSTRING", + "value" : "Path to CMake installation." + } + ], + "type" : "INTERNAL", + "value" : "C:/Program Files (x86)/Microsoft Visual Studio/2019/Community/Common7/IDE/CommonExtensions/Microsoft/CMake/CMake/share/cmake-3.18" + }, + { + "name" : "CMAKE_SHARED_LINKER_FLAGS", + "properties" : + [ + { + "name" : "ADVANCED", + "value" : "1" + }, + { + "name" : "HELPSTRING", + "value" : "Flags used by the linker during the creation of shared libraries during all build types." + } + ], + "type" : "STRING", + "value" : "/machine:x64" + }, + { + "name" : "CMAKE_SHARED_LINKER_FLAGS_DEBUG", + "properties" : + [ + { + "name" : "ADVANCED", + "value" : "1" + }, + { + "name" : "HELPSTRING", + "value" : "Flags used by the linker during the creation of shared libraries during DEBUG builds." + } + ], + "type" : "STRING", + "value" : "/debug /INCREMENTAL" + }, + { + "name" : "CMAKE_SHARED_LINKER_FLAGS_MINSIZEREL", + "properties" : + [ + { + "name" : "ADVANCED", + "value" : "1" + }, + { + "name" : "HELPSTRING", + "value" : "Flags used by the linker during the creation of shared libraries during MINSIZEREL builds." + } + ], + "type" : "STRING", + "value" : "/INCREMENTAL:NO" + }, + { + "name" : "CMAKE_SHARED_LINKER_FLAGS_RELEASE", + "properties" : + [ + { + "name" : "ADVANCED", + "value" : "1" + }, + { + "name" : "HELPSTRING", + "value" : "Flags used by the linker during the creation of shared libraries during RELEASE builds." + } + ], + "type" : "STRING", + "value" : "/INCREMENTAL:NO" + }, + { + "name" : "CMAKE_SHARED_LINKER_FLAGS_RELWITHDEBINFO", + "properties" : + [ + { + "name" : "ADVANCED", + "value" : "1" + }, + { + "name" : "HELPSTRING", + "value" : "Flags used by the linker during the creation of shared libraries during RELWITHDEBINFO builds." + } + ], + "type" : "STRING", + "value" : "/debug /INCREMENTAL" + }, + { + "name" : "CMAKE_SKIP_INSTALL_RPATH", + "properties" : + [ + { + "name" : "ADVANCED", + "value" : "1" + }, + { + "name" : "HELPSTRING", + "value" : "If set, runtime paths are not added when installing shared libraries, but are added when building." + } + ], + "type" : "BOOL", + "value" : "NO" + }, + { + "name" : "CMAKE_SKIP_RPATH", + "properties" : + [ + { + "name" : "ADVANCED", + "value" : "1" + }, + { + "name" : "HELPSTRING", + "value" : "If set, runtime paths are not added when using shared libraries." + } + ], + "type" : "BOOL", + "value" : "NO" + }, + { + "name" : "CMAKE_STATIC_LINKER_FLAGS", + "properties" : + [ + { + "name" : "ADVANCED", + "value" : "1" + }, + { + "name" : "HELPSTRING", + "value" : "Flags used by the linker during the creation of static libraries during all build types." + } + ], + "type" : "STRING", + "value" : "/machine:x64" + }, + { + "name" : "CMAKE_STATIC_LINKER_FLAGS_DEBUG", + "properties" : + [ + { + "name" : "ADVANCED", + "value" : "1" + }, + { + "name" : "HELPSTRING", + "value" : "Flags used by the linker during the creation of static libraries during DEBUG builds." + } + ], + "type" : "STRING", + "value" : "" + }, + { + "name" : "CMAKE_STATIC_LINKER_FLAGS_MINSIZEREL", + "properties" : + [ + { + "name" : "ADVANCED", + "value" : "1" + }, + { + "name" : "HELPSTRING", + "value" : "Flags used by the linker during the creation of static libraries during MINSIZEREL builds." + } + ], + "type" : "STRING", + "value" : "" + }, + { + "name" : "CMAKE_STATIC_LINKER_FLAGS_RELEASE", + "properties" : + [ + { + "name" : "ADVANCED", + "value" : "1" + }, + { + "name" : "HELPSTRING", + "value" : "Flags used by the linker during the creation of static libraries during RELEASE builds." + } + ], + "type" : "STRING", + "value" : "" + }, + { + "name" : "CMAKE_STATIC_LINKER_FLAGS_RELWITHDEBINFO", + "properties" : + [ + { + "name" : "ADVANCED", + "value" : "1" + }, + { + "name" : "HELPSTRING", + "value" : "Flags used by the linker during the creation of static libraries during RELWITHDEBINFO builds." + } + ], + "type" : "STRING", + "value" : "" + }, + { + "name" : "CMAKE_VERBOSE_MAKEFILE", + "properties" : + [ + { + "name" : "ADVANCED", + "value" : "1" + }, + { + "name" : "HELPSTRING", + "value" : "If this value is on, makefiles will be generated without the .SILENT directive, and all commands will be echoed to the console during the make. This is useful for debugging only. With Visual Studio IDE projects all commands are done without /nologo." + } + ], + "type" : "BOOL", + "value" : "FALSE" + }, + { + "name" : "MIDIEXPORT", + "properties" : + [ + { + "name" : "HELPSTRING", + "value" : "MIDI export" + } + ], + "type" : "BOOL", + "value" : "OFF" + }, + { + "name" : "guidoar_BINARY_DIR", + "properties" : + [ + { + "name" : "HELPSTRING", + "value" : "Value Computed by CMake" + } + ], + "type" : "STATIC", + "value" : "F:/guidolib/guidoar-dev/build/out/build/x64-Debug (default)" + }, + { + "name" : "guidoar_SOURCE_DIR", + "properties" : + [ + { + "name" : "HELPSTRING", + "value" : "Value Computed by CMake" + } + ], + "type" : "STATIC", + "value" : "F:/guidolib/guidoar-dev/build" + } + ], + "kind" : "cache", + "version" : + { + "major" : 2, + "minor" : 0 + } +} diff --git a/guidoar-dev/build/out/build/x64-Debug (default)/.cmake/api/v1/reply/cmakeFiles-v1-584c9d0b7b0fbd2f45b3.json b/guidoar-dev/build/out/build/x64-Debug (default)/.cmake/api/v1/reply/cmakeFiles-v1-584c9d0b7b0fbd2f45b3.json new file mode 100644 index 000000000..2eab21246 --- /dev/null +++ b/guidoar-dev/build/out/build/x64-Debug (default)/.cmake/api/v1/reply/cmakeFiles-v1-584c9d0b7b0fbd2f45b3.json @@ -0,0 +1,135 @@ +{ + "inputs" : + [ + { + "path" : "CMakeLists.txt" + }, + { + "isGenerated" : true, + "path" : "out/build/x64-Debug (default)/CMakeFiles/3.18.20081302-MSVC_2/CMakeSystem.cmake" + }, + { + "isCMake" : true, + "isExternal" : true, + "path" : "C:/Program Files (x86)/Microsoft Visual Studio/2019/Community/Common7/IDE/CommonExtensions/Microsoft/CMake/CMake/share/cmake-3.18/Modules/CMakeSystemSpecificInitialize.cmake" + }, + { + "isGenerated" : true, + "path" : "out/build/x64-Debug (default)/CMakeFiles/3.18.20081302-MSVC_2/CMakeCCompiler.cmake" + }, + { + "isGenerated" : true, + "path" : "out/build/x64-Debug (default)/CMakeFiles/3.18.20081302-MSVC_2/CMakeCXXCompiler.cmake" + }, + { + "isCMake" : true, + "isExternal" : true, + "path" : "C:/Program Files (x86)/Microsoft Visual Studio/2019/Community/Common7/IDE/CommonExtensions/Microsoft/CMake/CMake/share/cmake-3.18/Modules/CMakeSystemSpecificInformation.cmake" + }, + { + "isCMake" : true, + "isExternal" : true, + "path" : "C:/Program Files (x86)/Microsoft Visual Studio/2019/Community/Common7/IDE/CommonExtensions/Microsoft/CMake/CMake/share/cmake-3.18/Modules/CMakeGenericSystem.cmake" + }, + { + "isCMake" : true, + "isExternal" : true, + "path" : "C:/Program Files (x86)/Microsoft Visual Studio/2019/Community/Common7/IDE/CommonExtensions/Microsoft/CMake/CMake/share/cmake-3.18/Modules/CMakeInitializeConfigs.cmake" + }, + { + "isCMake" : true, + "isExternal" : true, + "path" : "C:/Program Files (x86)/Microsoft Visual Studio/2019/Community/Common7/IDE/CommonExtensions/Microsoft/CMake/CMake/share/cmake-3.18/Modules/Platform/Windows.cmake" + }, + { + "isCMake" : true, + "isExternal" : true, + "path" : "C:/Program Files (x86)/Microsoft Visual Studio/2019/Community/Common7/IDE/CommonExtensions/Microsoft/CMake/CMake/share/cmake-3.18/Modules/Platform/WindowsPaths.cmake" + }, + { + "isCMake" : true, + "isExternal" : true, + "path" : "C:/Program Files (x86)/Microsoft Visual Studio/2019/Community/Common7/IDE/CommonExtensions/Microsoft/CMake/CMake/share/cmake-3.18/Modules/CMakeCInformation.cmake" + }, + { + "isCMake" : true, + "isExternal" : true, + "path" : "C:/Program Files (x86)/Microsoft Visual Studio/2019/Community/Common7/IDE/CommonExtensions/Microsoft/CMake/CMake/share/cmake-3.18/Modules/CMakeLanguageInformation.cmake" + }, + { + "isCMake" : true, + "isExternal" : true, + "path" : "C:/Program Files (x86)/Microsoft Visual Studio/2019/Community/Common7/IDE/CommonExtensions/Microsoft/CMake/CMake/share/cmake-3.18/Modules/Compiler/MSVC-C.cmake" + }, + { + "isCMake" : true, + "isExternal" : true, + "path" : "C:/Program Files (x86)/Microsoft Visual Studio/2019/Community/Common7/IDE/CommonExtensions/Microsoft/CMake/CMake/share/cmake-3.18/Modules/Platform/Windows-MSVC-C.cmake" + }, + { + "isCMake" : true, + "isExternal" : true, + "path" : "C:/Program Files (x86)/Microsoft Visual Studio/2019/Community/Common7/IDE/CommonExtensions/Microsoft/CMake/CMake/share/cmake-3.18/Modules/Platform/Windows-MSVC.cmake" + }, + { + "isGenerated" : true, + "path" : "out/build/x64-Debug (default)/CMakeFiles/3.18.20081302-MSVC_2/CMakeRCCompiler.cmake" + }, + { + "isCMake" : true, + "isExternal" : true, + "path" : "C:/Program Files (x86)/Microsoft Visual Studio/2019/Community/Common7/IDE/CommonExtensions/Microsoft/CMake/CMake/share/cmake-3.18/Modules/CMakeRCInformation.cmake" + }, + { + "isCMake" : true, + "isExternal" : true, + "path" : "C:/Program Files (x86)/Microsoft Visual Studio/2019/Community/Common7/IDE/CommonExtensions/Microsoft/CMake/CMake/share/cmake-3.18/Modules/CMakeCommonLanguageInclude.cmake" + }, + { + "isCMake" : true, + "isExternal" : true, + "path" : "C:/Program Files (x86)/Microsoft Visual Studio/2019/Community/Common7/IDE/CommonExtensions/Microsoft/CMake/CMake/share/cmake-3.18/Modules/CMakeCXXInformation.cmake" + }, + { + "isCMake" : true, + "isExternal" : true, + "path" : "C:/Program Files (x86)/Microsoft Visual Studio/2019/Community/Common7/IDE/CommonExtensions/Microsoft/CMake/CMake/share/cmake-3.18/Modules/CMakeLanguageInformation.cmake" + }, + { + "isCMake" : true, + "isExternal" : true, + "path" : "C:/Program Files (x86)/Microsoft Visual Studio/2019/Community/Common7/IDE/CommonExtensions/Microsoft/CMake/CMake/share/cmake-3.18/Modules/Compiler/MSVC-CXX.cmake" + }, + { + "isCMake" : true, + "isExternal" : true, + "path" : "C:/Program Files (x86)/Microsoft Visual Studio/2019/Community/Common7/IDE/CommonExtensions/Microsoft/CMake/CMake/share/cmake-3.18/Modules/Compiler/CMakeCommonCompilerMacros.cmake" + }, + { + "isCMake" : true, + "isExternal" : true, + "path" : "C:/Program Files (x86)/Microsoft Visual Studio/2019/Community/Common7/IDE/CommonExtensions/Microsoft/CMake/CMake/share/cmake-3.18/Modules/Platform/Windows-MSVC-CXX.cmake" + }, + { + "isCMake" : true, + "isExternal" : true, + "path" : "C:/Program Files (x86)/Microsoft Visual Studio/2019/Community/Common7/IDE/CommonExtensions/Microsoft/CMake/CMake/share/cmake-3.18/Modules/Platform/Windows-MSVC.cmake" + }, + { + "isCMake" : true, + "isExternal" : true, + "path" : "C:/Program Files (x86)/Microsoft Visual Studio/2019/Community/Common7/IDE/CommonExtensions/Microsoft/CMake/CMake/share/cmake-3.18/Modules/CMakeCommonLanguageInclude.cmake" + } + ], + "kind" : "cmakeFiles", + "paths" : + { + "build" : "F:/guidolib/guidoar-dev/build/out/build/x64-Debug (default)", + "source" : "F:/guidolib/guidoar-dev/build" + }, + "version" : + { + "major" : 1, + "minor" : 0 + } +} diff --git a/guidoar-dev/build/out/build/x64-Debug (default)/.cmake/api/v1/reply/codemodel-v2-4c1e8293c8b1dbfc3765.json b/guidoar-dev/build/out/build/x64-Debug (default)/.cmake/api/v1/reply/codemodel-v2-4c1e8293c8b1dbfc3765.json new file mode 100644 index 000000000..25b4b4578 --- /dev/null +++ b/guidoar-dev/build/out/build/x64-Debug (default)/.cmake/api/v1/reply/codemodel-v2-4c1e8293c8b1dbfc3765.json @@ -0,0 +1,60 @@ +{ + "configurations" : + [ + { + "directories" : + [ + { + "build" : ".", + "hasInstallRule" : true, + "minimumCMakeVersion" : + { + "string" : "2.6" + }, + "projectIndex" : 0, + "source" : ".", + "targetIndexes" : + [ + 0 + ] + } + ], + "name" : "Release", + "projects" : + [ + { + "directoryIndexes" : + [ + 0 + ], + "name" : "guidoar", + "targetIndexes" : + [ + 0 + ] + } + ], + "targets" : + [ + { + "directoryIndex" : 0, + "id" : "guidoar::@6890427a1f51a3e7e1df", + "jsonFile" : "target-guidoar-Release-a54bebf1e3b7896e4adf.json", + "name" : "guidoar", + "projectIndex" : 0 + } + ] + } + ], + "kind" : "codemodel", + "paths" : + { + "build" : "F:/guidolib/guidoar-dev/build/out/build/x64-Debug (default)", + "source" : "F:/guidolib/guidoar-dev/build" + }, + "version" : + { + "major" : 2, + "minor" : 1 + } +} diff --git a/guidoar-dev/build/out/build/x64-Debug (default)/.cmake/api/v1/reply/index-2021-02-07T07-23-52-0358.json b/guidoar-dev/build/out/build/x64-Debug (default)/.cmake/api/v1/reply/index-2021-02-07T07-23-52-0358.json new file mode 100644 index 000000000..8d6a24370 --- /dev/null +++ b/guidoar-dev/build/out/build/x64-Debug (default)/.cmake/api/v1/reply/index-2021-02-07T07-23-52-0358.json @@ -0,0 +1,110 @@ +{ + "cmake" : + { + "generator" : + { + "multiConfig" : false, + "name" : "Ninja" + }, + "paths" : + { + "cmake" : "C:/Program Files (x86)/Microsoft Visual Studio/2019/Community/Common7/IDE/CommonExtensions/Microsoft/CMake/CMake/bin/cmake.exe", + "cpack" : "C:/Program Files (x86)/Microsoft Visual Studio/2019/Community/Common7/IDE/CommonExtensions/Microsoft/CMake/CMake/bin/cpack.exe", + "ctest" : "C:/Program Files (x86)/Microsoft Visual Studio/2019/Community/Common7/IDE/CommonExtensions/Microsoft/CMake/CMake/bin/ctest.exe", + "root" : "C:/Program Files (x86)/Microsoft Visual Studio/2019/Community/Common7/IDE/CommonExtensions/Microsoft/CMake/CMake/share/cmake-3.18" + }, + "version" : + { + "isDirty" : false, + "major" : 3, + "minor" : 18, + "patch" : 20081302, + "string" : "3.18.20081302-MSVC_2", + "suffix" : "" + } + }, + "objects" : + [ + { + "jsonFile" : "codemodel-v2-4c1e8293c8b1dbfc3765.json", + "kind" : "codemodel", + "version" : + { + "major" : 2, + "minor" : 1 + } + }, + { + "jsonFile" : "cache-v2-e9fde77deefa93be2183.json", + "kind" : "cache", + "version" : + { + "major" : 2, + "minor" : 0 + } + }, + { + "jsonFile" : "cmakeFiles-v1-584c9d0b7b0fbd2f45b3.json", + "kind" : "cmakeFiles", + "version" : + { + "major" : 1, + "minor" : 0 + } + } + ], + "reply" : + { + "client-MicrosoftVS" : + { + "query.json" : + { + "requests" : + [ + { + "kind" : "cache", + "version" : 2 + }, + { + "kind" : "cmakeFiles", + "version" : 1 + }, + { + "kind" : "codemodel", + "version" : 2 + } + ], + "responses" : + [ + { + "jsonFile" : "cache-v2-e9fde77deefa93be2183.json", + "kind" : "cache", + "version" : + { + "major" : 2, + "minor" : 0 + } + }, + { + "jsonFile" : "cmakeFiles-v1-584c9d0b7b0fbd2f45b3.json", + "kind" : "cmakeFiles", + "version" : + { + "major" : 1, + "minor" : 0 + } + }, + { + "jsonFile" : "codemodel-v2-4c1e8293c8b1dbfc3765.json", + "kind" : "codemodel", + "version" : + { + "major" : 2, + "minor" : 1 + } + } + ] + } + } + } +} diff --git a/guidoar-dev/build/out/build/x64-Debug (default)/.cmake/api/v1/reply/target-guidoar-Release-a54bebf1e3b7896e4adf.json b/guidoar-dev/build/out/build/x64-Debug (default)/.cmake/api/v1/reply/target-guidoar-Release-a54bebf1e3b7896e4adf.json new file mode 100644 index 000000000..8f79f730f --- /dev/null +++ b/guidoar-dev/build/out/build/x64-Debug (default)/.cmake/api/v1/reply/target-guidoar-Release-a54bebf1e3b7896e4adf.json @@ -0,0 +1,878 @@ +{ + "artifacts" : + [ + { + "path" : "guidoar.dll" + }, + { + "path" : "F:/guidolib/guidoar-dev/build/lib/guidoar.lib" + }, + { + "path" : "guidoar.pdb" + } + ], + "backtrace" : 1, + "backtraceGraph" : + { + "commands" : + [ + "add_library", + "install", + "add_definitions", + "include_directories" + ], + "files" : + [ + "CMakeLists.txt" + ], + "nodes" : + [ + { + "file" : 0 + }, + { + "command" : 0, + "file" : 0, + "line" : 136, + "parent" : 0 + }, + { + "command" : 1, + "file" : 0, + "line" : 184, + "parent" : 0 + }, + { + "command" : 2, + "file" : 0, + "line" : 30, + "parent" : 0 + }, + { + "command" : 3, + "file" : 0, + "line" : 98, + "parent" : 0 + } + ] + }, + "compileGroups" : + [ + { + "compileCommandFragments" : + [ + { + "fragment" : "/DWIN32 /D_WINDOWS /W3 /GR /EHsc /MD /O2 /Ob2 /DNDEBUG" + } + ], + "defines" : + [ + { + "define" : "GUIDOAR_EXPORTS" + }, + { + "backtrace" : 3, + "define" : "WIN32" + }, + { + "backtrace" : 3, + "define" : "WINVER=0x0400" + } + ], + "includes" : + [ + { + "backtrace" : 4, + "path" : "F:/guidolib/guidoar-dev/build/../src/interface" + }, + { + "backtrace" : 4, + "path" : "F:/guidolib/guidoar-dev/build/../src/guido" + }, + { + "backtrace" : 4, + "path" : "F:/guidolib/guidoar-dev/build/../src/guido/abstract" + }, + { + "backtrace" : 4, + "path" : "F:/guidolib/guidoar-dev/build/../src/lib" + }, + { + "backtrace" : 4, + "path" : "F:/guidolib/guidoar-dev/build/../src/operations" + }, + { + "backtrace" : 4, + "path" : "F:/guidolib/guidoar-dev/build/../src/visitors" + }, + { + "backtrace" : 4, + "path" : "F:/guidolib/guidoar-dev/build/../src/midi" + }, + { + "backtrace" : 4, + "path" : "F:/guidolib/guidoar-dev/build/../src/parser" + }, + { + "backtrace" : 4, + "path" : "F:/guidolib/guidoar-dev/build/../src/midisharelight" + } + ], + "language" : "CXX", + "sourceIndexes" : + [ + 0, + 1, + 2, + 3, + 4, + 5, + 6, + 7, + 8, + 9, + 10, + 11, + 12, + 13, + 14, + 15, + 16, + 17, + 18, + 19, + 20, + 21, + 22, + 23, + 24, + 25, + 26, + 27, + 28, + 29, + 30, + 31, + 32, + 33, + 34, + 35, + 36, + 37 + ] + }, + { + "compileCommandFragments" : + [ + { + "fragment" : "-DWIN32" + } + ], + "defines" : + [ + { + "define" : "GUIDOAR_EXPORTS" + }, + { + "backtrace" : 3, + "define" : "WIN32" + }, + { + "backtrace" : 3, + "define" : "WINVER=0x0400" + } + ], + "includes" : + [ + { + "backtrace" : 4, + "path" : "F:/guidolib/guidoar-dev/build/../src/interface" + }, + { + "backtrace" : 4, + "path" : "F:/guidolib/guidoar-dev/build/../src/guido" + }, + { + "backtrace" : 4, + "path" : "F:/guidolib/guidoar-dev/build/../src/guido/abstract" + }, + { + "backtrace" : 4, + "path" : "F:/guidolib/guidoar-dev/build/../src/lib" + }, + { + "backtrace" : 4, + "path" : "F:/guidolib/guidoar-dev/build/../src/operations" + }, + { + "backtrace" : 4, + "path" : "F:/guidolib/guidoar-dev/build/../src/visitors" + }, + { + "backtrace" : 4, + "path" : "F:/guidolib/guidoar-dev/build/../src/midi" + }, + { + "backtrace" : 4, + "path" : "F:/guidolib/guidoar-dev/build/../src/parser" + }, + { + "backtrace" : 4, + "path" : "F:/guidolib/guidoar-dev/build/../src/midisharelight" + } + ], + "language" : "RC", + "sourceIndexes" : + [ + 91 + ] + } + ], + "id" : "guidoar::@6890427a1f51a3e7e1df", + "install" : + { + "destinations" : + [ + { + "backtrace" : 2, + "path" : "F:/guidolib/guidoar-dev/build/out/install/x64-Debug (default)/bin" + } + ], + "prefix" : + { + "path" : "F:/guidolib/guidoar-dev/build/out/install/x64-Debug (default)" + } + }, + "link" : + { + "commandFragments" : + [ + { + "fragment" : "/machine:x64 /INCREMENTAL:NO", + "role" : "flags" + }, + { + "fragment" : "kernel32.lib user32.lib gdi32.lib winspool.lib shell32.lib ole32.lib oleaut32.lib uuid.lib comdlg32.lib advapi32.lib", + "role" : "libraries" + } + ], + "language" : "CXX" + }, + "name" : "guidoar", + "nameOnDisk" : "guidoar.dll", + "paths" : + { + "build" : ".", + "source" : "." + }, + "sourceGroups" : + [ + { + "name" : "Source Files", + "sourceIndexes" : + [ + 0, + 1, + 2, + 3, + 4, + 5, + 6, + 7, + 8, + 9, + 10, + 11, + 12, + 13, + 14, + 15, + 16, + 17, + 18, + 19, + 20, + 21, + 22, + 23, + 24, + 25, + 26, + 27, + 28, + 29, + 30, + 31, + 32, + 33, + 34, + 35, + 36, + 37, + 91 + ] + }, + { + "name" : "Header Files", + "sourceIndexes" : + [ + 38, + 39, + 40, + 41, + 42, + 43, + 44, + 45, + 46, + 47, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 63, + 64, + 65, + 66, + 67, + 68, + 69, + 70, + 71, + 72, + 73, + 74, + 75, + 76, + 77, + 78, + 79, + 80, + 81, + 82, + 83, + 84, + 85, + 86, + 87, + 88, + 89, + 90 + ] + } + ], + "sources" : + [ + { + "backtrace" : 1, + "compileGroupIndex" : 0, + "path" : "F:/guidolib/guidoar-dev/src/guido/abstract/ARChord.cpp", + "sourceGroupIndex" : 0 + }, + { + "backtrace" : 1, + "compileGroupIndex" : 0, + "path" : "F:/guidolib/guidoar-dev/src/guido/abstract/ARFactory.cpp", + "sourceGroupIndex" : 0 + }, + { + "backtrace" : 1, + "compileGroupIndex" : 0, + "path" : "F:/guidolib/guidoar-dev/src/guido/abstract/ARNote.cpp", + "sourceGroupIndex" : 0 + }, + { + "backtrace" : 1, + "compileGroupIndex" : 0, + "path" : "F:/guidolib/guidoar-dev/src/guido/abstract/AROthers.cpp", + "sourceGroupIndex" : 0 + }, + { + "backtrace" : 1, + "compileGroupIndex" : 0, + "path" : "F:/guidolib/guidoar-dev/src/guido/abstract/ARTag.cpp", + "sourceGroupIndex" : 0 + }, + { + "backtrace" : 1, + "compileGroupIndex" : 0, + "path" : "F:/guidolib/guidoar-dev/src/guido/guidoelement.cpp", + "sourceGroupIndex" : 0 + }, + { + "backtrace" : 1, + "compileGroupIndex" : 0, + "path" : "F:/guidolib/guidoar-dev/src/interface/libguidoar.cpp", + "sourceGroupIndex" : 0 + }, + { + "backtrace" : 1, + "compileGroupIndex" : 0, + "path" : "F:/guidolib/guidoar-dev/src/lib/guidorational.cpp", + "sourceGroupIndex" : 0 + }, + { + "backtrace" : 1, + "compileGroupIndex" : 0, + "path" : "F:/guidolib/guidoar-dev/src/lib/streambeautifuller.cpp", + "sourceGroupIndex" : 0 + }, + { + "backtrace" : 1, + "compileGroupIndex" : 0, + "path" : "F:/guidolib/guidoar-dev/src/midi/midiconverter.cpp", + "sourceGroupIndex" : 0 + }, + { + "backtrace" : 1, + "compileGroupIndex" : 0, + "path" : "F:/guidolib/guidoar-dev/src/operations/bottomOperation.cpp", + "sourceGroupIndex" : 0 + }, + { + "backtrace" : 1, + "compileGroupIndex" : 0, + "path" : "F:/guidolib/guidoar-dev/src/operations/durationOperation.cpp", + "sourceGroupIndex" : 0 + }, + { + "backtrace" : 1, + "compileGroupIndex" : 0, + "path" : "F:/guidolib/guidoar-dev/src/operations/eheadOperation.cpp", + "sourceGroupIndex" : 0 + }, + { + "backtrace" : 1, + "compileGroupIndex" : 0, + "path" : "F:/guidolib/guidoar-dev/src/operations/etailOperation.cpp", + "sourceGroupIndex" : 0 + }, + { + "backtrace" : 1, + "compileGroupIndex" : 0, + "path" : "F:/guidolib/guidoar-dev/src/operations/headOperation.cpp", + "sourceGroupIndex" : 0 + }, + { + "backtrace" : 1, + "compileGroupIndex" : 0, + "path" : "F:/guidolib/guidoar-dev/src/operations/interleaveOperation.cpp", + "sourceGroupIndex" : 0 + }, + { + "backtrace" : 1, + "compileGroupIndex" : 0, + "path" : "F:/guidolib/guidoar-dev/src/operations/markers.cpp", + "sourceGroupIndex" : 0 + }, + { + "backtrace" : 1, + "compileGroupIndex" : 0, + "path" : "F:/guidolib/guidoar-dev/src/operations/mirrorOperation.cpp", + "sourceGroupIndex" : 0 + }, + { + "backtrace" : 1, + "compileGroupIndex" : 0, + "path" : "F:/guidolib/guidoar-dev/src/operations/normalizeOperation.cpp", + "sourceGroupIndex" : 0 + }, + { + "backtrace" : 1, + "compileGroupIndex" : 0, + "path" : "F:/guidolib/guidoar-dev/src/operations/parOperation.cpp", + "sourceGroupIndex" : 0 + }, + { + "backtrace" : 1, + "compileGroupIndex" : 0, + "path" : "F:/guidolib/guidoar-dev/src/operations/pitchApplyOperation.cpp", + "sourceGroupIndex" : 0 + }, + { + "backtrace" : 1, + "compileGroupIndex" : 0, + "path" : "F:/guidolib/guidoar-dev/src/operations/rythmApplyOperation.cpp", + "sourceGroupIndex" : 0 + }, + { + "backtrace" : 1, + "compileGroupIndex" : 0, + "path" : "F:/guidolib/guidoar-dev/src/operations/seqOperation.cpp", + "sourceGroupIndex" : 0 + }, + { + "backtrace" : 1, + "compileGroupIndex" : 0, + "path" : "F:/guidolib/guidoar-dev/src/operations/tailOperation.cpp", + "sourceGroupIndex" : 0 + }, + { + "backtrace" : 1, + "compileGroupIndex" : 0, + "path" : "F:/guidolib/guidoar-dev/src/operations/topOperation.cpp", + "sourceGroupIndex" : 0 + }, + { + "backtrace" : 1, + "compileGroupIndex" : 0, + "path" : "F:/guidolib/guidoar-dev/src/operations/transposeOperation.cpp", + "sourceGroupIndex" : 0 + }, + { + "backtrace" : 1, + "compileGroupIndex" : 0, + "path" : "F:/guidolib/guidoar-dev/src/parser/guidoparser.cpp", + "sourceGroupIndex" : 0 + }, + { + "backtrace" : 1, + "compileGroupIndex" : 0, + "path" : "F:/guidolib/guidoar-dev/src/parser/parser.cpp", + "sourceGroupIndex" : 0 + }, + { + "backtrace" : 1, + "compileGroupIndex" : 0, + "path" : "F:/guidolib/guidoar-dev/src/visitors/clonevisitor.cpp", + "sourceGroupIndex" : 0 + }, + { + "backtrace" : 1, + "compileGroupIndex" : 0, + "path" : "F:/guidolib/guidoar-dev/src/visitors/counteventsvisitor.cpp", + "sourceGroupIndex" : 0 + }, + { + "backtrace" : 1, + "compileGroupIndex" : 0, + "path" : "F:/guidolib/guidoar-dev/src/visitors/durationvisitor.cpp", + "sourceGroupIndex" : 0 + }, + { + "backtrace" : 1, + "compileGroupIndex" : 0, + "path" : "F:/guidolib/guidoar-dev/src/visitors/event2timevisitor.cpp", + "sourceGroupIndex" : 0 + }, + { + "backtrace" : 1, + "compileGroupIndex" : 0, + "path" : "F:/guidolib/guidoar-dev/src/visitors/firstpitchvisitor.cpp", + "sourceGroupIndex" : 0 + }, + { + "backtrace" : 1, + "compileGroupIndex" : 0, + "path" : "F:/guidolib/guidoar-dev/src/visitors/gmnvisitor.cpp", + "sourceGroupIndex" : 0 + }, + { + "backtrace" : 1, + "compileGroupIndex" : 0, + "path" : "F:/guidolib/guidoar-dev/src/visitors/midicontextvisitor.cpp", + "sourceGroupIndex" : 0 + }, + { + "backtrace" : 1, + "compileGroupIndex" : 0, + "path" : "F:/guidolib/guidoar-dev/src/visitors/pitchvisitor.cpp", + "sourceGroupIndex" : 0 + }, + { + "backtrace" : 1, + "compileGroupIndex" : 0, + "path" : "F:/guidolib/guidoar-dev/src/visitors/rythmvisitor.cpp", + "sourceGroupIndex" : 0 + }, + { + "backtrace" : 1, + "compileGroupIndex" : 0, + "path" : "F:/guidolib/guidoar-dev/src/visitors/unrolled_guido_browser.cpp", + "sourceGroupIndex" : 0 + }, + { + "backtrace" : 1, + "path" : "F:/guidolib/guidoar-dev/src/guido/abstract/ARChord.h", + "sourceGroupIndex" : 1 + }, + { + "backtrace" : 1, + "path" : "F:/guidolib/guidoar-dev/src/guido/abstract/ARFactory.h", + "sourceGroupIndex" : 1 + }, + { + "backtrace" : 1, + "path" : "F:/guidolib/guidoar-dev/src/guido/abstract/ARNote.h", + "sourceGroupIndex" : 1 + }, + { + "backtrace" : 1, + "path" : "F:/guidolib/guidoar-dev/src/guido/abstract/AROthers.h", + "sourceGroupIndex" : 1 + }, + { + "backtrace" : 1, + "path" : "F:/guidolib/guidoar-dev/src/guido/abstract/ARTag.h", + "sourceGroupIndex" : 1 + }, + { + "backtrace" : 1, + "path" : "F:/guidolib/guidoar-dev/src/guido/abstract/ARTypes.h", + "sourceGroupIndex" : 1 + }, + { + "backtrace" : 1, + "path" : "F:/guidolib/guidoar-dev/src/guido/guidoelement.h", + "sourceGroupIndex" : 1 + }, + { + "backtrace" : 1, + "path" : "F:/guidolib/guidoar-dev/src/guido/guidotags.h", + "sourceGroupIndex" : 1 + }, + { + "backtrace" : 1, + "path" : "F:/guidolib/guidoar-dev/src/interface/arexport.h", + "sourceGroupIndex" : 1 + }, + { + "backtrace" : 1, + "path" : "F:/guidolib/guidoar-dev/src/interface/guidorational.h", + "sourceGroupIndex" : 1 + }, + { + "backtrace" : 1, + "path" : "F:/guidolib/guidoar-dev/src/interface/libguidoar.h", + "sourceGroupIndex" : 1 + }, + { + "backtrace" : 1, + "path" : "F:/guidolib/guidoar-dev/src/lib/browser.h", + "sourceGroupIndex" : 1 + }, + { + "backtrace" : 1, + "path" : "F:/guidolib/guidoar-dev/src/lib/ctree.h", + "sourceGroupIndex" : 1 + }, + { + "backtrace" : 1, + "path" : "F:/guidolib/guidoar-dev/src/lib/functor.h", + "sourceGroupIndex" : 1 + }, + { + "backtrace" : 1, + "path" : "F:/guidolib/guidoar-dev/src/lib/gar_smartpointer.h", + "sourceGroupIndex" : 1 + }, + { + "backtrace" : 1, + "path" : "F:/guidolib/guidoar-dev/src/lib/ringvector.h", + "sourceGroupIndex" : 1 + }, + { + "backtrace" : 1, + "path" : "F:/guidolib/guidoar-dev/src/lib/singleton.h", + "sourceGroupIndex" : 1 + }, + { + "backtrace" : 1, + "path" : "F:/guidolib/guidoar-dev/src/lib/streambeautifuller.h", + "sourceGroupIndex" : 1 + }, + { + "backtrace" : 1, + "path" : "F:/guidolib/guidoar-dev/src/lib/tree_browser.h", + "sourceGroupIndex" : 1 + }, + { + "backtrace" : 1, + "path" : "F:/guidolib/guidoar-dev/src/midi/midiconverter.h", + "sourceGroupIndex" : 1 + }, + { + "backtrace" : 1, + "path" : "F:/guidolib/guidoar-dev/src/operations/bottomOperation.h", + "sourceGroupIndex" : 1 + }, + { + "backtrace" : 1, + "path" : "F:/guidolib/guidoar-dev/src/operations/durationOperation.h", + "sourceGroupIndex" : 1 + }, + { + "backtrace" : 1, + "path" : "F:/guidolib/guidoar-dev/src/operations/eheadOperation.h", + "sourceGroupIndex" : 1 + }, + { + "backtrace" : 1, + "path" : "F:/guidolib/guidoar-dev/src/operations/etailOperation.h", + "sourceGroupIndex" : 1 + }, + { + "backtrace" : 1, + "path" : "F:/guidolib/guidoar-dev/src/operations/headOperation.h", + "sourceGroupIndex" : 1 + }, + { + "backtrace" : 1, + "path" : "F:/guidolib/guidoar-dev/src/operations/interleaveOperation.h", + "sourceGroupIndex" : 1 + }, + { + "backtrace" : 1, + "path" : "F:/guidolib/guidoar-dev/src/operations/markers.h", + "sourceGroupIndex" : 1 + }, + { + "backtrace" : 1, + "path" : "F:/guidolib/guidoar-dev/src/operations/mirrorOperation.h", + "sourceGroupIndex" : 1 + }, + { + "backtrace" : 1, + "path" : "F:/guidolib/guidoar-dev/src/operations/normalizeOperation.h", + "sourceGroupIndex" : 1 + }, + { + "backtrace" : 1, + "path" : "F:/guidolib/guidoar-dev/src/operations/operation.h", + "sourceGroupIndex" : 1 + }, + { + "backtrace" : 1, + "path" : "F:/guidolib/guidoar-dev/src/operations/parOperation.h", + "sourceGroupIndex" : 1 + }, + { + "backtrace" : 1, + "path" : "F:/guidolib/guidoar-dev/src/operations/pitchApplyOperation.h", + "sourceGroupIndex" : 1 + }, + { + "backtrace" : 1, + "path" : "F:/guidolib/guidoar-dev/src/operations/rythmApplyOperation.h", + "sourceGroupIndex" : 1 + }, + { + "backtrace" : 1, + "path" : "F:/guidolib/guidoar-dev/src/operations/seqOperation.h", + "sourceGroupIndex" : 1 + }, + { + "backtrace" : 1, + "path" : "F:/guidolib/guidoar-dev/src/operations/tailOperation.h", + "sourceGroupIndex" : 1 + }, + { + "backtrace" : 1, + "path" : "F:/guidolib/guidoar-dev/src/operations/topOperation.h", + "sourceGroupIndex" : 1 + }, + { + "backtrace" : 1, + "path" : "F:/guidolib/guidoar-dev/src/operations/transposeOperation.h", + "sourceGroupIndex" : 1 + }, + { + "backtrace" : 1, + "path" : "F:/guidolib/guidoar-dev/src/parser/gmnreader.h", + "sourceGroupIndex" : 1 + }, + { + "backtrace" : 1, + "path" : "F:/guidolib/guidoar-dev/src/parser/guidoparser.h", + "sourceGroupIndex" : 1 + }, + { + "backtrace" : 1, + "path" : "F:/guidolib/guidoar-dev/src/visitors/basevisitor.h", + "sourceGroupIndex" : 1 + }, + { + "backtrace" : 1, + "path" : "F:/guidolib/guidoar-dev/src/visitors/clonevisitor.h", + "sourceGroupIndex" : 1 + }, + { + "backtrace" : 1, + "path" : "F:/guidolib/guidoar-dev/src/visitors/counteventsvisitor.h", + "sourceGroupIndex" : 1 + }, + { + "backtrace" : 1, + "path" : "F:/guidolib/guidoar-dev/src/visitors/countvisitor.h", + "sourceGroupIndex" : 1 + }, + { + "backtrace" : 1, + "path" : "F:/guidolib/guidoar-dev/src/visitors/durationvisitor.h", + "sourceGroupIndex" : 1 + }, + { + "backtrace" : 1, + "path" : "F:/guidolib/guidoar-dev/src/visitors/event2timevisitor.h", + "sourceGroupIndex" : 1 + }, + { + "backtrace" : 1, + "path" : "F:/guidolib/guidoar-dev/src/visitors/firstpitchvisitor.h", + "sourceGroupIndex" : 1 + }, + { + "backtrace" : 1, + "path" : "F:/guidolib/guidoar-dev/src/visitors/gmnvisitor.h", + "sourceGroupIndex" : 1 + }, + { + "backtrace" : 1, + "path" : "F:/guidolib/guidoar-dev/src/visitors/midicontextvisitor.h", + "sourceGroupIndex" : 1 + }, + { + "backtrace" : 1, + "path" : "F:/guidolib/guidoar-dev/src/visitors/pitchvisitor.h", + "sourceGroupIndex" : 1 + }, + { + "backtrace" : 1, + "path" : "F:/guidolib/guidoar-dev/src/visitors/rythmvisitor.h", + "sourceGroupIndex" : 1 + }, + { + "backtrace" : 1, + "path" : "F:/guidolib/guidoar-dev/src/visitors/unrolled_guido_browser.h", + "sourceGroupIndex" : 1 + }, + { + "backtrace" : 1, + "path" : "F:/guidolib/guidoar-dev/src/visitors/visitable.h", + "sourceGroupIndex" : 1 + }, + { + "backtrace" : 1, + "path" : "F:/guidolib/guidoar-dev/src/visitors/visitor.h", + "sourceGroupIndex" : 1 + }, + { + "backtrace" : 1, + "compileGroupIndex" : 1, + "path" : "F:/guidolib/guidoar-dev/rsrc/libguidoar.rc", + "sourceGroupIndex" : 0 + } + ], + "type" : "SHARED_LIBRARY" +} diff --git a/guidoar-dev/build/out/build/x64-Debug (default)/Testing/Temporary/LastTest.log b/guidoar-dev/build/out/build/x64-Debug (default)/Testing/Temporary/LastTest.log new file mode 100644 index 000000000..dfc3f1913 --- /dev/null +++ b/guidoar-dev/build/out/build/x64-Debug (default)/Testing/Temporary/LastTest.log @@ -0,0 +1,3 @@ +Start testing: Feb 07 09:23 GTB Standard Time +---------------------------------------------------------- +End testing: Feb 07 09:23 GTB Standard Time diff --git a/guidoar-dev/build/out/build/x64-Debug (default)/VSInheritEnvironments.txt b/guidoar-dev/build/out/build/x64-Debug (default)/VSInheritEnvironments.txt new file mode 100644 index 000000000..f8cc9d8ac --- /dev/null +++ b/guidoar-dev/build/out/build/x64-Debug (default)/VSInheritEnvironments.txt @@ -0,0 +1 @@ +msvc_x64_x64 \ No newline at end of file diff --git a/guidoar-dev/build/out/build/x64-Debug (default)/build.ninja b/guidoar-dev/build/out/build/x64-Debug (default)/build.ninja new file mode 100644 index 000000000..10716a4f0 --- /dev/null +++ b/guidoar-dev/build/out/build/x64-Debug (default)/build.ninja @@ -0,0 +1,524 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Ninja" Generator, CMake Version 3.18 + +# This file contains all the build statements describing the +# compilation DAG. + +# ============================================================================= +# Write statements declared in CMakeLists.txt: +# +# Which is the root file. +# ============================================================================= + +# ============================================================================= +# Project: guidoar +# Configurations: Release +# ============================================================================= + +############################################# +# Minimal version of Ninja required by this file + +ninja_required_version = 1.5 + + +############################################# +# Set configuration variable for custom commands. + +CONFIGURATION = Release +# ============================================================================= +# Include auxiliary files. + + +############################################# +# Include rules file. + +include CMakeFiles\rules.ninja + + +############################################# +# Utility command for list_install_components + +build list_install_components: phony + +# ============================================================================= +# Object build statements for SHARED_LIBRARY target guidoar + + +############################################# +# Order-only phony target for guidoar + +build cmake_object_order_depends_target_guidoar: phony || CMakeFiles\guidoar.dir + +build CMakeFiles\guidoar.dir\F_\guidolib\guidoar-dev\src\guido\abstract\ARChord.cpp.obj: CXX_COMPILER__guidoar_Release F$:\guidolib\guidoar-dev\src\guido\abstract\ARChord.cpp || cmake_object_order_depends_target_guidoar + DEFINES = -DGUIDOAR_EXPORTS -DWIN32 -DWINVER=0x0400 + FLAGS = /DWIN32 /D_WINDOWS /W3 /GR /EHsc /MD /O2 /Ob2 /DNDEBUG + INCLUDES = -I..\..\..\..\src\interface -I..\..\..\..\src\guido -I..\..\..\..\src\guido\abstract -I..\..\..\..\src\lib -I..\..\..\..\src\operations -I..\..\..\..\src\visitors -I..\..\..\..\src\midi -I..\..\..\..\src\parser -I..\..\..\..\src\midisharelight + OBJECT_DIR = CMakeFiles\guidoar.dir + OBJECT_FILE_DIR = CMakeFiles\guidoar.dir\F_\guidolib\guidoar-dev\src\guido\abstract + TARGET_COMPILE_PDB = CMakeFiles\guidoar.dir\ + TARGET_PDB = guidoar.pdb + +build CMakeFiles\guidoar.dir\F_\guidolib\guidoar-dev\src\guido\abstract\ARFactory.cpp.obj: CXX_COMPILER__guidoar_Release F$:\guidolib\guidoar-dev\src\guido\abstract\ARFactory.cpp || cmake_object_order_depends_target_guidoar + DEFINES = -DGUIDOAR_EXPORTS -DWIN32 -DWINVER=0x0400 + FLAGS = /DWIN32 /D_WINDOWS /W3 /GR /EHsc /MD /O2 /Ob2 /DNDEBUG + INCLUDES = -I..\..\..\..\src\interface -I..\..\..\..\src\guido -I..\..\..\..\src\guido\abstract -I..\..\..\..\src\lib -I..\..\..\..\src\operations -I..\..\..\..\src\visitors -I..\..\..\..\src\midi -I..\..\..\..\src\parser -I..\..\..\..\src\midisharelight + OBJECT_DIR = CMakeFiles\guidoar.dir + OBJECT_FILE_DIR = CMakeFiles\guidoar.dir\F_\guidolib\guidoar-dev\src\guido\abstract + TARGET_COMPILE_PDB = CMakeFiles\guidoar.dir\ + TARGET_PDB = guidoar.pdb + +build CMakeFiles\guidoar.dir\F_\guidolib\guidoar-dev\src\guido\abstract\ARNote.cpp.obj: CXX_COMPILER__guidoar_Release F$:\guidolib\guidoar-dev\src\guido\abstract\ARNote.cpp || cmake_object_order_depends_target_guidoar + DEFINES = -DGUIDOAR_EXPORTS -DWIN32 -DWINVER=0x0400 + FLAGS = /DWIN32 /D_WINDOWS /W3 /GR /EHsc /MD /O2 /Ob2 /DNDEBUG + INCLUDES = -I..\..\..\..\src\interface -I..\..\..\..\src\guido -I..\..\..\..\src\guido\abstract -I..\..\..\..\src\lib -I..\..\..\..\src\operations -I..\..\..\..\src\visitors -I..\..\..\..\src\midi -I..\..\..\..\src\parser -I..\..\..\..\src\midisharelight + OBJECT_DIR = CMakeFiles\guidoar.dir + OBJECT_FILE_DIR = CMakeFiles\guidoar.dir\F_\guidolib\guidoar-dev\src\guido\abstract + TARGET_COMPILE_PDB = CMakeFiles\guidoar.dir\ + TARGET_PDB = guidoar.pdb + +build CMakeFiles\guidoar.dir\F_\guidolib\guidoar-dev\src\guido\abstract\AROthers.cpp.obj: CXX_COMPILER__guidoar_Release F$:\guidolib\guidoar-dev\src\guido\abstract\AROthers.cpp || cmake_object_order_depends_target_guidoar + DEFINES = -DGUIDOAR_EXPORTS -DWIN32 -DWINVER=0x0400 + FLAGS = /DWIN32 /D_WINDOWS /W3 /GR /EHsc /MD /O2 /Ob2 /DNDEBUG + INCLUDES = -I..\..\..\..\src\interface -I..\..\..\..\src\guido -I..\..\..\..\src\guido\abstract -I..\..\..\..\src\lib -I..\..\..\..\src\operations -I..\..\..\..\src\visitors -I..\..\..\..\src\midi -I..\..\..\..\src\parser -I..\..\..\..\src\midisharelight + OBJECT_DIR = CMakeFiles\guidoar.dir + OBJECT_FILE_DIR = CMakeFiles\guidoar.dir\F_\guidolib\guidoar-dev\src\guido\abstract + TARGET_COMPILE_PDB = CMakeFiles\guidoar.dir\ + TARGET_PDB = guidoar.pdb + +build CMakeFiles\guidoar.dir\F_\guidolib\guidoar-dev\src\guido\abstract\ARTag.cpp.obj: CXX_COMPILER__guidoar_Release F$:\guidolib\guidoar-dev\src\guido\abstract\ARTag.cpp || cmake_object_order_depends_target_guidoar + DEFINES = -DGUIDOAR_EXPORTS -DWIN32 -DWINVER=0x0400 + FLAGS = /DWIN32 /D_WINDOWS /W3 /GR /EHsc /MD /O2 /Ob2 /DNDEBUG + INCLUDES = -I..\..\..\..\src\interface -I..\..\..\..\src\guido -I..\..\..\..\src\guido\abstract -I..\..\..\..\src\lib -I..\..\..\..\src\operations -I..\..\..\..\src\visitors -I..\..\..\..\src\midi -I..\..\..\..\src\parser -I..\..\..\..\src\midisharelight + OBJECT_DIR = CMakeFiles\guidoar.dir + OBJECT_FILE_DIR = CMakeFiles\guidoar.dir\F_\guidolib\guidoar-dev\src\guido\abstract + TARGET_COMPILE_PDB = CMakeFiles\guidoar.dir\ + TARGET_PDB = guidoar.pdb + +build CMakeFiles\guidoar.dir\F_\guidolib\guidoar-dev\src\guido\guidoelement.cpp.obj: CXX_COMPILER__guidoar_Release F$:\guidolib\guidoar-dev\src\guido\guidoelement.cpp || cmake_object_order_depends_target_guidoar + DEFINES = -DGUIDOAR_EXPORTS -DWIN32 -DWINVER=0x0400 + FLAGS = /DWIN32 /D_WINDOWS /W3 /GR /EHsc /MD /O2 /Ob2 /DNDEBUG + INCLUDES = -I..\..\..\..\src\interface -I..\..\..\..\src\guido -I..\..\..\..\src\guido\abstract -I..\..\..\..\src\lib -I..\..\..\..\src\operations -I..\..\..\..\src\visitors -I..\..\..\..\src\midi -I..\..\..\..\src\parser -I..\..\..\..\src\midisharelight + OBJECT_DIR = CMakeFiles\guidoar.dir + OBJECT_FILE_DIR = CMakeFiles\guidoar.dir\F_\guidolib\guidoar-dev\src\guido + TARGET_COMPILE_PDB = CMakeFiles\guidoar.dir\ + TARGET_PDB = guidoar.pdb + +build CMakeFiles\guidoar.dir\F_\guidolib\guidoar-dev\src\interface\libguidoar.cpp.obj: CXX_COMPILER__guidoar_Release F$:\guidolib\guidoar-dev\src\interface\libguidoar.cpp || cmake_object_order_depends_target_guidoar + DEFINES = -DGUIDOAR_EXPORTS -DWIN32 -DWINVER=0x0400 + FLAGS = /DWIN32 /D_WINDOWS /W3 /GR /EHsc /MD /O2 /Ob2 /DNDEBUG + INCLUDES = -I..\..\..\..\src\interface -I..\..\..\..\src\guido -I..\..\..\..\src\guido\abstract -I..\..\..\..\src\lib -I..\..\..\..\src\operations -I..\..\..\..\src\visitors -I..\..\..\..\src\midi -I..\..\..\..\src\parser -I..\..\..\..\src\midisharelight + OBJECT_DIR = CMakeFiles\guidoar.dir + OBJECT_FILE_DIR = CMakeFiles\guidoar.dir\F_\guidolib\guidoar-dev\src\interface + TARGET_COMPILE_PDB = CMakeFiles\guidoar.dir\ + TARGET_PDB = guidoar.pdb + +build CMakeFiles\guidoar.dir\F_\guidolib\guidoar-dev\src\lib\guidorational.cpp.obj: CXX_COMPILER__guidoar_Release F$:\guidolib\guidoar-dev\src\lib\guidorational.cpp || cmake_object_order_depends_target_guidoar + DEFINES = -DGUIDOAR_EXPORTS -DWIN32 -DWINVER=0x0400 + FLAGS = /DWIN32 /D_WINDOWS /W3 /GR /EHsc /MD /O2 /Ob2 /DNDEBUG + INCLUDES = -I..\..\..\..\src\interface -I..\..\..\..\src\guido -I..\..\..\..\src\guido\abstract -I..\..\..\..\src\lib -I..\..\..\..\src\operations -I..\..\..\..\src\visitors -I..\..\..\..\src\midi -I..\..\..\..\src\parser -I..\..\..\..\src\midisharelight + OBJECT_DIR = CMakeFiles\guidoar.dir + OBJECT_FILE_DIR = CMakeFiles\guidoar.dir\F_\guidolib\guidoar-dev\src\lib + TARGET_COMPILE_PDB = CMakeFiles\guidoar.dir\ + TARGET_PDB = guidoar.pdb + +build CMakeFiles\guidoar.dir\F_\guidolib\guidoar-dev\src\lib\streambeautifuller.cpp.obj: CXX_COMPILER__guidoar_Release F$:\guidolib\guidoar-dev\src\lib\streambeautifuller.cpp || cmake_object_order_depends_target_guidoar + DEFINES = -DGUIDOAR_EXPORTS -DWIN32 -DWINVER=0x0400 + FLAGS = /DWIN32 /D_WINDOWS /W3 /GR /EHsc /MD /O2 /Ob2 /DNDEBUG + INCLUDES = -I..\..\..\..\src\interface -I..\..\..\..\src\guido -I..\..\..\..\src\guido\abstract -I..\..\..\..\src\lib -I..\..\..\..\src\operations -I..\..\..\..\src\visitors -I..\..\..\..\src\midi -I..\..\..\..\src\parser -I..\..\..\..\src\midisharelight + OBJECT_DIR = CMakeFiles\guidoar.dir + OBJECT_FILE_DIR = CMakeFiles\guidoar.dir\F_\guidolib\guidoar-dev\src\lib + TARGET_COMPILE_PDB = CMakeFiles\guidoar.dir\ + TARGET_PDB = guidoar.pdb + +build CMakeFiles\guidoar.dir\F_\guidolib\guidoar-dev\src\midi\midiconverter.cpp.obj: CXX_COMPILER__guidoar_Release F$:\guidolib\guidoar-dev\src\midi\midiconverter.cpp || cmake_object_order_depends_target_guidoar + DEFINES = -DGUIDOAR_EXPORTS -DWIN32 -DWINVER=0x0400 + FLAGS = /DWIN32 /D_WINDOWS /W3 /GR /EHsc /MD /O2 /Ob2 /DNDEBUG + INCLUDES = -I..\..\..\..\src\interface -I..\..\..\..\src\guido -I..\..\..\..\src\guido\abstract -I..\..\..\..\src\lib -I..\..\..\..\src\operations -I..\..\..\..\src\visitors -I..\..\..\..\src\midi -I..\..\..\..\src\parser -I..\..\..\..\src\midisharelight + OBJECT_DIR = CMakeFiles\guidoar.dir + OBJECT_FILE_DIR = CMakeFiles\guidoar.dir\F_\guidolib\guidoar-dev\src\midi + TARGET_COMPILE_PDB = CMakeFiles\guidoar.dir\ + TARGET_PDB = guidoar.pdb + +build CMakeFiles\guidoar.dir\F_\guidolib\guidoar-dev\src\operations\bottomOperation.cpp.obj: CXX_COMPILER__guidoar_Release F$:\guidolib\guidoar-dev\src\operations\bottomOperation.cpp || cmake_object_order_depends_target_guidoar + DEFINES = -DGUIDOAR_EXPORTS -DWIN32 -DWINVER=0x0400 + FLAGS = /DWIN32 /D_WINDOWS /W3 /GR /EHsc /MD /O2 /Ob2 /DNDEBUG + INCLUDES = -I..\..\..\..\src\interface -I..\..\..\..\src\guido -I..\..\..\..\src\guido\abstract -I..\..\..\..\src\lib -I..\..\..\..\src\operations -I..\..\..\..\src\visitors -I..\..\..\..\src\midi -I..\..\..\..\src\parser -I..\..\..\..\src\midisharelight + OBJECT_DIR = CMakeFiles\guidoar.dir + OBJECT_FILE_DIR = CMakeFiles\guidoar.dir\F_\guidolib\guidoar-dev\src\operations + TARGET_COMPILE_PDB = CMakeFiles\guidoar.dir\ + TARGET_PDB = guidoar.pdb + +build CMakeFiles\guidoar.dir\F_\guidolib\guidoar-dev\src\operations\durationOperation.cpp.obj: CXX_COMPILER__guidoar_Release F$:\guidolib\guidoar-dev\src\operations\durationOperation.cpp || cmake_object_order_depends_target_guidoar + DEFINES = -DGUIDOAR_EXPORTS -DWIN32 -DWINVER=0x0400 + FLAGS = /DWIN32 /D_WINDOWS /W3 /GR /EHsc /MD /O2 /Ob2 /DNDEBUG + INCLUDES = -I..\..\..\..\src\interface -I..\..\..\..\src\guido -I..\..\..\..\src\guido\abstract -I..\..\..\..\src\lib -I..\..\..\..\src\operations -I..\..\..\..\src\visitors -I..\..\..\..\src\midi -I..\..\..\..\src\parser -I..\..\..\..\src\midisharelight + OBJECT_DIR = CMakeFiles\guidoar.dir + OBJECT_FILE_DIR = CMakeFiles\guidoar.dir\F_\guidolib\guidoar-dev\src\operations + TARGET_COMPILE_PDB = CMakeFiles\guidoar.dir\ + TARGET_PDB = guidoar.pdb + +build CMakeFiles\guidoar.dir\F_\guidolib\guidoar-dev\src\operations\eheadOperation.cpp.obj: CXX_COMPILER__guidoar_Release F$:\guidolib\guidoar-dev\src\operations\eheadOperation.cpp || cmake_object_order_depends_target_guidoar + DEFINES = -DGUIDOAR_EXPORTS -DWIN32 -DWINVER=0x0400 + FLAGS = /DWIN32 /D_WINDOWS /W3 /GR /EHsc /MD /O2 /Ob2 /DNDEBUG + INCLUDES = -I..\..\..\..\src\interface -I..\..\..\..\src\guido -I..\..\..\..\src\guido\abstract -I..\..\..\..\src\lib -I..\..\..\..\src\operations -I..\..\..\..\src\visitors -I..\..\..\..\src\midi -I..\..\..\..\src\parser -I..\..\..\..\src\midisharelight + OBJECT_DIR = CMakeFiles\guidoar.dir + OBJECT_FILE_DIR = CMakeFiles\guidoar.dir\F_\guidolib\guidoar-dev\src\operations + TARGET_COMPILE_PDB = CMakeFiles\guidoar.dir\ + TARGET_PDB = guidoar.pdb + +build CMakeFiles\guidoar.dir\F_\guidolib\guidoar-dev\src\operations\etailOperation.cpp.obj: CXX_COMPILER__guidoar_Release F$:\guidolib\guidoar-dev\src\operations\etailOperation.cpp || cmake_object_order_depends_target_guidoar + DEFINES = -DGUIDOAR_EXPORTS -DWIN32 -DWINVER=0x0400 + FLAGS = /DWIN32 /D_WINDOWS /W3 /GR /EHsc /MD /O2 /Ob2 /DNDEBUG + INCLUDES = -I..\..\..\..\src\interface -I..\..\..\..\src\guido -I..\..\..\..\src\guido\abstract -I..\..\..\..\src\lib -I..\..\..\..\src\operations -I..\..\..\..\src\visitors -I..\..\..\..\src\midi -I..\..\..\..\src\parser -I..\..\..\..\src\midisharelight + OBJECT_DIR = CMakeFiles\guidoar.dir + OBJECT_FILE_DIR = CMakeFiles\guidoar.dir\F_\guidolib\guidoar-dev\src\operations + TARGET_COMPILE_PDB = CMakeFiles\guidoar.dir\ + TARGET_PDB = guidoar.pdb + +build CMakeFiles\guidoar.dir\F_\guidolib\guidoar-dev\src\operations\headOperation.cpp.obj: CXX_COMPILER__guidoar_Release F$:\guidolib\guidoar-dev\src\operations\headOperation.cpp || cmake_object_order_depends_target_guidoar + DEFINES = -DGUIDOAR_EXPORTS -DWIN32 -DWINVER=0x0400 + FLAGS = /DWIN32 /D_WINDOWS /W3 /GR /EHsc /MD /O2 /Ob2 /DNDEBUG + INCLUDES = -I..\..\..\..\src\interface -I..\..\..\..\src\guido -I..\..\..\..\src\guido\abstract -I..\..\..\..\src\lib -I..\..\..\..\src\operations -I..\..\..\..\src\visitors -I..\..\..\..\src\midi -I..\..\..\..\src\parser -I..\..\..\..\src\midisharelight + OBJECT_DIR = CMakeFiles\guidoar.dir + OBJECT_FILE_DIR = CMakeFiles\guidoar.dir\F_\guidolib\guidoar-dev\src\operations + TARGET_COMPILE_PDB = CMakeFiles\guidoar.dir\ + TARGET_PDB = guidoar.pdb + +build CMakeFiles\guidoar.dir\F_\guidolib\guidoar-dev\src\operations\interleaveOperation.cpp.obj: CXX_COMPILER__guidoar_Release F$:\guidolib\guidoar-dev\src\operations\interleaveOperation.cpp || cmake_object_order_depends_target_guidoar + DEFINES = -DGUIDOAR_EXPORTS -DWIN32 -DWINVER=0x0400 + FLAGS = /DWIN32 /D_WINDOWS /W3 /GR /EHsc /MD /O2 /Ob2 /DNDEBUG + INCLUDES = -I..\..\..\..\src\interface -I..\..\..\..\src\guido -I..\..\..\..\src\guido\abstract -I..\..\..\..\src\lib -I..\..\..\..\src\operations -I..\..\..\..\src\visitors -I..\..\..\..\src\midi -I..\..\..\..\src\parser -I..\..\..\..\src\midisharelight + OBJECT_DIR = CMakeFiles\guidoar.dir + OBJECT_FILE_DIR = CMakeFiles\guidoar.dir\F_\guidolib\guidoar-dev\src\operations + TARGET_COMPILE_PDB = CMakeFiles\guidoar.dir\ + TARGET_PDB = guidoar.pdb + +build CMakeFiles\guidoar.dir\F_\guidolib\guidoar-dev\src\operations\markers.cpp.obj: CXX_COMPILER__guidoar_Release F$:\guidolib\guidoar-dev\src\operations\markers.cpp || cmake_object_order_depends_target_guidoar + DEFINES = -DGUIDOAR_EXPORTS -DWIN32 -DWINVER=0x0400 + FLAGS = /DWIN32 /D_WINDOWS /W3 /GR /EHsc /MD /O2 /Ob2 /DNDEBUG + INCLUDES = -I..\..\..\..\src\interface -I..\..\..\..\src\guido -I..\..\..\..\src\guido\abstract -I..\..\..\..\src\lib -I..\..\..\..\src\operations -I..\..\..\..\src\visitors -I..\..\..\..\src\midi -I..\..\..\..\src\parser -I..\..\..\..\src\midisharelight + OBJECT_DIR = CMakeFiles\guidoar.dir + OBJECT_FILE_DIR = CMakeFiles\guidoar.dir\F_\guidolib\guidoar-dev\src\operations + TARGET_COMPILE_PDB = CMakeFiles\guidoar.dir\ + TARGET_PDB = guidoar.pdb + +build CMakeFiles\guidoar.dir\F_\guidolib\guidoar-dev\src\operations\mirrorOperation.cpp.obj: CXX_COMPILER__guidoar_Release F$:\guidolib\guidoar-dev\src\operations\mirrorOperation.cpp || cmake_object_order_depends_target_guidoar + DEFINES = -DGUIDOAR_EXPORTS -DWIN32 -DWINVER=0x0400 + FLAGS = /DWIN32 /D_WINDOWS /W3 /GR /EHsc /MD /O2 /Ob2 /DNDEBUG + INCLUDES = -I..\..\..\..\src\interface -I..\..\..\..\src\guido -I..\..\..\..\src\guido\abstract -I..\..\..\..\src\lib -I..\..\..\..\src\operations -I..\..\..\..\src\visitors -I..\..\..\..\src\midi -I..\..\..\..\src\parser -I..\..\..\..\src\midisharelight + OBJECT_DIR = CMakeFiles\guidoar.dir + OBJECT_FILE_DIR = CMakeFiles\guidoar.dir\F_\guidolib\guidoar-dev\src\operations + TARGET_COMPILE_PDB = CMakeFiles\guidoar.dir\ + TARGET_PDB = guidoar.pdb + +build CMakeFiles\guidoar.dir\F_\guidolib\guidoar-dev\src\operations\normalizeOperation.cpp.obj: CXX_COMPILER__guidoar_Release F$:\guidolib\guidoar-dev\src\operations\normalizeOperation.cpp || cmake_object_order_depends_target_guidoar + DEFINES = -DGUIDOAR_EXPORTS -DWIN32 -DWINVER=0x0400 + FLAGS = /DWIN32 /D_WINDOWS /W3 /GR /EHsc /MD /O2 /Ob2 /DNDEBUG + INCLUDES = -I..\..\..\..\src\interface -I..\..\..\..\src\guido -I..\..\..\..\src\guido\abstract -I..\..\..\..\src\lib -I..\..\..\..\src\operations -I..\..\..\..\src\visitors -I..\..\..\..\src\midi -I..\..\..\..\src\parser -I..\..\..\..\src\midisharelight + OBJECT_DIR = CMakeFiles\guidoar.dir + OBJECT_FILE_DIR = CMakeFiles\guidoar.dir\F_\guidolib\guidoar-dev\src\operations + TARGET_COMPILE_PDB = CMakeFiles\guidoar.dir\ + TARGET_PDB = guidoar.pdb + +build CMakeFiles\guidoar.dir\F_\guidolib\guidoar-dev\src\operations\parOperation.cpp.obj: CXX_COMPILER__guidoar_Release F$:\guidolib\guidoar-dev\src\operations\parOperation.cpp || cmake_object_order_depends_target_guidoar + DEFINES = -DGUIDOAR_EXPORTS -DWIN32 -DWINVER=0x0400 + FLAGS = /DWIN32 /D_WINDOWS /W3 /GR /EHsc /MD /O2 /Ob2 /DNDEBUG + INCLUDES = -I..\..\..\..\src\interface -I..\..\..\..\src\guido -I..\..\..\..\src\guido\abstract -I..\..\..\..\src\lib -I..\..\..\..\src\operations -I..\..\..\..\src\visitors -I..\..\..\..\src\midi -I..\..\..\..\src\parser -I..\..\..\..\src\midisharelight + OBJECT_DIR = CMakeFiles\guidoar.dir + OBJECT_FILE_DIR = CMakeFiles\guidoar.dir\F_\guidolib\guidoar-dev\src\operations + TARGET_COMPILE_PDB = CMakeFiles\guidoar.dir\ + TARGET_PDB = guidoar.pdb + +build CMakeFiles\guidoar.dir\F_\guidolib\guidoar-dev\src\operations\pitchApplyOperation.cpp.obj: CXX_COMPILER__guidoar_Release F$:\guidolib\guidoar-dev\src\operations\pitchApplyOperation.cpp || cmake_object_order_depends_target_guidoar + DEFINES = -DGUIDOAR_EXPORTS -DWIN32 -DWINVER=0x0400 + FLAGS = /DWIN32 /D_WINDOWS /W3 /GR /EHsc /MD /O2 /Ob2 /DNDEBUG + INCLUDES = -I..\..\..\..\src\interface -I..\..\..\..\src\guido -I..\..\..\..\src\guido\abstract -I..\..\..\..\src\lib -I..\..\..\..\src\operations -I..\..\..\..\src\visitors -I..\..\..\..\src\midi -I..\..\..\..\src\parser -I..\..\..\..\src\midisharelight + OBJECT_DIR = CMakeFiles\guidoar.dir + OBJECT_FILE_DIR = CMakeFiles\guidoar.dir\F_\guidolib\guidoar-dev\src\operations + TARGET_COMPILE_PDB = CMakeFiles\guidoar.dir\ + TARGET_PDB = guidoar.pdb + +build CMakeFiles\guidoar.dir\F_\guidolib\guidoar-dev\src\operations\rythmApplyOperation.cpp.obj: CXX_COMPILER__guidoar_Release F$:\guidolib\guidoar-dev\src\operations\rythmApplyOperation.cpp || cmake_object_order_depends_target_guidoar + DEFINES = -DGUIDOAR_EXPORTS -DWIN32 -DWINVER=0x0400 + FLAGS = /DWIN32 /D_WINDOWS /W3 /GR /EHsc /MD /O2 /Ob2 /DNDEBUG + INCLUDES = -I..\..\..\..\src\interface -I..\..\..\..\src\guido -I..\..\..\..\src\guido\abstract -I..\..\..\..\src\lib -I..\..\..\..\src\operations -I..\..\..\..\src\visitors -I..\..\..\..\src\midi -I..\..\..\..\src\parser -I..\..\..\..\src\midisharelight + OBJECT_DIR = CMakeFiles\guidoar.dir + OBJECT_FILE_DIR = CMakeFiles\guidoar.dir\F_\guidolib\guidoar-dev\src\operations + TARGET_COMPILE_PDB = CMakeFiles\guidoar.dir\ + TARGET_PDB = guidoar.pdb + +build CMakeFiles\guidoar.dir\F_\guidolib\guidoar-dev\src\operations\seqOperation.cpp.obj: CXX_COMPILER__guidoar_Release F$:\guidolib\guidoar-dev\src\operations\seqOperation.cpp || cmake_object_order_depends_target_guidoar + DEFINES = -DGUIDOAR_EXPORTS -DWIN32 -DWINVER=0x0400 + FLAGS = /DWIN32 /D_WINDOWS /W3 /GR /EHsc /MD /O2 /Ob2 /DNDEBUG + INCLUDES = -I..\..\..\..\src\interface -I..\..\..\..\src\guido -I..\..\..\..\src\guido\abstract -I..\..\..\..\src\lib -I..\..\..\..\src\operations -I..\..\..\..\src\visitors -I..\..\..\..\src\midi -I..\..\..\..\src\parser -I..\..\..\..\src\midisharelight + OBJECT_DIR = CMakeFiles\guidoar.dir + OBJECT_FILE_DIR = CMakeFiles\guidoar.dir\F_\guidolib\guidoar-dev\src\operations + TARGET_COMPILE_PDB = CMakeFiles\guidoar.dir\ + TARGET_PDB = guidoar.pdb + +build CMakeFiles\guidoar.dir\F_\guidolib\guidoar-dev\src\operations\tailOperation.cpp.obj: CXX_COMPILER__guidoar_Release F$:\guidolib\guidoar-dev\src\operations\tailOperation.cpp || cmake_object_order_depends_target_guidoar + DEFINES = -DGUIDOAR_EXPORTS -DWIN32 -DWINVER=0x0400 + FLAGS = /DWIN32 /D_WINDOWS /W3 /GR /EHsc /MD /O2 /Ob2 /DNDEBUG + INCLUDES = -I..\..\..\..\src\interface -I..\..\..\..\src\guido -I..\..\..\..\src\guido\abstract -I..\..\..\..\src\lib -I..\..\..\..\src\operations -I..\..\..\..\src\visitors -I..\..\..\..\src\midi -I..\..\..\..\src\parser -I..\..\..\..\src\midisharelight + OBJECT_DIR = CMakeFiles\guidoar.dir + OBJECT_FILE_DIR = CMakeFiles\guidoar.dir\F_\guidolib\guidoar-dev\src\operations + TARGET_COMPILE_PDB = CMakeFiles\guidoar.dir\ + TARGET_PDB = guidoar.pdb + +build CMakeFiles\guidoar.dir\F_\guidolib\guidoar-dev\src\operations\topOperation.cpp.obj: CXX_COMPILER__guidoar_Release F$:\guidolib\guidoar-dev\src\operations\topOperation.cpp || cmake_object_order_depends_target_guidoar + DEFINES = -DGUIDOAR_EXPORTS -DWIN32 -DWINVER=0x0400 + FLAGS = /DWIN32 /D_WINDOWS /W3 /GR /EHsc /MD /O2 /Ob2 /DNDEBUG + INCLUDES = -I..\..\..\..\src\interface -I..\..\..\..\src\guido -I..\..\..\..\src\guido\abstract -I..\..\..\..\src\lib -I..\..\..\..\src\operations -I..\..\..\..\src\visitors -I..\..\..\..\src\midi -I..\..\..\..\src\parser -I..\..\..\..\src\midisharelight + OBJECT_DIR = CMakeFiles\guidoar.dir + OBJECT_FILE_DIR = CMakeFiles\guidoar.dir\F_\guidolib\guidoar-dev\src\operations + TARGET_COMPILE_PDB = CMakeFiles\guidoar.dir\ + TARGET_PDB = guidoar.pdb + +build CMakeFiles\guidoar.dir\F_\guidolib\guidoar-dev\src\operations\transposeOperation.cpp.obj: CXX_COMPILER__guidoar_Release F$:\guidolib\guidoar-dev\src\operations\transposeOperation.cpp || cmake_object_order_depends_target_guidoar + DEFINES = -DGUIDOAR_EXPORTS -DWIN32 -DWINVER=0x0400 + FLAGS = /DWIN32 /D_WINDOWS /W3 /GR /EHsc /MD /O2 /Ob2 /DNDEBUG + INCLUDES = -I..\..\..\..\src\interface -I..\..\..\..\src\guido -I..\..\..\..\src\guido\abstract -I..\..\..\..\src\lib -I..\..\..\..\src\operations -I..\..\..\..\src\visitors -I..\..\..\..\src\midi -I..\..\..\..\src\parser -I..\..\..\..\src\midisharelight + OBJECT_DIR = CMakeFiles\guidoar.dir + OBJECT_FILE_DIR = CMakeFiles\guidoar.dir\F_\guidolib\guidoar-dev\src\operations + TARGET_COMPILE_PDB = CMakeFiles\guidoar.dir\ + TARGET_PDB = guidoar.pdb + +build CMakeFiles\guidoar.dir\F_\guidolib\guidoar-dev\src\parser\guidoparser.cpp.obj: CXX_COMPILER__guidoar_Release F$:\guidolib\guidoar-dev\src\parser\guidoparser.cpp || cmake_object_order_depends_target_guidoar + DEFINES = -DGUIDOAR_EXPORTS -DWIN32 -DWINVER=0x0400 + FLAGS = /DWIN32 /D_WINDOWS /W3 /GR /EHsc /MD /O2 /Ob2 /DNDEBUG + INCLUDES = -I..\..\..\..\src\interface -I..\..\..\..\src\guido -I..\..\..\..\src\guido\abstract -I..\..\..\..\src\lib -I..\..\..\..\src\operations -I..\..\..\..\src\visitors -I..\..\..\..\src\midi -I..\..\..\..\src\parser -I..\..\..\..\src\midisharelight + OBJECT_DIR = CMakeFiles\guidoar.dir + OBJECT_FILE_DIR = CMakeFiles\guidoar.dir\F_\guidolib\guidoar-dev\src\parser + TARGET_COMPILE_PDB = CMakeFiles\guidoar.dir\ + TARGET_PDB = guidoar.pdb + +build CMakeFiles\guidoar.dir\F_\guidolib\guidoar-dev\src\parser\parser.cpp.obj: CXX_COMPILER__guidoar_Release F$:\guidolib\guidoar-dev\src\parser\parser.cpp || cmake_object_order_depends_target_guidoar + DEFINES = -DGUIDOAR_EXPORTS -DWIN32 -DWINVER=0x0400 + FLAGS = /DWIN32 /D_WINDOWS /W3 /GR /EHsc /MD /O2 /Ob2 /DNDEBUG + INCLUDES = -I..\..\..\..\src\interface -I..\..\..\..\src\guido -I..\..\..\..\src\guido\abstract -I..\..\..\..\src\lib -I..\..\..\..\src\operations -I..\..\..\..\src\visitors -I..\..\..\..\src\midi -I..\..\..\..\src\parser -I..\..\..\..\src\midisharelight + OBJECT_DIR = CMakeFiles\guidoar.dir + OBJECT_FILE_DIR = CMakeFiles\guidoar.dir\F_\guidolib\guidoar-dev\src\parser + TARGET_COMPILE_PDB = CMakeFiles\guidoar.dir\ + TARGET_PDB = guidoar.pdb + +build CMakeFiles\guidoar.dir\F_\guidolib\guidoar-dev\src\visitors\clonevisitor.cpp.obj: CXX_COMPILER__guidoar_Release F$:\guidolib\guidoar-dev\src\visitors\clonevisitor.cpp || cmake_object_order_depends_target_guidoar + DEFINES = -DGUIDOAR_EXPORTS -DWIN32 -DWINVER=0x0400 + FLAGS = /DWIN32 /D_WINDOWS /W3 /GR /EHsc /MD /O2 /Ob2 /DNDEBUG + INCLUDES = -I..\..\..\..\src\interface -I..\..\..\..\src\guido -I..\..\..\..\src\guido\abstract -I..\..\..\..\src\lib -I..\..\..\..\src\operations -I..\..\..\..\src\visitors -I..\..\..\..\src\midi -I..\..\..\..\src\parser -I..\..\..\..\src\midisharelight + OBJECT_DIR = CMakeFiles\guidoar.dir + OBJECT_FILE_DIR = CMakeFiles\guidoar.dir\F_\guidolib\guidoar-dev\src\visitors + TARGET_COMPILE_PDB = CMakeFiles\guidoar.dir\ + TARGET_PDB = guidoar.pdb + +build CMakeFiles\guidoar.dir\F_\guidolib\guidoar-dev\src\visitors\counteventsvisitor.cpp.obj: CXX_COMPILER__guidoar_Release F$:\guidolib\guidoar-dev\src\visitors\counteventsvisitor.cpp || cmake_object_order_depends_target_guidoar + DEFINES = -DGUIDOAR_EXPORTS -DWIN32 -DWINVER=0x0400 + FLAGS = /DWIN32 /D_WINDOWS /W3 /GR /EHsc /MD /O2 /Ob2 /DNDEBUG + INCLUDES = -I..\..\..\..\src\interface -I..\..\..\..\src\guido -I..\..\..\..\src\guido\abstract -I..\..\..\..\src\lib -I..\..\..\..\src\operations -I..\..\..\..\src\visitors -I..\..\..\..\src\midi -I..\..\..\..\src\parser -I..\..\..\..\src\midisharelight + OBJECT_DIR = CMakeFiles\guidoar.dir + OBJECT_FILE_DIR = CMakeFiles\guidoar.dir\F_\guidolib\guidoar-dev\src\visitors + TARGET_COMPILE_PDB = CMakeFiles\guidoar.dir\ + TARGET_PDB = guidoar.pdb + +build CMakeFiles\guidoar.dir\F_\guidolib\guidoar-dev\src\visitors\durationvisitor.cpp.obj: CXX_COMPILER__guidoar_Release F$:\guidolib\guidoar-dev\src\visitors\durationvisitor.cpp || cmake_object_order_depends_target_guidoar + DEFINES = -DGUIDOAR_EXPORTS -DWIN32 -DWINVER=0x0400 + FLAGS = /DWIN32 /D_WINDOWS /W3 /GR /EHsc /MD /O2 /Ob2 /DNDEBUG + INCLUDES = -I..\..\..\..\src\interface -I..\..\..\..\src\guido -I..\..\..\..\src\guido\abstract -I..\..\..\..\src\lib -I..\..\..\..\src\operations -I..\..\..\..\src\visitors -I..\..\..\..\src\midi -I..\..\..\..\src\parser -I..\..\..\..\src\midisharelight + OBJECT_DIR = CMakeFiles\guidoar.dir + OBJECT_FILE_DIR = CMakeFiles\guidoar.dir\F_\guidolib\guidoar-dev\src\visitors + TARGET_COMPILE_PDB = CMakeFiles\guidoar.dir\ + TARGET_PDB = guidoar.pdb + +build CMakeFiles\guidoar.dir\F_\guidolib\guidoar-dev\src\visitors\event2timevisitor.cpp.obj: CXX_COMPILER__guidoar_Release F$:\guidolib\guidoar-dev\src\visitors\event2timevisitor.cpp || cmake_object_order_depends_target_guidoar + DEFINES = -DGUIDOAR_EXPORTS -DWIN32 -DWINVER=0x0400 + FLAGS = /DWIN32 /D_WINDOWS /W3 /GR /EHsc /MD /O2 /Ob2 /DNDEBUG + INCLUDES = -I..\..\..\..\src\interface -I..\..\..\..\src\guido -I..\..\..\..\src\guido\abstract -I..\..\..\..\src\lib -I..\..\..\..\src\operations -I..\..\..\..\src\visitors -I..\..\..\..\src\midi -I..\..\..\..\src\parser -I..\..\..\..\src\midisharelight + OBJECT_DIR = CMakeFiles\guidoar.dir + OBJECT_FILE_DIR = CMakeFiles\guidoar.dir\F_\guidolib\guidoar-dev\src\visitors + TARGET_COMPILE_PDB = CMakeFiles\guidoar.dir\ + TARGET_PDB = guidoar.pdb + +build CMakeFiles\guidoar.dir\F_\guidolib\guidoar-dev\src\visitors\firstpitchvisitor.cpp.obj: CXX_COMPILER__guidoar_Release F$:\guidolib\guidoar-dev\src\visitors\firstpitchvisitor.cpp || cmake_object_order_depends_target_guidoar + DEFINES = -DGUIDOAR_EXPORTS -DWIN32 -DWINVER=0x0400 + FLAGS = /DWIN32 /D_WINDOWS /W3 /GR /EHsc /MD /O2 /Ob2 /DNDEBUG + INCLUDES = -I..\..\..\..\src\interface -I..\..\..\..\src\guido -I..\..\..\..\src\guido\abstract -I..\..\..\..\src\lib -I..\..\..\..\src\operations -I..\..\..\..\src\visitors -I..\..\..\..\src\midi -I..\..\..\..\src\parser -I..\..\..\..\src\midisharelight + OBJECT_DIR = CMakeFiles\guidoar.dir + OBJECT_FILE_DIR = CMakeFiles\guidoar.dir\F_\guidolib\guidoar-dev\src\visitors + TARGET_COMPILE_PDB = CMakeFiles\guidoar.dir\ + TARGET_PDB = guidoar.pdb + +build CMakeFiles\guidoar.dir\F_\guidolib\guidoar-dev\src\visitors\gmnvisitor.cpp.obj: CXX_COMPILER__guidoar_Release F$:\guidolib\guidoar-dev\src\visitors\gmnvisitor.cpp || cmake_object_order_depends_target_guidoar + DEFINES = -DGUIDOAR_EXPORTS -DWIN32 -DWINVER=0x0400 + FLAGS = /DWIN32 /D_WINDOWS /W3 /GR /EHsc /MD /O2 /Ob2 /DNDEBUG + INCLUDES = -I..\..\..\..\src\interface -I..\..\..\..\src\guido -I..\..\..\..\src\guido\abstract -I..\..\..\..\src\lib -I..\..\..\..\src\operations -I..\..\..\..\src\visitors -I..\..\..\..\src\midi -I..\..\..\..\src\parser -I..\..\..\..\src\midisharelight + OBJECT_DIR = CMakeFiles\guidoar.dir + OBJECT_FILE_DIR = CMakeFiles\guidoar.dir\F_\guidolib\guidoar-dev\src\visitors + TARGET_COMPILE_PDB = CMakeFiles\guidoar.dir\ + TARGET_PDB = guidoar.pdb + +build CMakeFiles\guidoar.dir\F_\guidolib\guidoar-dev\src\visitors\midicontextvisitor.cpp.obj: CXX_COMPILER__guidoar_Release F$:\guidolib\guidoar-dev\src\visitors\midicontextvisitor.cpp || cmake_object_order_depends_target_guidoar + DEFINES = -DGUIDOAR_EXPORTS -DWIN32 -DWINVER=0x0400 + FLAGS = /DWIN32 /D_WINDOWS /W3 /GR /EHsc /MD /O2 /Ob2 /DNDEBUG + INCLUDES = -I..\..\..\..\src\interface -I..\..\..\..\src\guido -I..\..\..\..\src\guido\abstract -I..\..\..\..\src\lib -I..\..\..\..\src\operations -I..\..\..\..\src\visitors -I..\..\..\..\src\midi -I..\..\..\..\src\parser -I..\..\..\..\src\midisharelight + OBJECT_DIR = CMakeFiles\guidoar.dir + OBJECT_FILE_DIR = CMakeFiles\guidoar.dir\F_\guidolib\guidoar-dev\src\visitors + TARGET_COMPILE_PDB = CMakeFiles\guidoar.dir\ + TARGET_PDB = guidoar.pdb + +build CMakeFiles\guidoar.dir\F_\guidolib\guidoar-dev\src\visitors\pitchvisitor.cpp.obj: CXX_COMPILER__guidoar_Release F$:\guidolib\guidoar-dev\src\visitors\pitchvisitor.cpp || cmake_object_order_depends_target_guidoar + DEFINES = -DGUIDOAR_EXPORTS -DWIN32 -DWINVER=0x0400 + FLAGS = /DWIN32 /D_WINDOWS /W3 /GR /EHsc /MD /O2 /Ob2 /DNDEBUG + INCLUDES = -I..\..\..\..\src\interface -I..\..\..\..\src\guido -I..\..\..\..\src\guido\abstract -I..\..\..\..\src\lib -I..\..\..\..\src\operations -I..\..\..\..\src\visitors -I..\..\..\..\src\midi -I..\..\..\..\src\parser -I..\..\..\..\src\midisharelight + OBJECT_DIR = CMakeFiles\guidoar.dir + OBJECT_FILE_DIR = CMakeFiles\guidoar.dir\F_\guidolib\guidoar-dev\src\visitors + TARGET_COMPILE_PDB = CMakeFiles\guidoar.dir\ + TARGET_PDB = guidoar.pdb + +build CMakeFiles\guidoar.dir\F_\guidolib\guidoar-dev\src\visitors\rythmvisitor.cpp.obj: CXX_COMPILER__guidoar_Release F$:\guidolib\guidoar-dev\src\visitors\rythmvisitor.cpp || cmake_object_order_depends_target_guidoar + DEFINES = -DGUIDOAR_EXPORTS -DWIN32 -DWINVER=0x0400 + FLAGS = /DWIN32 /D_WINDOWS /W3 /GR /EHsc /MD /O2 /Ob2 /DNDEBUG + INCLUDES = -I..\..\..\..\src\interface -I..\..\..\..\src\guido -I..\..\..\..\src\guido\abstract -I..\..\..\..\src\lib -I..\..\..\..\src\operations -I..\..\..\..\src\visitors -I..\..\..\..\src\midi -I..\..\..\..\src\parser -I..\..\..\..\src\midisharelight + OBJECT_DIR = CMakeFiles\guidoar.dir + OBJECT_FILE_DIR = CMakeFiles\guidoar.dir\F_\guidolib\guidoar-dev\src\visitors + TARGET_COMPILE_PDB = CMakeFiles\guidoar.dir\ + TARGET_PDB = guidoar.pdb + +build CMakeFiles\guidoar.dir\F_\guidolib\guidoar-dev\src\visitors\unrolled_guido_browser.cpp.obj: CXX_COMPILER__guidoar_Release F$:\guidolib\guidoar-dev\src\visitors\unrolled_guido_browser.cpp || cmake_object_order_depends_target_guidoar + DEFINES = -DGUIDOAR_EXPORTS -DWIN32 -DWINVER=0x0400 + FLAGS = /DWIN32 /D_WINDOWS /W3 /GR /EHsc /MD /O2 /Ob2 /DNDEBUG + INCLUDES = -I..\..\..\..\src\interface -I..\..\..\..\src\guido -I..\..\..\..\src\guido\abstract -I..\..\..\..\src\lib -I..\..\..\..\src\operations -I..\..\..\..\src\visitors -I..\..\..\..\src\midi -I..\..\..\..\src\parser -I..\..\..\..\src\midisharelight + OBJECT_DIR = CMakeFiles\guidoar.dir + OBJECT_FILE_DIR = CMakeFiles\guidoar.dir\F_\guidolib\guidoar-dev\src\visitors + TARGET_COMPILE_PDB = CMakeFiles\guidoar.dir\ + TARGET_PDB = guidoar.pdb + +build CMakeFiles\guidoar.dir\F_\guidolib\guidoar-dev\rsrc\libguidoar.rc.res: RC_COMPILER__guidoar_Release F$:\guidolib\guidoar-dev\rsrc\libguidoar.rc || cmake_object_order_depends_target_guidoar + DEFINES = -DGUIDOAR_EXPORTS -DWIN32 -DWINVER=0x0400 + DEP_FILE = CMakeFiles\guidoar.dir\F_\guidolib\guidoar-dev\rsrc\libguidoar.rc.res.d + FLAGS = -DWIN32 + INCLUDES = -I F:\guidolib\guidoar-dev\src\interface -I F:\guidolib\guidoar-dev\src\guido -I F:\guidolib\guidoar-dev\src\guido\abstract -I F:\guidolib\guidoar-dev\src\lib -I F:\guidolib\guidoar-dev\src\operations -I F:\guidolib\guidoar-dev\src\visitors -I F:\guidolib\guidoar-dev\src\midi -I F:\guidolib\guidoar-dev\src\parser -I F:\guidolib\guidoar-dev\src\midisharelight + OBJECT_DIR = CMakeFiles\guidoar.dir + OBJECT_FILE_DIR = CMakeFiles\guidoar.dir\F_\guidolib\guidoar-dev\rsrc + TARGET_COMPILE_PDB = CMakeFiles\guidoar.dir\ + TARGET_PDB = guidoar.pdb + + +# ============================================================================= +# Link build statements for SHARED_LIBRARY target guidoar + + +############################################# +# Link the shared library guidoar.dll + +build guidoar.dll ..\..\..\lib\guidoar.lib: CXX_SHARED_LIBRARY_LINKER__guidoar_Release CMakeFiles\guidoar.dir\F_\guidolib\guidoar-dev\src\guido\abstract\ARChord.cpp.obj CMakeFiles\guidoar.dir\F_\guidolib\guidoar-dev\src\guido\abstract\ARFactory.cpp.obj CMakeFiles\guidoar.dir\F_\guidolib\guidoar-dev\src\guido\abstract\ARNote.cpp.obj CMakeFiles\guidoar.dir\F_\guidolib\guidoar-dev\src\guido\abstract\AROthers.cpp.obj CMakeFiles\guidoar.dir\F_\guidolib\guidoar-dev\src\guido\abstract\ARTag.cpp.obj CMakeFiles\guidoar.dir\F_\guidolib\guidoar-dev\src\guido\guidoelement.cpp.obj CMakeFiles\guidoar.dir\F_\guidolib\guidoar-dev\src\interface\libguidoar.cpp.obj CMakeFiles\guidoar.dir\F_\guidolib\guidoar-dev\src\lib\guidorational.cpp.obj CMakeFiles\guidoar.dir\F_\guidolib\guidoar-dev\src\lib\streambeautifuller.cpp.obj CMakeFiles\guidoar.dir\F_\guidolib\guidoar-dev\src\midi\midiconverter.cpp.obj CMakeFiles\guidoar.dir\F_\guidolib\guidoar-dev\src\operations\bottomOperation.cpp.obj CMakeFiles\guidoar.dir\F_\guidolib\guidoar-dev\src\operations\durationOperation.cpp.obj CMakeFiles\guidoar.dir\F_\guidolib\guidoar-dev\src\operations\eheadOperation.cpp.obj CMakeFiles\guidoar.dir\F_\guidolib\guidoar-dev\src\operations\etailOperation.cpp.obj CMakeFiles\guidoar.dir\F_\guidolib\guidoar-dev\src\operations\headOperation.cpp.obj CMakeFiles\guidoar.dir\F_\guidolib\guidoar-dev\src\operations\interleaveOperation.cpp.obj CMakeFiles\guidoar.dir\F_\guidolib\guidoar-dev\src\operations\markers.cpp.obj CMakeFiles\guidoar.dir\F_\guidolib\guidoar-dev\src\operations\mirrorOperation.cpp.obj CMakeFiles\guidoar.dir\F_\guidolib\guidoar-dev\src\operations\normalizeOperation.cpp.obj CMakeFiles\guidoar.dir\F_\guidolib\guidoar-dev\src\operations\parOperation.cpp.obj CMakeFiles\guidoar.dir\F_\guidolib\guidoar-dev\src\operations\pitchApplyOperation.cpp.obj CMakeFiles\guidoar.dir\F_\guidolib\guidoar-dev\src\operations\rythmApplyOperation.cpp.obj CMakeFiles\guidoar.dir\F_\guidolib\guidoar-dev\src\operations\seqOperation.cpp.obj CMakeFiles\guidoar.dir\F_\guidolib\guidoar-dev\src\operations\tailOperation.cpp.obj CMakeFiles\guidoar.dir\F_\guidolib\guidoar-dev\src\operations\topOperation.cpp.obj CMakeFiles\guidoar.dir\F_\guidolib\guidoar-dev\src\operations\transposeOperation.cpp.obj CMakeFiles\guidoar.dir\F_\guidolib\guidoar-dev\src\parser\guidoparser.cpp.obj CMakeFiles\guidoar.dir\F_\guidolib\guidoar-dev\src\parser\parser.cpp.obj CMakeFiles\guidoar.dir\F_\guidolib\guidoar-dev\src\visitors\clonevisitor.cpp.obj CMakeFiles\guidoar.dir\F_\guidolib\guidoar-dev\src\visitors\counteventsvisitor.cpp.obj CMakeFiles\guidoar.dir\F_\guidolib\guidoar-dev\src\visitors\durationvisitor.cpp.obj CMakeFiles\guidoar.dir\F_\guidolib\guidoar-dev\src\visitors\event2timevisitor.cpp.obj CMakeFiles\guidoar.dir\F_\guidolib\guidoar-dev\src\visitors\firstpitchvisitor.cpp.obj CMakeFiles\guidoar.dir\F_\guidolib\guidoar-dev\src\visitors\gmnvisitor.cpp.obj CMakeFiles\guidoar.dir\F_\guidolib\guidoar-dev\src\visitors\midicontextvisitor.cpp.obj CMakeFiles\guidoar.dir\F_\guidolib\guidoar-dev\src\visitors\pitchvisitor.cpp.obj CMakeFiles\guidoar.dir\F_\guidolib\guidoar-dev\src\visitors\rythmvisitor.cpp.obj CMakeFiles\guidoar.dir\F_\guidolib\guidoar-dev\src\visitors\unrolled_guido_browser.cpp.obj CMakeFiles\guidoar.dir\F_\guidolib\guidoar-dev\rsrc\libguidoar.rc.res + LANGUAGE_COMPILE_FLAGS = /DWIN32 /D_WINDOWS /W3 /GR /EHsc /MD /O2 /Ob2 /DNDEBUG + LINK_FLAGS = /machine:x64 /INCREMENTAL:NO + LINK_LIBRARIES = kernel32.lib user32.lib gdi32.lib winspool.lib shell32.lib ole32.lib oleaut32.lib uuid.lib comdlg32.lib advapi32.lib + OBJECT_DIR = CMakeFiles\guidoar.dir + POST_BUILD = cd . + PRE_LINK = cd . + RESTAT = 1 + TARGET_COMPILE_PDB = CMakeFiles\guidoar.dir\ + TARGET_FILE = guidoar.dll + TARGET_IMPLIB = ..\..\..\lib\guidoar.lib + TARGET_PDB = guidoar.pdb + + +############################################# +# Utility command for install/local + +build CMakeFiles\install\local.util: CUSTOM_COMMAND all + COMMAND = cmd.exe /C "cd /D "F:\guidolib\guidoar-dev\build\out\build\x64-Debug (default)" && "C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\Common7\IDE\CommonExtensions\Microsoft\CMake\CMake\bin\cmake.exe" -DCMAKE_INSTALL_LOCAL_ONLY=1 -P cmake_install.cmake" + DESC = Installing only the local directory... + pool = console + restat = 1 + +build install\local: phony CMakeFiles\install\local.util + + +############################################# +# Utility command for install + +build CMakeFiles\install.util: CUSTOM_COMMAND all + COMMAND = cmd.exe /C "cd /D "F:\guidolib\guidoar-dev\build\out\build\x64-Debug (default)" && "C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\Common7\IDE\CommonExtensions\Microsoft\CMake\CMake\bin\cmake.exe" -P cmake_install.cmake" + DESC = Install the project... + pool = console + restat = 1 + +build install: phony CMakeFiles\install.util + + +############################################# +# Utility command for edit_cache + +build CMakeFiles\edit_cache.util: CUSTOM_COMMAND + COMMAND = cmd.exe /C "cd /D "F:\guidolib\guidoar-dev\build\out\build\x64-Debug (default)" && "C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\Common7\IDE\CommonExtensions\Microsoft\CMake\CMake\bin\cmake.exe" -E echo "No interactive CMake dialog available."" + DESC = No interactive CMake dialog available... + restat = 1 + +build edit_cache: phony CMakeFiles\edit_cache.util + + +############################################# +# Utility command for rebuild_cache + +build CMakeFiles\rebuild_cache.util: CUSTOM_COMMAND + COMMAND = cmd.exe /C "cd /D "F:\guidolib\guidoar-dev\build\out\build\x64-Debug (default)" && "C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\Common7\IDE\CommonExtensions\Microsoft\CMake\CMake\bin\cmake.exe" --regenerate-during-build -SF:\guidolib\guidoar-dev\build -B"F:\guidolib\guidoar-dev\build\out\build\x64-Debug (default)"" + DESC = Running CMake to regenerate build system... + pool = console + restat = 1 + +build rebuild_cache: phony CMakeFiles\rebuild_cache.util + +# ============================================================================= +# Target aliases. + +build guidoar: phony guidoar.dll + +# ============================================================================= +# Folder targets. + +# ============================================================================= + +############################################# +# Folder: F:/guidolib/guidoar-dev/build/out/build/x64-Debug (default) + +build all: phony guidoar.dll + +# ============================================================================= +# Unknown Build Time Dependencies. +# Tell Ninja that they may appear as side effects of build rules +# otherwise ordered by order-only dependencies. + +# ============================================================================= +# Built-in targets + + +############################################# +# Re-run CMake if any of its inputs changed. + +build build.ninja: RERUN_CMAKE | ..\..\..\CMakeLists.txt C$:\Program$ Files$ (x86)\Microsoft$ Visual$ Studio\2019\Community\Common7\IDE\CommonExtensions\Microsoft\CMake\CMake\share\cmake-3.18\Modules\CMakeCInformation.cmake C$:\Program$ Files$ (x86)\Microsoft$ Visual$ Studio\2019\Community\Common7\IDE\CommonExtensions\Microsoft\CMake\CMake\share\cmake-3.18\Modules\CMakeCXXInformation.cmake C$:\Program$ Files$ (x86)\Microsoft$ Visual$ Studio\2019\Community\Common7\IDE\CommonExtensions\Microsoft\CMake\CMake\share\cmake-3.18\Modules\CMakeCommonLanguageInclude.cmake C$:\Program$ Files$ (x86)\Microsoft$ Visual$ Studio\2019\Community\Common7\IDE\CommonExtensions\Microsoft\CMake\CMake\share\cmake-3.18\Modules\CMakeGenericSystem.cmake C$:\Program$ Files$ (x86)\Microsoft$ Visual$ Studio\2019\Community\Common7\IDE\CommonExtensions\Microsoft\CMake\CMake\share\cmake-3.18\Modules\CMakeInitializeConfigs.cmake C$:\Program$ Files$ (x86)\Microsoft$ Visual$ Studio\2019\Community\Common7\IDE\CommonExtensions\Microsoft\CMake\CMake\share\cmake-3.18\Modules\CMakeLanguageInformation.cmake C$:\Program$ Files$ (x86)\Microsoft$ Visual$ Studio\2019\Community\Common7\IDE\CommonExtensions\Microsoft\CMake\CMake\share\cmake-3.18\Modules\CMakeRCInformation.cmake C$:\Program$ Files$ (x86)\Microsoft$ Visual$ Studio\2019\Community\Common7\IDE\CommonExtensions\Microsoft\CMake\CMake\share\cmake-3.18\Modules\CMakeSystemSpecificInformation.cmake C$:\Program$ Files$ (x86)\Microsoft$ Visual$ Studio\2019\Community\Common7\IDE\CommonExtensions\Microsoft\CMake\CMake\share\cmake-3.18\Modules\CMakeSystemSpecificInitialize.cmake C$:\Program$ Files$ (x86)\Microsoft$ Visual$ Studio\2019\Community\Common7\IDE\CommonExtensions\Microsoft\CMake\CMake\share\cmake-3.18\Modules\Compiler\CMakeCommonCompilerMacros.cmake C$:\Program$ Files$ (x86)\Microsoft$ Visual$ Studio\2019\Community\Common7\IDE\CommonExtensions\Microsoft\CMake\CMake\share\cmake-3.18\Modules\Compiler\MSVC-C.cmake C$:\Program$ Files$ (x86)\Microsoft$ Visual$ Studio\2019\Community\Common7\IDE\CommonExtensions\Microsoft\CMake\CMake\share\cmake-3.18\Modules\Compiler\MSVC-CXX.cmake C$:\Program$ Files$ (x86)\Microsoft$ Visual$ Studio\2019\Community\Common7\IDE\CommonExtensions\Microsoft\CMake\CMake\share\cmake-3.18\Modules\Platform\Windows-MSVC-C.cmake C$:\Program$ Files$ (x86)\Microsoft$ Visual$ Studio\2019\Community\Common7\IDE\CommonExtensions\Microsoft\CMake\CMake\share\cmake-3.18\Modules\Platform\Windows-MSVC-CXX.cmake C$:\Program$ Files$ (x86)\Microsoft$ Visual$ Studio\2019\Community\Common7\IDE\CommonExtensions\Microsoft\CMake\CMake\share\cmake-3.18\Modules\Platform\Windows-MSVC.cmake C$:\Program$ Files$ (x86)\Microsoft$ Visual$ Studio\2019\Community\Common7\IDE\CommonExtensions\Microsoft\CMake\CMake\share\cmake-3.18\Modules\Platform\Windows.cmake C$:\Program$ Files$ (x86)\Microsoft$ Visual$ Studio\2019\Community\Common7\IDE\CommonExtensions\Microsoft\CMake\CMake\share\cmake-3.18\Modules\Platform\WindowsPaths.cmake CMakeCache.txt CMakeFiles\3.18.20081302-MSVC_2\CMakeCCompiler.cmake CMakeFiles\3.18.20081302-MSVC_2\CMakeCXXCompiler.cmake CMakeFiles\3.18.20081302-MSVC_2\CMakeRCCompiler.cmake CMakeFiles\3.18.20081302-MSVC_2\CMakeSystem.cmake + pool = console + + +############################################# +# A missing CMake input file is not an error. + +build ..\..\..\CMakeLists.txt C$:\Program$ Files$ (x86)\Microsoft$ Visual$ Studio\2019\Community\Common7\IDE\CommonExtensions\Microsoft\CMake\CMake\share\cmake-3.18\Modules\CMakeCInformation.cmake C$:\Program$ Files$ (x86)\Microsoft$ Visual$ Studio\2019\Community\Common7\IDE\CommonExtensions\Microsoft\CMake\CMake\share\cmake-3.18\Modules\CMakeCXXInformation.cmake C$:\Program$ Files$ (x86)\Microsoft$ Visual$ Studio\2019\Community\Common7\IDE\CommonExtensions\Microsoft\CMake\CMake\share\cmake-3.18\Modules\CMakeCommonLanguageInclude.cmake C$:\Program$ Files$ (x86)\Microsoft$ Visual$ Studio\2019\Community\Common7\IDE\CommonExtensions\Microsoft\CMake\CMake\share\cmake-3.18\Modules\CMakeGenericSystem.cmake C$:\Program$ Files$ (x86)\Microsoft$ Visual$ Studio\2019\Community\Common7\IDE\CommonExtensions\Microsoft\CMake\CMake\share\cmake-3.18\Modules\CMakeInitializeConfigs.cmake C$:\Program$ Files$ (x86)\Microsoft$ Visual$ Studio\2019\Community\Common7\IDE\CommonExtensions\Microsoft\CMake\CMake\share\cmake-3.18\Modules\CMakeLanguageInformation.cmake C$:\Program$ Files$ (x86)\Microsoft$ Visual$ Studio\2019\Community\Common7\IDE\CommonExtensions\Microsoft\CMake\CMake\share\cmake-3.18\Modules\CMakeRCInformation.cmake C$:\Program$ Files$ (x86)\Microsoft$ Visual$ Studio\2019\Community\Common7\IDE\CommonExtensions\Microsoft\CMake\CMake\share\cmake-3.18\Modules\CMakeSystemSpecificInformation.cmake C$:\Program$ Files$ (x86)\Microsoft$ Visual$ Studio\2019\Community\Common7\IDE\CommonExtensions\Microsoft\CMake\CMake\share\cmake-3.18\Modules\CMakeSystemSpecificInitialize.cmake C$:\Program$ Files$ (x86)\Microsoft$ Visual$ Studio\2019\Community\Common7\IDE\CommonExtensions\Microsoft\CMake\CMake\share\cmake-3.18\Modules\Compiler\CMakeCommonCompilerMacros.cmake C$:\Program$ Files$ (x86)\Microsoft$ Visual$ Studio\2019\Community\Common7\IDE\CommonExtensions\Microsoft\CMake\CMake\share\cmake-3.18\Modules\Compiler\MSVC-C.cmake C$:\Program$ Files$ (x86)\Microsoft$ Visual$ Studio\2019\Community\Common7\IDE\CommonExtensions\Microsoft\CMake\CMake\share\cmake-3.18\Modules\Compiler\MSVC-CXX.cmake C$:\Program$ Files$ (x86)\Microsoft$ Visual$ Studio\2019\Community\Common7\IDE\CommonExtensions\Microsoft\CMake\CMake\share\cmake-3.18\Modules\Platform\Windows-MSVC-C.cmake C$:\Program$ Files$ (x86)\Microsoft$ Visual$ Studio\2019\Community\Common7\IDE\CommonExtensions\Microsoft\CMake\CMake\share\cmake-3.18\Modules\Platform\Windows-MSVC-CXX.cmake C$:\Program$ Files$ (x86)\Microsoft$ Visual$ Studio\2019\Community\Common7\IDE\CommonExtensions\Microsoft\CMake\CMake\share\cmake-3.18\Modules\Platform\Windows-MSVC.cmake C$:\Program$ Files$ (x86)\Microsoft$ Visual$ Studio\2019\Community\Common7\IDE\CommonExtensions\Microsoft\CMake\CMake\share\cmake-3.18\Modules\Platform\Windows.cmake C$:\Program$ Files$ (x86)\Microsoft$ Visual$ Studio\2019\Community\Common7\IDE\CommonExtensions\Microsoft\CMake\CMake\share\cmake-3.18\Modules\Platform\WindowsPaths.cmake CMakeCache.txt CMakeFiles\3.18.20081302-MSVC_2\CMakeCCompiler.cmake CMakeFiles\3.18.20081302-MSVC_2\CMakeCXXCompiler.cmake CMakeFiles\3.18.20081302-MSVC_2\CMakeRCCompiler.cmake CMakeFiles\3.18.20081302-MSVC_2\CMakeSystem.cmake: phony + + +############################################# +# Clean all the built files. + +build clean: CLEAN + + +############################################# +# Print all primary targets available. + +build help: HELP + + +############################################# +# Make the all target the default. + +default all diff --git a/guidoar-dev/changelog.txt b/guidoar-dev/changelog.txt new file mode 100644 index 000000000..7a2fd1344 --- /dev/null +++ b/guidoar-dev/changelog.txt @@ -0,0 +1,15 @@ +---------------------------------------------------------------- + GUIDO AR Library history + (c) Grame 2009-2016 + fober@grame.fr +---------------------------------------------------------------- + +---------------------------------------------------------------- +2015-12-23 version 1.00 +- memory leak corrected + +---------------------------------------------------------------- +2012-01-30 version 0.90 +- first public release + +---------------------------------------------------------------- diff --git a/guidoar-dev/doc/.gitignore b/guidoar-dev/doc/.gitignore new file mode 100644 index 000000000..625cfbf09 --- /dev/null +++ b/guidoar-dev/doc/.gitignore @@ -0,0 +1,7 @@ +*.aux +*.out +*.log +*.bbl +*.blg +html +latex diff --git a/guidoar-dev/doc/Doxyfile b/guidoar-dev/doc/Doxyfile new file mode 100644 index 000000000..f73947b9b --- /dev/null +++ b/guidoar-dev/doc/Doxyfile @@ -0,0 +1,1510 @@ +# Doxyfile 1.5.8 + +# This file describes the settings to be used by the documentation system +# doxygen (www.doxygen.org) for a project +# +# All text after a hash (#) is considered a comment and will be ignored +# The format is: +# TAG = value [value, ...] +# For lists items can also be appended using: +# TAG += value [value, ...] +# Values that contain spaces should be placed between quotes (" ") + +#--------------------------------------------------------------------------- +# Project related configuration options +#--------------------------------------------------------------------------- + +# This tag specifies the encoding used for all characters in the config file +# that follow. The default is UTF-8 which is also the encoding used for all +# text before the first occurrence of this tag. Doxygen uses libiconv (or the +# iconv built into libc) for the transcoding. See +# http://www.gnu.org/software/libiconv for the list of possible encodings. + +DOXYFILE_ENCODING = UTF-8 + +# The PROJECT_NAME tag is a single word (or a sequence of words surrounded +# by quotes) that should identify the project. + +PROJECT_NAME = GUIDO AR Library + +# The PROJECT_NUMBER tag can be used to enter a project or revision number. +# This could be handy for archiving the generated documentation or +# if some version control system is used. + +PROJECT_NUMBER = 0.90 + +# The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute) +# base path where the generated documentation will be put. +# If a relative path is entered, it will be relative to the location +# where doxygen was started. If left blank the current directory will be used. + +OUTPUT_DIRECTORY = + +# If the CREATE_SUBDIRS tag is set to YES, then doxygen will create +# 4096 sub-directories (in 2 levels) under the output directory of each output +# format and will distribute the generated files over these directories. +# Enabling this option can be useful when feeding doxygen a huge amount of +# source files, where putting all generated files in the same directory would +# otherwise cause performance problems for the file system. + +CREATE_SUBDIRS = NO + +# The OUTPUT_LANGUAGE tag is used to specify the language in which all +# documentation generated by doxygen is written. Doxygen will use this +# information to generate all constant output in the proper language. +# The default language is English, other supported languages are: +# Afrikaans, Arabic, Brazilian, Catalan, Chinese, Chinese-Traditional, +# Croatian, Czech, Danish, Dutch, Farsi, Finnish, French, German, Greek, +# Hungarian, Italian, Japanese, Japanese-en (Japanese with English messages), +# Korean, Korean-en, Lithuanian, Norwegian, Macedonian, Persian, Polish, +# Portuguese, Romanian, Russian, Serbian, Serbian-Cyrilic, Slovak, Slovene, +# Spanish, Swedish, and Ukrainian. + +OUTPUT_LANGUAGE = English + +# If the BRIEF_MEMBER_DESC tag is set to YES (the default) Doxygen will +# include brief member descriptions after the members that are listed in +# the file and class documentation (similar to JavaDoc). +# Set to NO to disable this. + +BRIEF_MEMBER_DESC = YES + +# If the REPEAT_BRIEF tag is set to YES (the default) Doxygen will prepend +# the brief description of a member or function before the detailed description. +# Note: if both HIDE_UNDOC_MEMBERS and BRIEF_MEMBER_DESC are set to NO, the +# brief descriptions will be completely suppressed. + +REPEAT_BRIEF = YES + +# This tag implements a quasi-intelligent brief description abbreviator +# that is used to form the text in various listings. Each string +# in this list, if found as the leading text of the brief description, will be +# stripped from the text and the result after processing the whole list, is +# used as the annotated text. Otherwise, the brief description is used as-is. +# If left blank, the following values are used ("$name" is automatically +# replaced with the name of the entity): "The $name class" "The $name widget" +# "The $name file" "is" "provides" "specifies" "contains" +# "represents" "a" "an" "the" + +ABBREVIATE_BRIEF = + +# If the ALWAYS_DETAILED_SEC and REPEAT_BRIEF tags are both set to YES then +# Doxygen will generate a detailed section even if there is only a brief +# description. + +ALWAYS_DETAILED_SEC = NO + +# If the INLINE_INHERITED_MEMB tag is set to YES, doxygen will show all +# inherited members of a class in the documentation of that class as if those +# members were ordinary class members. Constructors, destructors and assignment +# operators of the base classes will not be shown. + +INLINE_INHERITED_MEMB = NO + +# If the FULL_PATH_NAMES tag is set to YES then Doxygen will prepend the full +# path before files name in the file list and in the header files. If set +# to NO the shortest path that makes the file name unique will be used. + +FULL_PATH_NAMES = NO + +# If the FULL_PATH_NAMES tag is set to YES then the STRIP_FROM_PATH tag +# can be used to strip a user-defined part of the path. Stripping is +# only done if one of the specified strings matches the left-hand part of +# the path. The tag can be used to show relative paths in the file list. +# If left blank the directory from which doxygen is run is used as the +# path to strip. + +STRIP_FROM_PATH = + +# The STRIP_FROM_INC_PATH tag can be used to strip a user-defined part of +# the path mentioned in the documentation of a class, which tells +# the reader which header file to include in order to use a class. +# If left blank only the name of the header file containing the class +# definition is used. Otherwise one should specify the include paths that +# are normally passed to the compiler using the -I flag. + +STRIP_FROM_INC_PATH = + +# If the SHORT_NAMES tag is set to YES, doxygen will generate much shorter +# (but less readable) file names. This can be useful is your file systems +# doesn't support long names like on DOS, Mac, or CD-ROM. + +SHORT_NAMES = NO + +# If the JAVADOC_AUTOBRIEF tag is set to YES then Doxygen +# will interpret the first line (until the first dot) of a JavaDoc-style +# comment as the brief description. If set to NO, the JavaDoc +# comments will behave just like regular Qt-style comments +# (thus requiring an explicit @brief command for a brief description.) + +JAVADOC_AUTOBRIEF = NO + +# If the QT_AUTOBRIEF tag is set to YES then Doxygen will +# interpret the first line (until the first dot) of a Qt-style +# comment as the brief description. If set to NO, the comments +# will behave just like regular Qt-style comments (thus requiring +# an explicit \brief command for a brief description.) + +QT_AUTOBRIEF = NO + +# The MULTILINE_CPP_IS_BRIEF tag can be set to YES to make Doxygen +# treat a multi-line C++ special comment block (i.e. a block of //! or /// +# comments) as a brief description. This used to be the default behaviour. +# The new default is to treat a multi-line C++ comment block as a detailed +# description. Set this tag to YES if you prefer the old behaviour instead. + +MULTILINE_CPP_IS_BRIEF = NO + +# If the INHERIT_DOCS tag is set to YES (the default) then an undocumented +# member inherits the documentation from any documented member that it +# re-implements. + +INHERIT_DOCS = YES + +# If the SEPARATE_MEMBER_PAGES tag is set to YES, then doxygen will produce +# a new page for each member. If set to NO, the documentation of a member will +# be part of the file/class/namespace that contains it. + +SEPARATE_MEMBER_PAGES = NO + +# The TAB_SIZE tag can be used to set the number of spaces in a tab. +# Doxygen uses this value to replace tabs by spaces in code fragments. + +TAB_SIZE = 4 + +# This tag can be used to specify a number of aliases that acts +# as commands in the documentation. An alias has the form "name=value". +# For example adding "sideeffect=\par Side Effects:\n" will allow you to +# put the command \sideeffect (or @sideeffect) in the documentation, which +# will result in a user-defined paragraph with heading "Side Effects:". +# You can put \n's in the value part of an alias to insert newlines. + +ALIASES = + +# Set the OPTIMIZE_OUTPUT_FOR_C tag to YES if your project consists of C +# sources only. Doxygen will then generate output that is more tailored for C. +# For instance, some of the names that are used will be different. The list +# of all members will be omitted, etc. + +OPTIMIZE_OUTPUT_FOR_C = NO + +# Set the OPTIMIZE_OUTPUT_JAVA tag to YES if your project consists of Java +# sources only. Doxygen will then generate output that is more tailored for +# Java. For instance, namespaces will be presented as packages, qualified +# scopes will look different, etc. + +OPTIMIZE_OUTPUT_JAVA = NO + +# Set the OPTIMIZE_FOR_FORTRAN tag to YES if your project consists of Fortran +# sources only. Doxygen will then generate output that is more tailored for +# Fortran. + +OPTIMIZE_FOR_FORTRAN = NO + +# Set the OPTIMIZE_OUTPUT_VHDL tag to YES if your project consists of VHDL +# sources. Doxygen will then generate output that is tailored for +# VHDL. + +OPTIMIZE_OUTPUT_VHDL = NO + +# Doxygen selects the parser to use depending on the extension of the files it parses. +# With this tag you can assign which parser to use for a given extension. +# Doxygen has a built-in mapping, but you can override or extend it using this tag. +# The format is ext=language, where ext is a file extension, and language is one of +# the parsers supported by doxygen: IDL, Java, Javascript, C#, C, C++, D, PHP, +# Objective-C, Python, Fortran, VHDL, C, C++. For instance to make doxygen treat +# .inc files as Fortran files (default is PHP), and .f files as C (default is Fortran), +# use: inc=Fortran f=C + +EXTENSION_MAPPING = + +# If you use STL classes (i.e. std::string, std::vector, etc.) but do not want +# to include (a tag file for) the STL sources as input, then you should +# set this tag to YES in order to let doxygen match functions declarations and +# definitions whose arguments contain STL classes (e.g. func(std::string); v.s. +# func(std::string) {}). This also make the inheritance and collaboration +# diagrams that involve STL classes more complete and accurate. + +BUILTIN_STL_SUPPORT = NO + +# If you use Microsoft's C++/CLI language, you should set this option to YES to +# enable parsing support. + +CPP_CLI_SUPPORT = NO + +# Set the SIP_SUPPORT tag to YES if your project consists of sip sources only. +# Doxygen will parse them like normal C++ but will assume all classes use public +# instead of private inheritance when no explicit protection keyword is present. + +SIP_SUPPORT = NO + +# For Microsoft's IDL there are propget and propput attributes to indicate getter +# and setter methods for a property. Setting this option to YES (the default) +# will make doxygen to replace the get and set methods by a property in the +# documentation. This will only work if the methods are indeed getting or +# setting a simple type. If this is not the case, or you want to show the +# methods anyway, you should set this option to NO. + +IDL_PROPERTY_SUPPORT = YES + +# If member grouping is used in the documentation and the DISTRIBUTE_GROUP_DOC +# tag is set to YES, then doxygen will reuse the documentation of the first +# member in the group (if any) for the other members of the group. By default +# all members of a group must be documented explicitly. + +DISTRIBUTE_GROUP_DOC = NO + +# Set the SUBGROUPING tag to YES (the default) to allow class member groups of +# the same type (for instance a group of public functions) to be put as a +# subgroup of that type (e.g. under the Public Functions section). Set it to +# NO to prevent subgrouping. Alternatively, this can be done per class using +# the \nosubgrouping command. + +SUBGROUPING = YES + +# When TYPEDEF_HIDES_STRUCT is enabled, a typedef of a struct, union, or enum +# is documented as struct, union, or enum with the name of the typedef. So +# typedef struct TypeS {} TypeT, will appear in the documentation as a struct +# with name TypeT. When disabled the typedef will appear as a member of a file, +# namespace, or class. And the struct will be named TypeS. This can typically +# be useful for C code in case the coding convention dictates that all compound +# types are typedef'ed and only the typedef is referenced, never the tag name. + +TYPEDEF_HIDES_STRUCT = NO + +# The SYMBOL_CACHE_SIZE determines the size of the internal cache use to +# determine which symbols to keep in memory and which to flush to disk. +# When the cache is full, less often used symbols will be written to disk. +# For small to medium size projects (<1000 input files) the default value is +# probably good enough. For larger projects a too small cache size can cause +# doxygen to be busy swapping symbols to and from disk most of the time +# causing a significant performance penality. +# If the system has enough physical memory increasing the cache will improve the +# performance by keeping more symbols in memory. Note that the value works on +# a logarithmic scale so increasing the size by one will rougly double the +# memory usage. The cache size is given by this formula: +# 2^(16+SYMBOL_CACHE_SIZE). The valid range is 0..9, the default is 0, +# corresponding to a cache size of 2^16 = 65536 symbols + +SYMBOL_CACHE_SIZE = 0 + +#--------------------------------------------------------------------------- +# Build related configuration options +#--------------------------------------------------------------------------- + +# If the EXTRACT_ALL tag is set to YES doxygen will assume all entities in +# documentation are documented, even if no documentation was available. +# Private class members and static file members will be hidden unless +# the EXTRACT_PRIVATE and EXTRACT_STATIC tags are set to YES + +EXTRACT_ALL = YES + +# If the EXTRACT_PRIVATE tag is set to YES all private members of a class +# will be included in the documentation. + +EXTRACT_PRIVATE = NO + +# If the EXTRACT_STATIC tag is set to YES all static members of a file +# will be included in the documentation. + +EXTRACT_STATIC = YES + +# If the EXTRACT_LOCAL_CLASSES tag is set to YES classes (and structs) +# defined locally in source files will be included in the documentation. +# If set to NO only classes defined in header files are included. + +EXTRACT_LOCAL_CLASSES = YES + +# This flag is only useful for Objective-C code. When set to YES local +# methods, which are defined in the implementation section but not in +# the interface are included in the documentation. +# If set to NO (the default) only methods in the interface are included. + +EXTRACT_LOCAL_METHODS = NO + +# If this flag is set to YES, the members of anonymous namespaces will be +# extracted and appear in the documentation as a namespace called +# 'anonymous_namespace{file}', where file will be replaced with the base +# name of the file that contains the anonymous namespace. By default +# anonymous namespace are hidden. + +EXTRACT_ANON_NSPACES = NO + +# If the HIDE_UNDOC_MEMBERS tag is set to YES, Doxygen will hide all +# undocumented members of documented classes, files or namespaces. +# If set to NO (the default) these members will be included in the +# various overviews, but no documentation section is generated. +# This option has no effect if EXTRACT_ALL is enabled. + +HIDE_UNDOC_MEMBERS = NO + +# If the HIDE_UNDOC_CLASSES tag is set to YES, Doxygen will hide all +# undocumented classes that are normally visible in the class hierarchy. +# If set to NO (the default) these classes will be included in the various +# overviews. This option has no effect if EXTRACT_ALL is enabled. + +HIDE_UNDOC_CLASSES = YES + +# If the HIDE_FRIEND_COMPOUNDS tag is set to YES, Doxygen will hide all +# friend (class|struct|union) declarations. +# If set to NO (the default) these declarations will be included in the +# documentation. + +HIDE_FRIEND_COMPOUNDS = NO + +# If the HIDE_IN_BODY_DOCS tag is set to YES, Doxygen will hide any +# documentation blocks found inside the body of a function. +# If set to NO (the default) these blocks will be appended to the +# function's detailed documentation block. + +HIDE_IN_BODY_DOCS = NO + +# The INTERNAL_DOCS tag determines if documentation +# that is typed after a \internal command is included. If the tag is set +# to NO (the default) then the documentation will be excluded. +# Set it to YES to include the internal documentation. + +INTERNAL_DOCS = NO + +# If the CASE_SENSE_NAMES tag is set to NO then Doxygen will only generate +# file names in lower-case letters. If set to YES upper-case letters are also +# allowed. This is useful if you have classes or files whose names only differ +# in case and if your file system supports case sensitive file names. Windows +# and Mac users are advised to set this option to NO. + +CASE_SENSE_NAMES = YES + +# If the HIDE_SCOPE_NAMES tag is set to NO (the default) then Doxygen +# will show members with their full class and namespace scopes in the +# documentation. If set to YES the scope will be hidden. + +HIDE_SCOPE_NAMES = YES + +# If the SHOW_INCLUDE_FILES tag is set to YES (the default) then Doxygen +# will put a list of the files that are included by a file in the documentation +# of that file. + +SHOW_INCLUDE_FILES = NO + +# If the INLINE_INFO tag is set to YES (the default) then a tag [inline] +# is inserted in the documentation for inline members. + +INLINE_INFO = YES + +# If the SORT_MEMBER_DOCS tag is set to YES (the default) then doxygen +# will sort the (detailed) documentation of file and class members +# alphabetically by member name. If set to NO the members will appear in +# declaration order. + +SORT_MEMBER_DOCS = NO + +# If the SORT_BRIEF_DOCS tag is set to YES then doxygen will sort the +# brief documentation of file, namespace and class members alphabetically +# by member name. If set to NO (the default) the members will appear in +# declaration order. + +SORT_BRIEF_DOCS = NO + +# If the SORT_GROUP_NAMES tag is set to YES then doxygen will sort the +# hierarchy of group names into alphabetical order. If set to NO (the default) +# the group names will appear in their defined order. + +SORT_GROUP_NAMES = NO + +# If the SORT_BY_SCOPE_NAME tag is set to YES, the class list will be +# sorted by fully-qualified names, including namespaces. If set to +# NO (the default), the class list will be sorted only by class name, +# not including the namespace part. +# Note: This option is not very useful if HIDE_SCOPE_NAMES is set to YES. +# Note: This option applies only to the class list, not to the +# alphabetical list. + +SORT_BY_SCOPE_NAME = NO + +# The GENERATE_TODOLIST tag can be used to enable (YES) or +# disable (NO) the todo list. This list is created by putting \todo +# commands in the documentation. + +GENERATE_TODOLIST = YES + +# The GENERATE_TESTLIST tag can be used to enable (YES) or +# disable (NO) the test list. This list is created by putting \test +# commands in the documentation. + +GENERATE_TESTLIST = YES + +# The GENERATE_BUGLIST tag can be used to enable (YES) or +# disable (NO) the bug list. This list is created by putting \bug +# commands in the documentation. + +GENERATE_BUGLIST = YES + +# The GENERATE_DEPRECATEDLIST tag can be used to enable (YES) or +# disable (NO) the deprecated list. This list is created by putting +# \deprecated commands in the documentation. + +GENERATE_DEPRECATEDLIST= YES + +# The ENABLED_SECTIONS tag can be used to enable conditional +# documentation sections, marked by \if sectionname ... \endif. + +ENABLED_SECTIONS = + +# The MAX_INITIALIZER_LINES tag determines the maximum number of lines +# the initial value of a variable or define consists of for it to appear in +# the documentation. If the initializer consists of more lines than specified +# here it will be hidden. Use a value of 0 to hide initializers completely. +# The appearance of the initializer of individual variables and defines in the +# documentation can be controlled using \showinitializer or \hideinitializer +# command in the documentation regardless of this setting. + +MAX_INITIALIZER_LINES = 30 + +# Set the SHOW_USED_FILES tag to NO to disable the list of files generated +# at the bottom of the documentation of classes and structs. If set to YES the +# list will mention the files that were used to generate the documentation. + +SHOW_USED_FILES = NO + +# If the sources in your project are distributed over multiple directories +# then setting the SHOW_DIRECTORIES tag to YES will show the directory hierarchy +# in the documentation. The default is NO. + +SHOW_DIRECTORIES = NO + +# Set the SHOW_FILES tag to NO to disable the generation of the Files page. +# This will remove the Files entry from the Quick Index and from the +# Folder Tree View (if specified). The default is YES. + +SHOW_FILES = YES + +# Set the SHOW_NAMESPACES tag to NO to disable the generation of the +# Namespaces page. +# This will remove the Namespaces entry from the Quick Index +# and from the Folder Tree View (if specified). The default is YES. + +SHOW_NAMESPACES = YES + +# The FILE_VERSION_FILTER tag can be used to specify a program or script that +# doxygen should invoke to get the current version for each file (typically from +# the version control system). Doxygen will invoke the program by executing (via +# popen()) the command , where is the value of +# the FILE_VERSION_FILTER tag, and is the name of an input file +# provided by doxygen. Whatever the program writes to standard output +# is used as the file version. See the manual for examples. + +FILE_VERSION_FILTER = + +# The LAYOUT_FILE tag can be used to specify a layout file which will be parsed by +# doxygen. The layout file controls the global structure of the generated output files +# in an output format independent way. The create the layout file that represents +# doxygen's defaults, run doxygen with the -l option. You can optionally specify a +# file name after the option, if omitted DoxygenLayout.xml will be used as the name +# of the layout file. + +LAYOUT_FILE = + +#--------------------------------------------------------------------------- +# configuration options related to warning and progress messages +#--------------------------------------------------------------------------- + +# The QUIET tag can be used to turn on/off the messages that are generated +# by doxygen. Possible values are YES and NO. If left blank NO is used. + +QUIET = YES + +# The WARNINGS tag can be used to turn on/off the warning messages that are +# generated by doxygen. Possible values are YES and NO. If left blank +# NO is used. + +WARNINGS = YES + +# If WARN_IF_UNDOCUMENTED is set to YES, then doxygen will generate warnings +# for undocumented members. If EXTRACT_ALL is set to YES then this flag will +# automatically be disabled. + +WARN_IF_UNDOCUMENTED = NO + +# If WARN_IF_DOC_ERROR is set to YES, doxygen will generate warnings for +# potential errors in the documentation, such as not documenting some +# parameters in a documented function, or documenting parameters that +# don't exist or using markup commands wrongly. + +WARN_IF_DOC_ERROR = YES + +# This WARN_NO_PARAMDOC option can be abled to get warnings for +# functions that are documented, but have no documentation for their parameters +# or return value. If set to NO (the default) doxygen will only warn about +# wrong or incomplete parameter documentation, but not about the absence of +# documentation. + +WARN_NO_PARAMDOC = NO + +# The WARN_FORMAT tag determines the format of the warning messages that +# doxygen can produce. The string should contain the $file, $line, and $text +# tags, which will be replaced by the file and line number from which the +# warning originated and the warning text. Optionally the format may contain +# $version, which will be replaced by the version of the file (if it could +# be obtained via FILE_VERSION_FILTER) + +WARN_FORMAT = + +# The WARN_LOGFILE tag can be used to specify a file to which warning +# and error messages should be written. If left blank the output is written +# to stderr. + +WARN_LOGFILE = + +#--------------------------------------------------------------------------- +# configuration options related to the input files +#--------------------------------------------------------------------------- + +# The INPUT tag can be used to specify the files and/or directories that contain +# documented source files. You may enter file names like "myfile.cpp" or +# directories like "/usr/src/myproject". Separate the files or directories +# with spaces. + +INPUT = ../src/interface + +# This tag can be used to specify the character encoding of the source files +# that doxygen parses. Internally doxygen uses the UTF-8 encoding, which is +# also the default input encoding. Doxygen uses libiconv (or the iconv built +# into libc) for the transcoding. See http://www.gnu.org/software/libiconv for +# the list of possible encodings. + +INPUT_ENCODING = UTF-8 + +# If the value of the INPUT tag contains directories, you can use the +# FILE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp +# and *.h) to filter out the source-files in the directories. If left +# blank the following patterns are tested: +# *.c *.cc *.cxx *.cpp *.c++ *.java *.ii *.ixx *.ipp *.i++ *.inl *.h *.hh *.hxx +# *.hpp *.h++ *.idl *.odl *.cs *.php *.php3 *.inc *.m *.mm *.py *.f90 + +FILE_PATTERNS = libguidoar.h + +# The RECURSIVE tag can be used to turn specify whether or not subdirectories +# should be searched for input files as well. Possible values are YES and NO. +# If left blank NO is used. + +RECURSIVE = NO + +# The EXCLUDE tag can be used to specify files and/or directories that should +# excluded from the INPUT source files. This way you can easily exclude a +# subdirectory from a directory tree whose root is specified with the INPUT tag. + +EXCLUDE = + +# The EXCLUDE_SYMLINKS tag can be used select whether or not files or +# directories that are symbolic links (a Unix filesystem feature) are excluded +# from the input. + +EXCLUDE_SYMLINKS = NO + +# If the value of the INPUT tag contains directories, you can use the +# EXCLUDE_PATTERNS tag to specify one or more wildcard patterns to exclude +# certain files from those directories. Note that the wildcards are matched +# against the file with absolute path, so to exclude all test directories +# for example use the pattern */test/* + +EXCLUDE_PATTERNS = + +# The EXCLUDE_SYMBOLS tag can be used to specify one or more symbol names +# (namespaces, classes, functions, etc.) that should be excluded from the +# output. The symbol name can be a fully qualified name, a word, or if the +# wildcard * is used, a substring. Examples: ANamespace, AClass, +# AClass::ANamespace, ANamespace::*Test + +EXCLUDE_SYMBOLS = + +# The EXAMPLE_PATH tag can be used to specify one or more files or +# directories that contain example code fragments that are included (see +# the \include command). + +EXAMPLE_PATH = + +# If the value of the EXAMPLE_PATH tag contains directories, you can use the +# EXAMPLE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp +# and *.h) to filter out the source-files in the directories. If left +# blank all files are included. + +EXAMPLE_PATTERNS = + +# If the EXAMPLE_RECURSIVE tag is set to YES then subdirectories will be +# searched for input files to be used with the \include or \dontinclude +# commands irrespective of the value of the RECURSIVE tag. +# Possible values are YES and NO. If left blank NO is used. + +EXAMPLE_RECURSIVE = NO + +# The IMAGE_PATH tag can be used to specify one or more files or +# directories that contain image that are included in the documentation (see +# the \image command). + +IMAGE_PATH = + +# The INPUT_FILTER tag can be used to specify a program that doxygen should +# invoke to filter for each input file. Doxygen will invoke the filter program +# by executing (via popen()) the command , where +# is the value of the INPUT_FILTER tag, and is the name of an +# input file. Doxygen will then use the output that the filter program writes +# to standard output. +# If FILTER_PATTERNS is specified, this tag will be +# ignored. + +INPUT_FILTER = + +# The FILTER_PATTERNS tag can be used to specify filters on a per file pattern +# basis. +# Doxygen will compare the file name with each pattern and apply the +# filter if there is a match. +# The filters are a list of the form: +# pattern=filter (like *.cpp=my_cpp_filter). See INPUT_FILTER for further +# info on how filters are used. If FILTER_PATTERNS is empty, INPUT_FILTER +# is applied to all files. + +FILTER_PATTERNS = + +# If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using +# INPUT_FILTER) will be used to filter the input files when producing source +# files to browse (i.e. when SOURCE_BROWSER is set to YES). + +FILTER_SOURCE_FILES = NO + +#--------------------------------------------------------------------------- +# configuration options related to source browsing +#--------------------------------------------------------------------------- + +# If the SOURCE_BROWSER tag is set to YES then a list of source files will +# be generated. Documented entities will be cross-referenced with these sources. +# Note: To get rid of all source code in the generated output, make sure also +# VERBATIM_HEADERS is set to NO. + +SOURCE_BROWSER = NO + +# Setting the INLINE_SOURCES tag to YES will include the body +# of functions and classes directly in the documentation. + +INLINE_SOURCES = NO + +# Setting the STRIP_CODE_COMMENTS tag to YES (the default) will instruct +# doxygen to hide any special comment blocks from generated source code +# fragments. Normal C and C++ comments will always remain visible. + +STRIP_CODE_COMMENTS = YES + +# If the REFERENCED_BY_RELATION tag is set to YES +# then for each documented function all documented +# functions referencing it will be listed. + +REFERENCED_BY_RELATION = YES + +# If the REFERENCES_RELATION tag is set to YES +# then for each documented function all documented entities +# called/used by that function will be listed. + +REFERENCES_RELATION = YES + +# If the REFERENCES_LINK_SOURCE tag is set to YES (the default) +# and SOURCE_BROWSER tag is set to YES, then the hyperlinks from +# functions in REFERENCES_RELATION and REFERENCED_BY_RELATION lists will +# link to the source code. +# Otherwise they will link to the documentation. + +REFERENCES_LINK_SOURCE = YES + +# If the USE_HTAGS tag is set to YES then the references to source code +# will point to the HTML generated by the htags(1) tool instead of doxygen +# built-in source browser. The htags tool is part of GNU's global source +# tagging system (see http://www.gnu.org/software/global/global.html). You +# will need version 4.8.6 or higher. + +USE_HTAGS = NO + +# If the VERBATIM_HEADERS tag is set to YES (the default) then Doxygen +# will generate a verbatim copy of the header file for each class for +# which an include is specified. Set to NO to disable this. + +VERBATIM_HEADERS = YES + +#--------------------------------------------------------------------------- +# configuration options related to the alphabetical class index +#--------------------------------------------------------------------------- + +# If the ALPHABETICAL_INDEX tag is set to YES, an alphabetical index +# of all compounds will be generated. Enable this if the project +# contains a lot of classes, structs, unions or interfaces. + +ALPHABETICAL_INDEX = YES + +# If the alphabetical index is enabled (see ALPHABETICAL_INDEX) then +# the COLS_IN_ALPHA_INDEX tag can be used to specify the number of columns +# in which this list will be split (can be a number in the range [1..20]) + +COLS_IN_ALPHA_INDEX = 5 + +# In case all classes in a project start with a common prefix, all +# classes will be put under the same header in the alphabetical index. +# The IGNORE_PREFIX tag can be used to specify one or more prefixes that +# should be ignored while generating the index headers. + +IGNORE_PREFIX = + +#--------------------------------------------------------------------------- +# configuration options related to the HTML output +#--------------------------------------------------------------------------- + +# If the GENERATE_HTML tag is set to YES (the default) Doxygen will +# generate HTML output. + +GENERATE_HTML = YES + +# The HTML_OUTPUT tag is used to specify where the HTML docs will be put. +# If a relative path is entered the value of OUTPUT_DIRECTORY will be +# put in front of it. If left blank `html' will be used as the default path. + +HTML_OUTPUT = + +# The HTML_FILE_EXTENSION tag can be used to specify the file extension for +# each generated HTML page (for example: .htm,.php,.asp). If it is left blank +# doxygen will generate files with .html extension. + +HTML_FILE_EXTENSION = .html + +# The HTML_HEADER tag can be used to specify a personal HTML header for +# each generated HTML page. If it is left blank doxygen will generate a +# standard header. + +HTML_HEADER = + +# The HTML_FOOTER tag can be used to specify a personal HTML footer for +# each generated HTML page. If it is left blank doxygen will generate a +# standard footer. + +HTML_FOOTER = footer.html + +# The HTML_STYLESHEET tag can be used to specify a user-defined cascading +# style sheet that is used by each HTML page. It can be used to +# fine-tune the look of the HTML output. If the tag is left blank doxygen +# will generate a default style sheet. Note that doxygen will try to copy +# the style sheet file to the HTML output directory, so don't put your own +# stylesheet in the HTML output directory as well, or it will be erased! + +HTML_STYLESHEET = + +# If the HTML_ALIGN_MEMBERS tag is set to YES, the members of classes, +# files or namespaces will be aligned in HTML using tables. If set to +# NO a bullet list will be used. + +HTML_ALIGN_MEMBERS = YES + +# If the HTML_DYNAMIC_SECTIONS tag is set to YES then the generated HTML +# documentation will contain sections that can be hidden and shown after the +# page has loaded. For this to work a browser that supports +# JavaScript and DHTML is required (for instance Mozilla 1.0+, Firefox +# Netscape 6.0+, Internet explorer 5.0+, Konqueror, or Safari). + +HTML_DYNAMIC_SECTIONS = NO + +# If the GENERATE_DOCSET tag is set to YES, additional index files +# will be generated that can be used as input for Apple's Xcode 3 +# integrated development environment, introduced with OSX 10.5 (Leopard). +# To create a documentation set, doxygen will generate a Makefile in the +# HTML output directory. Running make will produce the docset in that +# directory and running "make install" will install the docset in +# ~/Library/Developer/Shared/Documentation/DocSets so that Xcode will find +# it at startup. +# See http://developer.apple.com/tools/creatingdocsetswithdoxygen.html for more information. + +GENERATE_DOCSET = NO + +# When GENERATE_DOCSET tag is set to YES, this tag determines the name of the +# feed. A documentation feed provides an umbrella under which multiple +# documentation sets from a single provider (such as a company or product suite) +# can be grouped. + +DOCSET_FEEDNAME = "Doxygen generated docs" + +# When GENERATE_DOCSET tag is set to YES, this tag specifies a string that +# should uniquely identify the documentation set bundle. This should be a +# reverse domain-name style string, e.g. com.mycompany.MyDocSet. Doxygen +# will append .docset to the name. + +DOCSET_BUNDLE_ID = org.doxygen.Project + +# If the GENERATE_HTMLHELP tag is set to YES, additional index files +# will be generated that can be used as input for tools like the +# Microsoft HTML help workshop to generate a compiled HTML help file (.chm) +# of the generated HTML documentation. + +GENERATE_HTMLHELP = NO + +# If the GENERATE_HTMLHELP tag is set to YES, the CHM_FILE tag can +# be used to specify the file name of the resulting .chm file. You +# can add a path in front of the file if the result should not be +# written to the html output directory. + +CHM_FILE = + +# If the GENERATE_HTMLHELP tag is set to YES, the HHC_LOCATION tag can +# be used to specify the location (absolute path including file name) of +# the HTML help compiler (hhc.exe). If non-empty doxygen will try to run +# the HTML help compiler on the generated index.hhp. + +HHC_LOCATION = + +# If the GENERATE_HTMLHELP tag is set to YES, the GENERATE_CHI flag +# controls if a separate .chi index file is generated (YES) or that +# it should be included in the master .chm file (NO). + +GENERATE_CHI = NO + +# If the GENERATE_HTMLHELP tag is set to YES, the CHM_INDEX_ENCODING +# is used to encode HtmlHelp index (hhk), content (hhc) and project file +# content. + +CHM_INDEX_ENCODING = + +# If the GENERATE_HTMLHELP tag is set to YES, the BINARY_TOC flag +# controls whether a binary table of contents is generated (YES) or a +# normal table of contents (NO) in the .chm file. + +BINARY_TOC = NO + +# The TOC_EXPAND flag can be set to YES to add extra items for group members +# to the contents of the HTML help documentation and to the tree view. + +TOC_EXPAND = NO + +# If the GENERATE_QHP tag is set to YES and both QHP_NAMESPACE and QHP_VIRTUAL_FOLDER +# are set, an additional index file will be generated that can be used as input for +# Qt's qhelpgenerator to generate a Qt Compressed Help (.qch) of the generated +# HTML documentation. + +GENERATE_QHP = NO + +# If the QHG_LOCATION tag is specified, the QCH_FILE tag can +# be used to specify the file name of the resulting .qch file. +# The path specified is relative to the HTML output folder. + +QCH_FILE = + +# The QHP_NAMESPACE tag specifies the namespace to use when generating +# Qt Help Project output. For more information please see +# http://doc.trolltech.com/qthelpproject.html#namespace + +QHP_NAMESPACE = + +# The QHP_VIRTUAL_FOLDER tag specifies the namespace to use when generating +# Qt Help Project output. For more information please see +# http://doc.trolltech.com/qthelpproject.html#virtual-folders + +QHP_VIRTUAL_FOLDER = doc + +# If QHP_CUST_FILTER_NAME is set, it specifies the name of a custom filter to add. +# For more information please see +# http://doc.trolltech.com/qthelpproject.html#custom-filters + +QHP_CUST_FILTER_NAME = + +# The QHP_CUST_FILT_ATTRS tag specifies the list of the attributes of the custom filter to add.For more information please see +# Qt Help Project / Custom Filters. + +QHP_CUST_FILTER_ATTRS = + +# The QHP_SECT_FILTER_ATTRS tag specifies the list of the attributes this project's +# filter section matches. +# Qt Help Project / Filter Attributes. + +QHP_SECT_FILTER_ATTRS = + +# If the GENERATE_QHP tag is set to YES, the QHG_LOCATION tag can +# be used to specify the location of Qt's qhelpgenerator. +# If non-empty doxygen will try to run qhelpgenerator on the generated +# .qhp file. + +QHG_LOCATION = + +# The DISABLE_INDEX tag can be used to turn on/off the condensed index at +# top of each HTML page. The value NO (the default) enables the index and +# the value YES disables it. + +DISABLE_INDEX = NO + +# This tag can be used to set the number of enum values (range [1..20]) +# that doxygen will group on one line in the generated HTML documentation. + +ENUM_VALUES_PER_LINE = 4 + +# The GENERATE_TREEVIEW tag is used to specify whether a tree-like index +# structure should be generated to display hierarchical information. +# If the tag value is set to FRAME, a side panel will be generated +# containing a tree-like index structure (just like the one that +# is generated for HTML Help). For this to work a browser that supports +# JavaScript, DHTML, CSS and frames is required (for instance Mozilla 1.0+, +# Netscape 6.0+, Internet explorer 5.0+, or Konqueror). Windows users are +# probably better off using the HTML help feature. Other possible values +# for this tag are: HIERARCHIES, which will generate the Groups, Directories, +# and Class Hierarchy pages using a tree view instead of an ordered list; +# ALL, which combines the behavior of FRAME and HIERARCHIES; and NONE, which +# disables this behavior completely. For backwards compatibility with previous +# releases of Doxygen, the values YES and NO are equivalent to FRAME and NONE +# respectively. + +GENERATE_TREEVIEW = NO + +# If the treeview is enabled (see GENERATE_TREEVIEW) then this tag can be +# used to set the initial width (in pixels) of the frame in which the tree +# is shown. + +TREEVIEW_WIDTH = 250 + +# Use this tag to change the font size of Latex formulas included +# as images in the HTML documentation. The default is 10. Note that +# when you change the font size after a successful doxygen run you need +# to manually remove any form_*.png images from the HTML output directory +# to force them to be regenerated. + +FORMULA_FONTSIZE = 10 + +#--------------------------------------------------------------------------- +# configuration options related to the LaTeX output +#--------------------------------------------------------------------------- + +# If the GENERATE_LATEX tag is set to YES (the default) Doxygen will +# generate Latex output. + +GENERATE_LATEX = YES + +# The LATEX_OUTPUT tag is used to specify where the LaTeX docs will be put. +# If a relative path is entered the value of OUTPUT_DIRECTORY will be +# put in front of it. If left blank `latex' will be used as the default path. + +LATEX_OUTPUT = + +# The LATEX_CMD_NAME tag can be used to specify the LaTeX command name to be +# invoked. If left blank `latex' will be used as the default command name. + +LATEX_CMD_NAME = latex + +# The MAKEINDEX_CMD_NAME tag can be used to specify the command name to +# generate index for LaTeX. If left blank `makeindex' will be used as the +# default command name. + +MAKEINDEX_CMD_NAME = makeindex + +# If the COMPACT_LATEX tag is set to YES Doxygen generates more compact +# LaTeX documents. This may be useful for small projects and may help to +# save some trees in general. + +COMPACT_LATEX = NO + +# The PAPER_TYPE tag can be used to set the paper type that is used +# by the printer. Possible values are: a4, a4wide, letter, legal and +# executive. If left blank a4wide will be used. + +PAPER_TYPE = a4wide + +# The EXTRA_PACKAGES tag can be to specify one or more names of LaTeX +# packages that should be included in the LaTeX output. + +EXTRA_PACKAGES = + +# The LATEX_HEADER tag can be used to specify a personal LaTeX header for +# the generated latex document. The header should contain everything until +# the first chapter. If it is left blank doxygen will generate a +# standard header. Notice: only use this tag if you know what you are doing! + +LATEX_HEADER = + +# If the PDF_HYPERLINKS tag is set to YES, the LaTeX that is generated +# is prepared for conversion to pdf (using ps2pdf). The pdf file will +# contain links (just like the HTML output) instead of page references +# This makes the output suitable for online browsing using a pdf viewer. + +PDF_HYPERLINKS = NO + +# If the USE_PDFLATEX tag is set to YES, pdflatex will be used instead of +# plain latex in the generated Makefile. Set this option to YES to get a +# higher quality PDF documentation. + +USE_PDFLATEX = YES + +# If the LATEX_BATCHMODE tag is set to YES, doxygen will add the \\batchmode. +# command to the generated LaTeX files. This will instruct LaTeX to keep +# running if errors occur, instead of asking the user for help. +# This option is also used when generating formulas in HTML. + +LATEX_BATCHMODE = NO + +# If LATEX_HIDE_INDICES is set to YES then doxygen will not +# include the index chapters (such as File Index, Compound Index, etc.) +# in the output. + +LATEX_HIDE_INDICES = YES + +#--------------------------------------------------------------------------- +# configuration options related to the RTF output +#--------------------------------------------------------------------------- + +# If the GENERATE_RTF tag is set to YES Doxygen will generate RTF output +# The RTF output is optimized for Word 97 and may not look very pretty with +# other RTF readers or editors. + +GENERATE_RTF = NO + +# The RTF_OUTPUT tag is used to specify where the RTF docs will be put. +# If a relative path is entered the value of OUTPUT_DIRECTORY will be +# put in front of it. If left blank `rtf' will be used as the default path. + +RTF_OUTPUT = + +# If the COMPACT_RTF tag is set to YES Doxygen generates more compact +# RTF documents. This may be useful for small projects and may help to +# save some trees in general. + +COMPACT_RTF = NO + +# If the RTF_HYPERLINKS tag is set to YES, the RTF that is generated +# will contain hyperlink fields. The RTF file will +# contain links (just like the HTML output) instead of page references. +# This makes the output suitable for online browsing using WORD or other +# programs which support those fields. +# Note: wordpad (write) and others do not support links. + +RTF_HYPERLINKS = NO + +# Load stylesheet definitions from file. Syntax is similar to doxygen's +# config file, i.e. a series of assignments. You only have to provide +# replacements, missing definitions are set to their default value. + +RTF_STYLESHEET_FILE = + +# Set optional variables used in the generation of an rtf document. +# Syntax is similar to doxygen's config file. + +RTF_EXTENSIONS_FILE = + +#--------------------------------------------------------------------------- +# configuration options related to the man page output +#--------------------------------------------------------------------------- + +# If the GENERATE_MAN tag is set to YES (the default) Doxygen will +# generate man pages + +GENERATE_MAN = NO + +# The MAN_OUTPUT tag is used to specify where the man pages will be put. +# If a relative path is entered the value of OUTPUT_DIRECTORY will be +# put in front of it. If left blank `man' will be used as the default path. + +MAN_OUTPUT = + +# The MAN_EXTENSION tag determines the extension that is added to +# the generated man pages (default is the subroutine's section .3) + +MAN_EXTENSION = + +# If the MAN_LINKS tag is set to YES and Doxygen generates man output, +# then it will generate one additional man file for each entity +# documented in the real man page(s). These additional files +# only source the real man page, but without them the man command +# would be unable to find the correct page. The default is NO. + +MAN_LINKS = NO + +#--------------------------------------------------------------------------- +# configuration options related to the XML output +#--------------------------------------------------------------------------- + +# If the GENERATE_XML tag is set to YES Doxygen will +# generate an XML file that captures the structure of +# the code including all documentation. + +GENERATE_XML = NO + +# The XML_OUTPUT tag is used to specify where the XML pages will be put. +# If a relative path is entered the value of OUTPUT_DIRECTORY will be +# put in front of it. If left blank `xml' will be used as the default path. + +XML_OUTPUT = xml + +# The XML_SCHEMA tag can be used to specify an XML schema, +# which can be used by a validating XML parser to check the +# syntax of the XML files. + +XML_SCHEMA = + +# The XML_DTD tag can be used to specify an XML DTD, +# which can be used by a validating XML parser to check the +# syntax of the XML files. + +XML_DTD = + +# If the XML_PROGRAMLISTING tag is set to YES Doxygen will +# dump the program listings (including syntax highlighting +# and cross-referencing information) to the XML output. Note that +# enabling this will significantly increase the size of the XML output. + +XML_PROGRAMLISTING = YES + +#--------------------------------------------------------------------------- +# configuration options for the AutoGen Definitions output +#--------------------------------------------------------------------------- + +# If the GENERATE_AUTOGEN_DEF tag is set to YES Doxygen will +# generate an AutoGen Definitions (see autogen.sf.net) file +# that captures the structure of the code including all +# documentation. Note that this feature is still experimental +# and incomplete at the moment. + +GENERATE_AUTOGEN_DEF = NO + +#--------------------------------------------------------------------------- +# configuration options related to the Perl module output +#--------------------------------------------------------------------------- + +# If the GENERATE_PERLMOD tag is set to YES Doxygen will +# generate a Perl module file that captures the structure of +# the code including all documentation. Note that this +# feature is still experimental and incomplete at the +# moment. + +GENERATE_PERLMOD = NO + +# If the PERLMOD_LATEX tag is set to YES Doxygen will generate +# the necessary Makefile rules, Perl scripts and LaTeX code to be able +# to generate PDF and DVI output from the Perl module output. + +PERLMOD_LATEX = NO + +# If the PERLMOD_PRETTY tag is set to YES the Perl module output will be +# nicely formatted so it can be parsed by a human reader. +# This is useful +# if you want to understand what is going on. +# On the other hand, if this +# tag is set to NO the size of the Perl module output will be much smaller +# and Perl will parse it just the same. + +PERLMOD_PRETTY = YES + +# The names of the make variables in the generated doxyrules.make file +# are prefixed with the string contained in PERLMOD_MAKEVAR_PREFIX. +# This is useful so different doxyrules.make files included by the same +# Makefile don't overwrite each other's variables. + +PERLMOD_MAKEVAR_PREFIX = + +#--------------------------------------------------------------------------- +# Configuration options related to the preprocessor +#--------------------------------------------------------------------------- + +# If the ENABLE_PREPROCESSING tag is set to YES (the default) Doxygen will +# evaluate all C-preprocessor directives found in the sources and include +# files. + +ENABLE_PREPROCESSING = YES + +# If the MACRO_EXPANSION tag is set to YES Doxygen will expand all macro +# names in the source code. If set to NO (the default) only conditional +# compilation will be performed. Macro expansion can be done in a controlled +# way by setting EXPAND_ONLY_PREDEF to YES. + +MACRO_EXPANSION = YES + +# If the EXPAND_ONLY_PREDEF and MACRO_EXPANSION tags are both set to YES +# then the macro expansion is limited to the macros specified with the +# PREDEFINED and EXPAND_AS_DEFINED tags. + +EXPAND_ONLY_PREDEF = NO + +# If the SEARCH_INCLUDES tag is set to YES (the default) the includes files +# in the INCLUDE_PATH (see below) will be search if a #include is found. + +SEARCH_INCLUDES = YES + +# The INCLUDE_PATH tag can be used to specify one or more directories that +# contain include files that are not input files but should be processed by +# the preprocessor. + +INCLUDE_PATH = + +# You can use the INCLUDE_FILE_PATTERNS tag to specify one or more wildcard +# patterns (like *.h and *.hpp) to filter out the header-files in the +# directories. If left blank, the patterns specified with FILE_PATTERNS will +# be used. + +INCLUDE_FILE_PATTERNS = + +# The PREDEFINED tag can be used to specify one or more macro names that +# are defined before the preprocessor is started (similar to the -D option of +# gcc). The argument of the tag is a list of macros of the form: name +# or name=definition (no spaces). If the definition and the = are +# omitted =1 is assumed. To prevent a macro definition from being +# undefined via #undef or recursively expanded use the := operator +# instead of the = operator. + +PREDEFINED = + +# If the MACRO_EXPANSION and EXPAND_ONLY_PREDEF tags are set to YES then +# this tag can be used to specify a list of macro names that should be expanded. +# The macro definition that is found in the sources will be used. +# Use the PREDEFINED tag if you want to use a different macro definition. + +EXPAND_AS_DEFINED = + +# If the SKIP_FUNCTION_MACROS tag is set to YES (the default) then +# doxygen's preprocessor will remove all function-like macros that are alone +# on a line, have an all uppercase name, and do not end with a semicolon. Such +# function macros are typically used for boiler-plate code, and will confuse +# the parser if not removed. + +SKIP_FUNCTION_MACROS = YES + +#--------------------------------------------------------------------------- +# Configuration::additions related to external references +#--------------------------------------------------------------------------- + +# The TAGFILES option can be used to specify one or more tagfiles. +# Optionally an initial location of the external documentation +# can be added for each tagfile. The format of a tag file without +# this location is as follows: +# +# TAGFILES = file1 file2 ... +# Adding location for the tag files is done as follows: +# +# TAGFILES = file1=loc1 "file2 = loc2" ... +# where "loc1" and "loc2" can be relative or absolute paths or +# URLs. If a location is present for each tag, the installdox tool +# does not have to be run to correct the links. +# Note that each tag file must have a unique name +# (where the name does NOT include the path) +# If a tag file is not located in the directory in which doxygen +# is run, you must also specify the path to the tagfile here. + +TAGFILES = + +# When a file name is specified after GENERATE_TAGFILE, doxygen will create +# a tag file that is based on the input files it reads. + +GENERATE_TAGFILE = + +# If the ALLEXTERNALS tag is set to YES all external classes will be listed +# in the class index. If set to NO only the inherited external classes +# will be listed. + +ALLEXTERNALS = NO + +# If the EXTERNAL_GROUPS tag is set to YES all external groups will be listed +# in the modules index. If set to NO, only the current project's groups will +# be listed. + +EXTERNAL_GROUPS = YES + +# The PERL_PATH should be the absolute path and name of the perl script +# interpreter (i.e. the result of `which perl'). + +PERL_PATH = + +#--------------------------------------------------------------------------- +# Configuration options related to the dot tool +#--------------------------------------------------------------------------- + +# If the CLASS_DIAGRAMS tag is set to YES (the default) Doxygen will +# generate a inheritance diagram (in HTML, RTF and LaTeX) for classes with base +# or super classes. Setting the tag to NO turns the diagrams off. Note that +# this option is superseded by the HAVE_DOT option below. This is only a +# fallback. It is recommended to install and use dot, since it yields more +# powerful graphs. + +CLASS_DIAGRAMS = YES + +# You can define message sequence charts within doxygen comments using the \msc +# command. Doxygen will then run the mscgen tool (see +# http://www.mcternan.me.uk/mscgen/) to produce the chart and insert it in the +# documentation. The MSCGEN_PATH tag allows you to specify the directory where +# the mscgen tool resides. If left empty the tool is assumed to be found in the +# default search path. + +MSCGEN_PATH = + +# If set to YES, the inheritance and collaboration graphs will hide +# inheritance and usage relations if the target is undocumented +# or is not a class. + +HIDE_UNDOC_RELATIONS = YES + +# If you set the HAVE_DOT tag to YES then doxygen will assume the dot tool is +# available from the path. This tool is part of Graphviz, a graph visualization +# toolkit from AT&T and Lucent Bell Labs. The other options in this section +# have no effect if this option is set to NO (the default) + +HAVE_DOT = NO + +# By default doxygen will write a font called FreeSans.ttf to the output +# directory and reference it in all dot files that doxygen generates. This +# font does not include all possible unicode characters however, so when you need +# these (or just want a differently looking font) you can specify the font name +# using DOT_FONTNAME. You need need to make sure dot is able to find the font, +# which can be done by putting it in a standard location or by setting the +# DOTFONTPATH environment variable or by setting DOT_FONTPATH to the directory +# containing the font. + +DOT_FONTNAME = FreeSans + +# The DOT_FONTSIZE tag can be used to set the size of the font of dot graphs. +# The default size is 10pt. + +DOT_FONTSIZE = 10 + +# By default doxygen will tell dot to use the output directory to look for the +# FreeSans.ttf font (which doxygen will put there itself). If you specify a +# different font using DOT_FONTNAME you can set the path where dot +# can find it using this tag. + +DOT_FONTPATH = + +# If the CLASS_GRAPH and HAVE_DOT tags are set to YES then doxygen +# will generate a graph for each documented class showing the direct and +# indirect inheritance relations. Setting this tag to YES will force the +# the CLASS_DIAGRAMS tag to NO. + +CLASS_GRAPH = YES + +# If the COLLABORATION_GRAPH and HAVE_DOT tags are set to YES then doxygen +# will generate a graph for each documented class showing the direct and +# indirect implementation dependencies (inheritance, containment, and +# class references variables) of the class with other documented classes. + +COLLABORATION_GRAPH = YES + +# If the GROUP_GRAPHS and HAVE_DOT tags are set to YES then doxygen +# will generate a graph for groups, showing the direct groups dependencies + +GROUP_GRAPHS = YES + +# If the UML_LOOK tag is set to YES doxygen will generate inheritance and +# collaboration diagrams in a style similar to the OMG's Unified Modeling +# Language. + +UML_LOOK = NO + +# If set to YES, the inheritance and collaboration graphs will show the +# relations between templates and their instances. + +TEMPLATE_RELATIONS = NO + +# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDE_GRAPH, and HAVE_DOT +# tags are set to YES then doxygen will generate a graph for each documented +# file showing the direct and indirect include dependencies of the file with +# other documented files. + +INCLUDE_GRAPH = YES + +# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDED_BY_GRAPH, and +# HAVE_DOT tags are set to YES then doxygen will generate a graph for each +# documented header file showing the documented files that directly or +# indirectly include this file. + +INCLUDED_BY_GRAPH = YES + +# If the CALL_GRAPH and HAVE_DOT options are set to YES then +# doxygen will generate a call dependency graph for every global function +# or class method. Note that enabling this option will significantly increase +# the time of a run. So in most cases it will be better to enable call graphs +# for selected functions only using the \callgraph command. + +CALL_GRAPH = NO + +# If the CALLER_GRAPH and HAVE_DOT tags are set to YES then +# doxygen will generate a caller dependency graph for every global function +# or class method. Note that enabling this option will significantly increase +# the time of a run. So in most cases it will be better to enable caller +# graphs for selected functions only using the \callergraph command. + +CALLER_GRAPH = NO + +# If the GRAPHICAL_HIERARCHY and HAVE_DOT tags are set to YES then doxygen +# will graphical hierarchy of all classes instead of a textual one. + +GRAPHICAL_HIERARCHY = YES + +# If the DIRECTORY_GRAPH, SHOW_DIRECTORIES and HAVE_DOT tags are set to YES +# then doxygen will show the dependencies a directory has on other directories +# in a graphical way. The dependency relations are determined by the #include +# relations between the files in the directories. + +DIRECTORY_GRAPH = YES + +# The DOT_IMAGE_FORMAT tag can be used to set the image format of the images +# generated by dot. Possible values are png, jpg, or gif +# If left blank png will be used. + +DOT_IMAGE_FORMAT = png + +# The tag DOT_PATH can be used to specify the path where the dot tool can be +# found. If left blank, it is assumed the dot tool can be found in the path. + +DOT_PATH = + +# The DOTFILE_DIRS tag can be used to specify one or more directories that +# contain dot files that are included in the documentation (see the +# \dotfile command). + +DOTFILE_DIRS = + +# The DOT_GRAPH_MAX_NODES tag can be used to set the maximum number of +# nodes that will be shown in the graph. If the number of nodes in a graph +# becomes larger than this value, doxygen will truncate the graph, which is +# visualized by representing a node as a red box. Note that doxygen if the +# number of direct children of the root node in a graph is already larger than +# DOT_GRAPH_MAX_NODES then the graph will not be shown at all. Also note +# that the size of a graph can be further restricted by MAX_DOT_GRAPH_DEPTH. + +DOT_GRAPH_MAX_NODES = 50 + +# The MAX_DOT_GRAPH_DEPTH tag can be used to set the maximum depth of the +# graphs generated by dot. A depth value of 3 means that only nodes reachable +# from the root by following a path via at most 3 edges will be shown. Nodes +# that lay further from the root node will be omitted. Note that setting this +# option to 1 or 2 may greatly reduce the computation time needed for large +# code bases. Also note that the size of a graph can be further restricted by +# DOT_GRAPH_MAX_NODES. Using a depth of 0 means no depth restriction. + +MAX_DOT_GRAPH_DEPTH = 0 + +# Set the DOT_TRANSPARENT tag to YES to generate images with a transparent +# background. This is disabled by default, because dot on Windows does not +# seem to support this out of the box. Warning: Depending on the platform used, +# enabling this option may lead to badly anti-aliased labels on the edges of +# a graph (i.e. they become hard to read). + +DOT_TRANSPARENT = NO + +# Set the DOT_MULTI_TARGETS tag to YES allow dot to generate multiple output +# files in one run (i.e. multiple -o and -T options on the command line). This +# makes dot run faster, but since only newer versions of dot (>1.8.10) +# support this, this feature is disabled by default. + +DOT_MULTI_TARGETS = NO + +# If the GENERATE_LEGEND tag is set to YES (the default) Doxygen will +# generate a legend page explaining the meaning of the various boxes and +# arrows in the dot generated graphs. + +GENERATE_LEGEND = YES + +# If the DOT_CLEANUP tag is set to YES (the default) Doxygen will +# remove the intermediate dot files that are used to generate +# the various graphs. + +DOT_CLEANUP = YES + +#--------------------------------------------------------------------------- +# Options related to the search engine +#--------------------------------------------------------------------------- + +# The SEARCHENGINE tag specifies whether or not a search engine should be +# used. If set to NO the values of all tags below this one will be ignored. + +SEARCHENGINE = NO diff --git a/guidoar-dev/doc/footer.html b/guidoar-dev/doc/footer.html new file mode 100644 index 000000000..93582c4c8 --- /dev/null +++ b/guidoar-dev/doc/footer.html @@ -0,0 +1,8 @@ +
+
+Generated on $datetime for $projectname by  +doxygen $doxygenversion + -(c) Grame Research Lab. +
+ + diff --git a/guidoar-dev/doc/internal/Doxyfile b/guidoar-dev/doc/internal/Doxyfile new file mode 100644 index 000000000..16a065770 --- /dev/null +++ b/guidoar-dev/doc/internal/Doxyfile @@ -0,0 +1,1500 @@ +# Doxyfile 1.5.8 + +#--------------------------------------------------------------------------- +# Project related configuration options +#--------------------------------------------------------------------------- + +# This tag specifies the encoding used for all characters in the config file +# that follow. The default is UTF-8 which is also the encoding used for all +# text before the first occurrence of this tag. Doxygen uses libiconv (or the +# iconv built into libc) for the transcoding. See +# http://www.gnu.org/software/libiconv for the list of possible encodings. + +DOXYFILE_ENCODING = UTF-8 + +# The PROJECT_NAME tag is a single word (or a sequence of words surrounded +# by quotes) that should identify the project. + +PROJECT_NAME = GUIDO AR Library + +# The PROJECT_NUMBER tag can be used to enter a project or revision number. +# This could be handy for archiving the generated documentation or +# if some version control system is used. + +PROJECT_NUMBER = 0.90 + +# The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute) +# base path where the generated documentation will be put. +# If a relative path is entered, it will be relative to the location +# where doxygen was started. If left blank the current directory will be used. + +OUTPUT_DIRECTORY = + +# If the CREATE_SUBDIRS tag is set to YES, then doxygen will create +# 4096 sub-directories (in 2 levels) under the output directory of each output +# format and will distribute the generated files over these directories. +# Enabling this option can be useful when feeding doxygen a huge amount of +# source files, where putting all generated files in the same directory would +# otherwise cause performance problems for the file system. + +CREATE_SUBDIRS = NO + +# The OUTPUT_LANGUAGE tag is used to specify the language in which all +# documentation generated by doxygen is written. Doxygen will use this +# information to generate all constant output in the proper language. +# The default language is English, other supported languages are: +# Afrikaans, Arabic, Brazilian, Catalan, Chinese, Chinese-Traditional, +# Croatian, Czech, Danish, Dutch, Farsi, Finnish, French, German, Greek, +# Hungarian, Italian, Japanese, Japanese-en (Japanese with English messages), +# Korean, Korean-en, Lithuanian, Norwegian, Macedonian, Persian, Polish, +# Portuguese, Romanian, Russian, Serbian, Serbian-Cyrilic, Slovak, Slovene, +# Spanish, Swedish, and Ukrainian. + +OUTPUT_LANGUAGE = English + +# If the BRIEF_MEMBER_DESC tag is set to YES (the default) Doxygen will +# include brief member descriptions after the members that are listed in +# the file and class documentation (similar to JavaDoc). +# Set to NO to disable this. + +BRIEF_MEMBER_DESC = YES + +# If the REPEAT_BRIEF tag is set to YES (the default) Doxygen will prepend +# the brief description of a member or function before the detailed description. +# Note: if both HIDE_UNDOC_MEMBERS and BRIEF_MEMBER_DESC are set to NO, the +# brief descriptions will be completely suppressed. + +REPEAT_BRIEF = YES + +# This tag implements a quasi-intelligent brief description abbreviator +# that is used to form the text in various listings. Each string +# in this list, if found as the leading text of the brief description, will be +# stripped from the text and the result after processing the whole list, is +# used as the annotated text. Otherwise, the brief description is used as-is. +# If left blank, the following values are used ("$name" is automatically +# replaced with the name of the entity): "The $name class" "The $name widget" +# "The $name file" "is" "provides" "specifies" "contains" +# "represents" "a" "an" "the" + +ABBREVIATE_BRIEF = + +# If the ALWAYS_DETAILED_SEC and REPEAT_BRIEF tags are both set to YES then +# Doxygen will generate a detailed section even if there is only a brief +# description. + +ALWAYS_DETAILED_SEC = NO + +# If the INLINE_INHERITED_MEMB tag is set to YES, doxygen will show all +# inherited members of a class in the documentation of that class as if those +# members were ordinary class members. Constructors, destructors and assignment +# operators of the base classes will not be shown. + +INLINE_INHERITED_MEMB = NO + +# If the FULL_PATH_NAMES tag is set to YES then Doxygen will prepend the full +# path before files name in the file list and in the header files. If set +# to NO the shortest path that makes the file name unique will be used. + +FULL_PATH_NAMES = NO + +# If the FULL_PATH_NAMES tag is set to YES then the STRIP_FROM_PATH tag +# can be used to strip a user-defined part of the path. Stripping is +# only done if one of the specified strings matches the left-hand part of +# the path. The tag can be used to show relative paths in the file list. +# If left blank the directory from which doxygen is run is used as the +# path to strip. + +STRIP_FROM_PATH = + +# The STRIP_FROM_INC_PATH tag can be used to strip a user-defined part of +# the path mentioned in the documentation of a class, which tells +# the reader which header file to include in order to use a class. +# If left blank only the name of the header file containing the class +# definition is used. Otherwise one should specify the include paths that +# are normally passed to the compiler using the -I flag. + +STRIP_FROM_INC_PATH = + +# If the SHORT_NAMES tag is set to YES, doxygen will generate much shorter +# (but less readable) file names. This can be useful is your file systems +# doesn't support long names like on DOS, Mac, or CD-ROM. + +SHORT_NAMES = NO + +# If the JAVADOC_AUTOBRIEF tag is set to YES then Doxygen +# will interpret the first line (until the first dot) of a JavaDoc-style +# comment as the brief description. If set to NO, the JavaDoc +# comments will behave just like regular Qt-style comments +# (thus requiring an explicit @brief command for a brief description.) + +JAVADOC_AUTOBRIEF = NO + +# If the QT_AUTOBRIEF tag is set to YES then Doxygen will +# interpret the first line (until the first dot) of a Qt-style +# comment as the brief description. If set to NO, the comments +# will behave just like regular Qt-style comments (thus requiring +# an explicit \brief command for a brief description.) + +QT_AUTOBRIEF = NO + +# The MULTILINE_CPP_IS_BRIEF tag can be set to YES to make Doxygen +# treat a multi-line C++ special comment block (i.e. a block of //! or /// +# comments) as a brief description. This used to be the default behaviour. +# The new default is to treat a multi-line C++ comment block as a detailed +# description. Set this tag to YES if you prefer the old behaviour instead. + +MULTILINE_CPP_IS_BRIEF = NO + +# If the INHERIT_DOCS tag is set to YES (the default) then an undocumented +# member inherits the documentation from any documented member that it +# re-implements. + +INHERIT_DOCS = YES + +# If the SEPARATE_MEMBER_PAGES tag is set to YES, then doxygen will produce +# a new page for each member. If set to NO, the documentation of a member will +# be part of the file/class/namespace that contains it. + +SEPARATE_MEMBER_PAGES = NO + +# The TAB_SIZE tag can be used to set the number of spaces in a tab. +# Doxygen uses this value to replace tabs by spaces in code fragments. + +TAB_SIZE = 4 + +# This tag can be used to specify a number of aliases that acts +# as commands in the documentation. An alias has the form "name=value". +# For example adding "sideeffect=\par Side Effects:\n" will allow you to +# put the command \sideeffect (or @sideeffect) in the documentation, which +# will result in a user-defined paragraph with heading "Side Effects:". +# You can put \n's in the value part of an alias to insert newlines. + +ALIASES = + +# Set the OPTIMIZE_OUTPUT_FOR_C tag to YES if your project consists of C +# sources only. Doxygen will then generate output that is more tailored for C. +# For instance, some of the names that are used will be different. The list +# of all members will be omitted, etc. + +OPTIMIZE_OUTPUT_FOR_C = NO + +# Set the OPTIMIZE_OUTPUT_JAVA tag to YES if your project consists of Java +# sources only. Doxygen will then generate output that is more tailored for +# Java. For instance, namespaces will be presented as packages, qualified +# scopes will look different, etc. + +OPTIMIZE_OUTPUT_JAVA = NO + +# Set the OPTIMIZE_FOR_FORTRAN tag to YES if your project consists of Fortran +# sources only. Doxygen will then generate output that is more tailored for +# Fortran. + +OPTIMIZE_FOR_FORTRAN = NO + +# Set the OPTIMIZE_OUTPUT_VHDL tag to YES if your project consists of VHDL +# sources. Doxygen will then generate output that is tailored for +# VHDL. + +OPTIMIZE_OUTPUT_VHDL = NO + +# Doxygen selects the parser to use depending on the extension of the files it parses. +# With this tag you can assign which parser to use for a given extension. +# Doxygen has a built-in mapping, but you can override or extend it using this tag. +# The format is ext=language, where ext is a file extension, and language is one of +# the parsers supported by doxygen: IDL, Java, Javascript, C#, C, C++, D, PHP, +# Objective-C, Python, Fortran, VHDL, C, C++. For instance to make doxygen treat +# .inc files as Fortran files (default is PHP), and .f files as C (default is Fortran), +# use: inc=Fortran f=C + +EXTENSION_MAPPING = + +# If you use STL classes (i.e. std::string, std::vector, etc.) but do not want +# to include (a tag file for) the STL sources as input, then you should +# set this tag to YES in order to let doxygen match functions declarations and +# definitions whose arguments contain STL classes (e.g. func(std::string); v.s. +# func(std::string) {}). This also make the inheritance and collaboration +# diagrams that involve STL classes more complete and accurate. + +BUILTIN_STL_SUPPORT = NO + +# If you use Microsoft's C++/CLI language, you should set this option to YES to +# enable parsing support. + +CPP_CLI_SUPPORT = NO + +# Set the SIP_SUPPORT tag to YES if your project consists of sip sources only. +# Doxygen will parse them like normal C++ but will assume all classes use public +# instead of private inheritance when no explicit protection keyword is present. + +SIP_SUPPORT = NO + +# For Microsoft's IDL there are propget and propput attributes to indicate getter +# and setter methods for a property. Setting this option to YES (the default) +# will make doxygen to replace the get and set methods by a property in the +# documentation. This will only work if the methods are indeed getting or +# setting a simple type. If this is not the case, or you want to show the +# methods anyway, you should set this option to NO. + +IDL_PROPERTY_SUPPORT = YES + +# If member grouping is used in the documentation and the DISTRIBUTE_GROUP_DOC +# tag is set to YES, then doxygen will reuse the documentation of the first +# member in the group (if any) for the other members of the group. By default +# all members of a group must be documented explicitly. + +DISTRIBUTE_GROUP_DOC = NO + +# Set the SUBGROUPING tag to YES (the default) to allow class member groups of +# the same type (for instance a group of public functions) to be put as a +# subgroup of that type (e.g. under the Public Functions section). Set it to +# NO to prevent subgrouping. Alternatively, this can be done per class using +# the \nosubgrouping command. + +SUBGROUPING = YES + +# When TYPEDEF_HIDES_STRUCT is enabled, a typedef of a struct, union, or enum +# is documented as struct, union, or enum with the name of the typedef. So +# typedef struct TypeS {} TypeT, will appear in the documentation as a struct +# with name TypeT. When disabled the typedef will appear as a member of a file, +# namespace, or class. And the struct will be named TypeS. This can typically +# be useful for C code in case the coding convention dictates that all compound +# types are typedef'ed and only the typedef is referenced, never the tag name. + +TYPEDEF_HIDES_STRUCT = NO + +# The SYMBOL_CACHE_SIZE determines the size of the internal cache use to +# determine which symbols to keep in memory and which to flush to disk. +# When the cache is full, less often used symbols will be written to disk. +# For small to medium size projects (<1000 input files) the default value is +# probably good enough. For larger projects a too small cache size can cause +# doxygen to be busy swapping symbols to and from disk most of the time +# causing a significant performance penality. +# If the system has enough physical memory increasing the cache will improve the +# performance by keeping more symbols in memory. Note that the value works on +# a logarithmic scale so increasing the size by one will rougly double the +# memory usage. The cache size is given by this formula: +# 2^(16+SYMBOL_CACHE_SIZE). The valid range is 0..9, the default is 0, +# corresponding to a cache size of 2^16 = 65536 symbols + +SYMBOL_CACHE_SIZE = 0 + +#--------------------------------------------------------------------------- +# Build related configuration options +#--------------------------------------------------------------------------- + +# If the EXTRACT_ALL tag is set to YES doxygen will assume all entities in +# documentation are documented, even if no documentation was available. +# Private class members and static file members will be hidden unless +# the EXTRACT_PRIVATE and EXTRACT_STATIC tags are set to YES + +EXTRACT_ALL = YES + +# If the EXTRACT_PRIVATE tag is set to YES all private members of a class +# will be included in the documentation. + +EXTRACT_PRIVATE = NO + +# If the EXTRACT_STATIC tag is set to YES all static members of a file +# will be included in the documentation. + +EXTRACT_STATIC = YES + +# If the EXTRACT_LOCAL_CLASSES tag is set to YES classes (and structs) +# defined locally in source files will be included in the documentation. +# If set to NO only classes defined in header files are included. + +EXTRACT_LOCAL_CLASSES = YES + +# This flag is only useful for Objective-C code. When set to YES local +# methods, which are defined in the implementation section but not in +# the interface are included in the documentation. +# If set to NO (the default) only methods in the interface are included. + +EXTRACT_LOCAL_METHODS = NO + +# If this flag is set to YES, the members of anonymous namespaces will be +# extracted and appear in the documentation as a namespace called +# 'anonymous_namespace{file}', where file will be replaced with the base +# name of the file that contains the anonymous namespace. By default +# anonymous namespace are hidden. + +EXTRACT_ANON_NSPACES = NO + +# If the HIDE_UNDOC_MEMBERS tag is set to YES, Doxygen will hide all +# undocumented members of documented classes, files or namespaces. +# If set to NO (the default) these members will be included in the +# various overviews, but no documentation section is generated. +# This option has no effect if EXTRACT_ALL is enabled. + +HIDE_UNDOC_MEMBERS = NO + +# If the HIDE_UNDOC_CLASSES tag is set to YES, Doxygen will hide all +# undocumented classes that are normally visible in the class hierarchy. +# If set to NO (the default) these classes will be included in the various +# overviews. This option has no effect if EXTRACT_ALL is enabled. + +HIDE_UNDOC_CLASSES = YES + +# If the HIDE_FRIEND_COMPOUNDS tag is set to YES, Doxygen will hide all +# friend (class|struct|union) declarations. +# If set to NO (the default) these declarations will be included in the +# documentation. + +HIDE_FRIEND_COMPOUNDS = NO + +# If the HIDE_IN_BODY_DOCS tag is set to YES, Doxygen will hide any +# documentation blocks found inside the body of a function. +# If set to NO (the default) these blocks will be appended to the +# function's detailed documentation block. + +HIDE_IN_BODY_DOCS = NO + +# The INTERNAL_DOCS tag determines if documentation +# that is typed after a \internal command is included. If the tag is set +# to NO (the default) then the documentation will be excluded. +# Set it to YES to include the internal documentation. + +INTERNAL_DOCS = NO + +# If the CASE_SENSE_NAMES tag is set to NO then Doxygen will only generate +# file names in lower-case letters. If set to YES upper-case letters are also +# allowed. This is useful if you have classes or files whose names only differ +# in case and if your file system supports case sensitive file names. Windows +# and Mac users are advised to set this option to NO. + +CASE_SENSE_NAMES = YES + +# If the HIDE_SCOPE_NAMES tag is set to NO (the default) then Doxygen +# will show members with their full class and namespace scopes in the +# documentation. If set to YES the scope will be hidden. + +HIDE_SCOPE_NAMES = YES + +# If the SHOW_INCLUDE_FILES tag is set to YES (the default) then Doxygen +# will put a list of the files that are included by a file in the documentation +# of that file. + +SHOW_INCLUDE_FILES = NO + +# If the INLINE_INFO tag is set to YES (the default) then a tag [inline] +# is inserted in the documentation for inline members. + +INLINE_INFO = YES + +# If the SORT_MEMBER_DOCS tag is set to YES (the default) then doxygen +# will sort the (detailed) documentation of file and class members +# alphabetically by member name. If set to NO the members will appear in +# declaration order. + +SORT_MEMBER_DOCS = NO + +# If the SORT_BRIEF_DOCS tag is set to YES then doxygen will sort the +# brief documentation of file, namespace and class members alphabetically +# by member name. If set to NO (the default) the members will appear in +# declaration order. + +SORT_BRIEF_DOCS = NO + +# If the SORT_GROUP_NAMES tag is set to YES then doxygen will sort the +# hierarchy of group names into alphabetical order. If set to NO (the default) +# the group names will appear in their defined order. + +SORT_GROUP_NAMES = NO + +# If the SORT_BY_SCOPE_NAME tag is set to YES, the class list will be +# sorted by fully-qualified names, including namespaces. If set to +# NO (the default), the class list will be sorted only by class name, +# not including the namespace part. +# Note: This option is not very useful if HIDE_SCOPE_NAMES is set to YES. +# Note: This option applies only to the class list, not to the +# alphabetical list. + +SORT_BY_SCOPE_NAME = NO + +# The GENERATE_TODOLIST tag can be used to enable (YES) or +# disable (NO) the todo list. This list is created by putting \todo +# commands in the documentation. + +GENERATE_TODOLIST = YES + +# The GENERATE_TESTLIST tag can be used to enable (YES) or +# disable (NO) the test list. This list is created by putting \test +# commands in the documentation. + +GENERATE_TESTLIST = YES + +# The GENERATE_BUGLIST tag can be used to enable (YES) or +# disable (NO) the bug list. This list is created by putting \bug +# commands in the documentation. + +GENERATE_BUGLIST = YES + +# The GENERATE_DEPRECATEDLIST tag can be used to enable (YES) or +# disable (NO) the deprecated list. This list is created by putting +# \deprecated commands in the documentation. + +GENERATE_DEPRECATEDLIST= YES + +# The ENABLED_SECTIONS tag can be used to enable conditional +# documentation sections, marked by \if sectionname ... \endif. + +ENABLED_SECTIONS = + +# The MAX_INITIALIZER_LINES tag determines the maximum number of lines +# the initial value of a variable or define consists of for it to appear in +# the documentation. If the initializer consists of more lines than specified +# here it will be hidden. Use a value of 0 to hide initializers completely. +# The appearance of the initializer of individual variables and defines in the +# documentation can be controlled using \showinitializer or \hideinitializer +# command in the documentation regardless of this setting. + +MAX_INITIALIZER_LINES = 30 + +# Set the SHOW_USED_FILES tag to NO to disable the list of files generated +# at the bottom of the documentation of classes and structs. If set to YES the +# list will mention the files that were used to generate the documentation. + +SHOW_USED_FILES = NO + +# If the sources in your project are distributed over multiple directories +# then setting the SHOW_DIRECTORIES tag to YES will show the directory hierarchy +# in the documentation. The default is NO. + +SHOW_DIRECTORIES = NO + +# Set the SHOW_FILES tag to NO to disable the generation of the Files page. +# This will remove the Files entry from the Quick Index and from the +# Folder Tree View (if specified). The default is YES. + +SHOW_FILES = YES + +# Set the SHOW_NAMESPACES tag to NO to disable the generation of the +# Namespaces page. +# This will remove the Namespaces entry from the Quick Index +# and from the Folder Tree View (if specified). The default is YES. + +SHOW_NAMESPACES = YES + +# The FILE_VERSION_FILTER tag can be used to specify a program or script that +# doxygen should invoke to get the current version for each file (typically from +# the version control system). Doxygen will invoke the program by executing (via +# popen()) the command , where is the value of +# the FILE_VERSION_FILTER tag, and is the name of an input file +# provided by doxygen. Whatever the program writes to standard output +# is used as the file version. See the manual for examples. + +FILE_VERSION_FILTER = + +# The LAYOUT_FILE tag can be used to specify a layout file which will be parsed by +# doxygen. The layout file controls the global structure of the generated output files +# in an output format independent way. The create the layout file that represents +# doxygen's defaults, run doxygen with the -l option. You can optionally specify a +# file name after the option, if omitted DoxygenLayout.xml will be used as the name +# of the layout file. + +LAYOUT_FILE = + +#--------------------------------------------------------------------------- +# configuration options related to warning and progress messages +#--------------------------------------------------------------------------- + +# The QUIET tag can be used to turn on/off the messages that are generated +# by doxygen. Possible values are YES and NO. If left blank NO is used. + +QUIET = YES + +# The WARNINGS tag can be used to turn on/off the warning messages that are +# generated by doxygen. Possible values are YES and NO. If left blank +# NO is used. + +WARNINGS = YES + +# If WARN_IF_UNDOCUMENTED is set to YES, then doxygen will generate warnings +# for undocumented members. If EXTRACT_ALL is set to YES then this flag will +# automatically be disabled. + +WARN_IF_UNDOCUMENTED = NO + +# If WARN_IF_DOC_ERROR is set to YES, doxygen will generate warnings for +# potential errors in the documentation, such as not documenting some +# parameters in a documented function, or documenting parameters that +# don't exist or using markup commands wrongly. + +WARN_IF_DOC_ERROR = YES + +# This WARN_NO_PARAMDOC option can be abled to get warnings for +# functions that are documented, but have no documentation for their parameters +# or return value. If set to NO (the default) doxygen will only warn about +# wrong or incomplete parameter documentation, but not about the absence of +# documentation. + +WARN_NO_PARAMDOC = NO + +# The WARN_FORMAT tag determines the format of the warning messages that +# doxygen can produce. The string should contain the $file, $line, and $text +# tags, which will be replaced by the file and line number from which the +# warning originated and the warning text. Optionally the format may contain +# $version, which will be replaced by the version of the file (if it could +# be obtained via FILE_VERSION_FILTER) + +WARN_FORMAT = + +# The WARN_LOGFILE tag can be used to specify a file to which warning +# and error messages should be written. If left blank the output is written +# to stderr. + +WARN_LOGFILE = + +#--------------------------------------------------------------------------- +# configuration options related to the input files +#--------------------------------------------------------------------------- + +# The INPUT tag can be used to specify the files and/or directories that contain +# documented source files. You may enter file names like "myfile.cpp" or +# directories like "/usr/src/myproject". Separate the files or directories +# with spaces. + +INPUT = ../../src + +# This tag can be used to specify the character encoding of the source files +# that doxygen parses. Internally doxygen uses the UTF-8 encoding, which is +# also the default input encoding. Doxygen uses libiconv (or the iconv built +# into libc) for the transcoding. See http://www.gnu.org/software/libiconv for +# the list of possible encodings. + +INPUT_ENCODING = UTF-8 + +# If the value of the INPUT tag contains directories, you can use the +# FILE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp +# and *.h) to filter out the source-files in the directories. If left +# blank the following patterns are tested: +# *.c *.cc *.cxx *.cpp *.c++ *.java *.ii *.ixx *.ipp *.i++ *.inl *.h *.hh *.hxx +# *.hpp *.h++ *.idl *.odl *.cs *.php *.php3 *.inc *.m *.mm *.py *.f90 + +FILE_PATTERNS = *.h + +# The RECURSIVE tag can be used to turn specify whether or not subdirectories +# should be searched for input files as well. Possible values are YES and NO. +# If left blank NO is used. + +RECURSIVE = YES + +# The EXCLUDE tag can be used to specify files and/or directories that should +# excluded from the INPUT source files. This way you can easily exclude a +# subdirectory from a directory tree whose root is specified with the INPUT tag. + +EXCLUDE = + +# The EXCLUDE_SYMLINKS tag can be used select whether or not files or +# directories that are symbolic links (a Unix filesystem feature) are excluded +# from the input. + +EXCLUDE_SYMLINKS = NO + +# If the value of the INPUT tag contains directories, you can use the +# EXCLUDE_PATTERNS tag to specify one or more wildcard patterns to exclude +# certain files from those directories. Note that the wildcards are matched +# against the file with absolute path, so to exclude all test directories +# for example use the pattern */test/* + +EXCLUDE_PATTERNS = + +# The EXCLUDE_SYMBOLS tag can be used to specify one or more symbol names +# (namespaces, classes, functions, etc.) that should be excluded from the +# output. The symbol name can be a fully qualified name, a word, or if the +# wildcard * is used, a substring. Examples: ANamespace, AClass, +# AClass::ANamespace, ANamespace::*Test + +EXCLUDE_SYMBOLS = + +# The EXAMPLE_PATH tag can be used to specify one or more files or +# directories that contain example code fragments that are included (see +# the \include command). + +EXAMPLE_PATH = + +# If the value of the EXAMPLE_PATH tag contains directories, you can use the +# EXAMPLE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp +# and *.h) to filter out the source-files in the directories. If left +# blank all files are included. + +EXAMPLE_PATTERNS = + +# If the EXAMPLE_RECURSIVE tag is set to YES then subdirectories will be +# searched for input files to be used with the \include or \dontinclude +# commands irrespective of the value of the RECURSIVE tag. +# Possible values are YES and NO. If left blank NO is used. + +EXAMPLE_RECURSIVE = NO + +# The IMAGE_PATH tag can be used to specify one or more files or +# directories that contain image that are included in the documentation (see +# the \image command). + +IMAGE_PATH = + +# The INPUT_FILTER tag can be used to specify a program that doxygen should +# invoke to filter for each input file. Doxygen will invoke the filter program +# by executing (via popen()) the command , where +# is the value of the INPUT_FILTER tag, and is the name of an +# input file. Doxygen will then use the output that the filter program writes +# to standard output. +# If FILTER_PATTERNS is specified, this tag will be +# ignored. + +INPUT_FILTER = + +# The FILTER_PATTERNS tag can be used to specify filters on a per file pattern +# basis. +# Doxygen will compare the file name with each pattern and apply the +# filter if there is a match. +# The filters are a list of the form: +# pattern=filter (like *.cpp=my_cpp_filter). See INPUT_FILTER for further +# info on how filters are used. If FILTER_PATTERNS is empty, INPUT_FILTER +# is applied to all files. + +FILTER_PATTERNS = + +# If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using +# INPUT_FILTER) will be used to filter the input files when producing source +# files to browse (i.e. when SOURCE_BROWSER is set to YES). + +FILTER_SOURCE_FILES = NO + +#--------------------------------------------------------------------------- +# configuration options related to source browsing +#--------------------------------------------------------------------------- + +# If the SOURCE_BROWSER tag is set to YES then a list of source files will +# be generated. Documented entities will be cross-referenced with these sources. +# Note: To get rid of all source code in the generated output, make sure also +# VERBATIM_HEADERS is set to NO. + +SOURCE_BROWSER = NO + +# Setting the INLINE_SOURCES tag to YES will include the body +# of functions and classes directly in the documentation. + +INLINE_SOURCES = NO + +# Setting the STRIP_CODE_COMMENTS tag to YES (the default) will instruct +# doxygen to hide any special comment blocks from generated source code +# fragments. Normal C and C++ comments will always remain visible. + +STRIP_CODE_COMMENTS = YES + +# If the REFERENCED_BY_RELATION tag is set to YES +# then for each documented function all documented +# functions referencing it will be listed. + +REFERENCED_BY_RELATION = YES + +# If the REFERENCES_RELATION tag is set to YES +# then for each documented function all documented entities +# called/used by that function will be listed. + +REFERENCES_RELATION = YES + +# If the REFERENCES_LINK_SOURCE tag is set to YES (the default) +# and SOURCE_BROWSER tag is set to YES, then the hyperlinks from +# functions in REFERENCES_RELATION and REFERENCED_BY_RELATION lists will +# link to the source code. +# Otherwise they will link to the documentation. + +REFERENCES_LINK_SOURCE = YES + +# If the USE_HTAGS tag is set to YES then the references to source code +# will point to the HTML generated by the htags(1) tool instead of doxygen +# built-in source browser. The htags tool is part of GNU's global source +# tagging system (see http://www.gnu.org/software/global/global.html). You +# will need version 4.8.6 or higher. + +USE_HTAGS = NO + +# If the VERBATIM_HEADERS tag is set to YES (the default) then Doxygen +# will generate a verbatim copy of the header file for each class for +# which an include is specified. Set to NO to disable this. + +VERBATIM_HEADERS = YES + +#--------------------------------------------------------------------------- +# configuration options related to the alphabetical class index +#--------------------------------------------------------------------------- + +# If the ALPHABETICAL_INDEX tag is set to YES, an alphabetical index +# of all compounds will be generated. Enable this if the project +# contains a lot of classes, structs, unions or interfaces. + +ALPHABETICAL_INDEX = YES + +# If the alphabetical index is enabled (see ALPHABETICAL_INDEX) then +# the COLS_IN_ALPHA_INDEX tag can be used to specify the number of columns +# in which this list will be split (can be a number in the range [1..20]) + +COLS_IN_ALPHA_INDEX = 5 + +# In case all classes in a project start with a common prefix, all +# classes will be put under the same header in the alphabetical index. +# The IGNORE_PREFIX tag can be used to specify one or more prefixes that +# should be ignored while generating the index headers. + +IGNORE_PREFIX = + +#--------------------------------------------------------------------------- +# configuration options related to the HTML output +#--------------------------------------------------------------------------- + +# If the GENERATE_HTML tag is set to YES (the default) Doxygen will +# generate HTML output. + +GENERATE_HTML = YES + +# The HTML_OUTPUT tag is used to specify where the HTML docs will be put. +# If a relative path is entered the value of OUTPUT_DIRECTORY will be +# put in front of it. If left blank `html' will be used as the default path. + +HTML_OUTPUT = + +# The HTML_FILE_EXTENSION tag can be used to specify the file extension for +# each generated HTML page (for example: .htm,.php,.asp). If it is left blank +# doxygen will generate files with .html extension. + +HTML_FILE_EXTENSION = .html + +# The HTML_HEADER tag can be used to specify a personal HTML header for +# each generated HTML page. If it is left blank doxygen will generate a +# standard header. + +HTML_HEADER = + +# The HTML_FOOTER tag can be used to specify a personal HTML footer for +# each generated HTML page. If it is left blank doxygen will generate a +# standard footer. + +HTML_FOOTER = ../footer.html + +# The HTML_STYLESHEET tag can be used to specify a user-defined cascading +# style sheet that is used by each HTML page. It can be used to +# fine-tune the look of the HTML output. If the tag is left blank doxygen +# will generate a default style sheet. Note that doxygen will try to copy +# the style sheet file to the HTML output directory, so don't put your own +# stylesheet in the HTML output directory as well, or it will be erased! + +HTML_STYLESHEET = + +# If the HTML_ALIGN_MEMBERS tag is set to YES, the members of classes, +# files or namespaces will be aligned in HTML using tables. If set to +# NO a bullet list will be used. + +HTML_ALIGN_MEMBERS = YES + +# If the HTML_DYNAMIC_SECTIONS tag is set to YES then the generated HTML +# documentation will contain sections that can be hidden and shown after the +# page has loaded. For this to work a browser that supports +# JavaScript and DHTML is required (for instance Mozilla 1.0+, Firefox +# Netscape 6.0+, Internet explorer 5.0+, Konqueror, or Safari). + +HTML_DYNAMIC_SECTIONS = NO + +# If the GENERATE_DOCSET tag is set to YES, additional index files +# will be generated that can be used as input for Apple's Xcode 3 +# integrated development environment, introduced with OSX 10.5 (Leopard). +# To create a documentation set, doxygen will generate a Makefile in the +# HTML output directory. Running make will produce the docset in that +# directory and running "make install" will install the docset in +# ~/Library/Developer/Shared/Documentation/DocSets so that Xcode will find +# it at startup. +# See http://developer.apple.com/tools/creatingdocsetswithdoxygen.html for more information. + +GENERATE_DOCSET = NO + +# When GENERATE_DOCSET tag is set to YES, this tag determines the name of the +# feed. A documentation feed provides an umbrella under which multiple +# documentation sets from a single provider (such as a company or product suite) +# can be grouped. + +DOCSET_FEEDNAME = "Doxygen generated docs" + +# When GENERATE_DOCSET tag is set to YES, this tag specifies a string that +# should uniquely identify the documentation set bundle. This should be a +# reverse domain-name style string, e.g. com.mycompany.MyDocSet. Doxygen +# will append .docset to the name. + +DOCSET_BUNDLE_ID = org.doxygen.Project + +# If the GENERATE_HTMLHELP tag is set to YES, additional index files +# will be generated that can be used as input for tools like the +# Microsoft HTML help workshop to generate a compiled HTML help file (.chm) +# of the generated HTML documentation. + +GENERATE_HTMLHELP = NO + +# If the GENERATE_HTMLHELP tag is set to YES, the CHM_FILE tag can +# be used to specify the file name of the resulting .chm file. You +# can add a path in front of the file if the result should not be +# written to the html output directory. + +CHM_FILE = + +# If the GENERATE_HTMLHELP tag is set to YES, the HHC_LOCATION tag can +# be used to specify the location (absolute path including file name) of +# the HTML help compiler (hhc.exe). If non-empty doxygen will try to run +# the HTML help compiler on the generated index.hhp. + +HHC_LOCATION = + +# If the GENERATE_HTMLHELP tag is set to YES, the GENERATE_CHI flag +# controls if a separate .chi index file is generated (YES) or that +# it should be included in the master .chm file (NO). + +GENERATE_CHI = NO + +# If the GENERATE_HTMLHELP tag is set to YES, the CHM_INDEX_ENCODING +# is used to encode HtmlHelp index (hhk), content (hhc) and project file +# content. + +CHM_INDEX_ENCODING = + +# If the GENERATE_HTMLHELP tag is set to YES, the BINARY_TOC flag +# controls whether a binary table of contents is generated (YES) or a +# normal table of contents (NO) in the .chm file. + +BINARY_TOC = NO + +# The TOC_EXPAND flag can be set to YES to add extra items for group members +# to the contents of the HTML help documentation and to the tree view. + +TOC_EXPAND = NO + +# If the GENERATE_QHP tag is set to YES and both QHP_NAMESPACE and QHP_VIRTUAL_FOLDER +# are set, an additional index file will be generated that can be used as input for +# Qt's qhelpgenerator to generate a Qt Compressed Help (.qch) of the generated +# HTML documentation. + +GENERATE_QHP = NO + +# If the QHG_LOCATION tag is specified, the QCH_FILE tag can +# be used to specify the file name of the resulting .qch file. +# The path specified is relative to the HTML output folder. + +QCH_FILE = + +# The QHP_NAMESPACE tag specifies the namespace to use when generating +# Qt Help Project output. For more information please see +# http://doc.trolltech.com/qthelpproject.html#namespace + +QHP_NAMESPACE = + +# The QHP_VIRTUAL_FOLDER tag specifies the namespace to use when generating +# Qt Help Project output. For more information please see +# http://doc.trolltech.com/qthelpproject.html#virtual-folders + +QHP_VIRTUAL_FOLDER = doc + +# If QHP_CUST_FILTER_NAME is set, it specifies the name of a custom filter to add. +# For more information please see +# http://doc.trolltech.com/qthelpproject.html#custom-filters + +QHP_CUST_FILTER_NAME = + +# The QHP_CUST_FILT_ATTRS tag specifies the list of the attributes of the custom filter to add.For more information please see +# Qt Help Project / Custom Filters. + +QHP_CUST_FILTER_ATTRS = + +# The QHP_SECT_FILTER_ATTRS tag specifies the list of the attributes this project's +# filter section matches. +# Qt Help Project / Filter Attributes. + +QHP_SECT_FILTER_ATTRS = + +# If the GENERATE_QHP tag is set to YES, the QHG_LOCATION tag can +# be used to specify the location of Qt's qhelpgenerator. +# If non-empty doxygen will try to run qhelpgenerator on the generated +# .qhp file. + +QHG_LOCATION = + +# The DISABLE_INDEX tag can be used to turn on/off the condensed index at +# top of each HTML page. The value NO (the default) enables the index and +# the value YES disables it. + +DISABLE_INDEX = NO + +# This tag can be used to set the number of enum values (range [1..20]) +# that doxygen will group on one line in the generated HTML documentation. + +ENUM_VALUES_PER_LINE = 4 + +# The GENERATE_TREEVIEW tag is used to specify whether a tree-like index +# structure should be generated to display hierarchical information. +# If the tag value is set to FRAME, a side panel will be generated +# containing a tree-like index structure (just like the one that +# is generated for HTML Help). For this to work a browser that supports +# JavaScript, DHTML, CSS and frames is required (for instance Mozilla 1.0+, +# Netscape 6.0+, Internet explorer 5.0+, or Konqueror). Windows users are +# probably better off using the HTML help feature. Other possible values +# for this tag are: HIERARCHIES, which will generate the Groups, Directories, +# and Class Hierarchy pages using a tree view instead of an ordered list; +# ALL, which combines the behavior of FRAME and HIERARCHIES; and NONE, which +# disables this behavior completely. For backwards compatibility with previous +# releases of Doxygen, the values YES and NO are equivalent to FRAME and NONE +# respectively. + +GENERATE_TREEVIEW = NO + +# If the treeview is enabled (see GENERATE_TREEVIEW) then this tag can be +# used to set the initial width (in pixels) of the frame in which the tree +# is shown. + +TREEVIEW_WIDTH = 250 + +# Use this tag to change the font size of Latex formulas included +# as images in the HTML documentation. The default is 10. Note that +# when you change the font size after a successful doxygen run you need +# to manually remove any form_*.png images from the HTML output directory +# to force them to be regenerated. + +FORMULA_FONTSIZE = 10 + +#--------------------------------------------------------------------------- +# configuration options related to the LaTeX output +#--------------------------------------------------------------------------- + +# If the GENERATE_LATEX tag is set to YES (the default) Doxygen will +# generate Latex output. + +GENERATE_LATEX = YES + +# The LATEX_OUTPUT tag is used to specify where the LaTeX docs will be put. +# If a relative path is entered the value of OUTPUT_DIRECTORY will be +# put in front of it. If left blank `latex' will be used as the default path. + +LATEX_OUTPUT = + +# The LATEX_CMD_NAME tag can be used to specify the LaTeX command name to be +# invoked. If left blank `latex' will be used as the default command name. + +LATEX_CMD_NAME = latex + +# The MAKEINDEX_CMD_NAME tag can be used to specify the command name to +# generate index for LaTeX. If left blank `makeindex' will be used as the +# default command name. + +MAKEINDEX_CMD_NAME = makeindex + +# If the COMPACT_LATEX tag is set to YES Doxygen generates more compact +# LaTeX documents. This may be useful for small projects and may help to +# save some trees in general. + +COMPACT_LATEX = NO + +# The PAPER_TYPE tag can be used to set the paper type that is used +# by the printer. Possible values are: a4, a4wide, letter, legal and +# executive. If left blank a4wide will be used. + +PAPER_TYPE = a4wide + +# The EXTRA_PACKAGES tag can be to specify one or more names of LaTeX +# packages that should be included in the LaTeX output. + +EXTRA_PACKAGES = + +# The LATEX_HEADER tag can be used to specify a personal LaTeX header for +# the generated latex document. The header should contain everything until +# the first chapter. If it is left blank doxygen will generate a +# standard header. Notice: only use this tag if you know what you are doing! + +LATEX_HEADER = + +# If the PDF_HYPERLINKS tag is set to YES, the LaTeX that is generated +# is prepared for conversion to pdf (using ps2pdf). The pdf file will +# contain links (just like the HTML output) instead of page references +# This makes the output suitable for online browsing using a pdf viewer. + +PDF_HYPERLINKS = NO + +# If the USE_PDFLATEX tag is set to YES, pdflatex will be used instead of +# plain latex in the generated Makefile. Set this option to YES to get a +# higher quality PDF documentation. + +USE_PDFLATEX = YES + +# If the LATEX_BATCHMODE tag is set to YES, doxygen will add the \\batchmode. +# command to the generated LaTeX files. This will instruct LaTeX to keep +# running if errors occur, instead of asking the user for help. +# This option is also used when generating formulas in HTML. + +LATEX_BATCHMODE = NO + +# If LATEX_HIDE_INDICES is set to YES then doxygen will not +# include the index chapters (such as File Index, Compound Index, etc.) +# in the output. + +LATEX_HIDE_INDICES = YES + +#--------------------------------------------------------------------------- +# configuration options related to the RTF output +#--------------------------------------------------------------------------- + +# If the GENERATE_RTF tag is set to YES Doxygen will generate RTF output +# The RTF output is optimized for Word 97 and may not look very pretty with +# other RTF readers or editors. + +GENERATE_RTF = NO + +# The RTF_OUTPUT tag is used to specify where the RTF docs will be put. +# If a relative path is entered the value of OUTPUT_DIRECTORY will be +# put in front of it. If left blank `rtf' will be used as the default path. + +RTF_OUTPUT = + +# If the COMPACT_RTF tag is set to YES Doxygen generates more compact +# RTF documents. This may be useful for small projects and may help to +# save some trees in general. + +COMPACT_RTF = NO + +# If the RTF_HYPERLINKS tag is set to YES, the RTF that is generated +# will contain hyperlink fields. The RTF file will +# contain links (just like the HTML output) instead of page references. +# This makes the output suitable for online browsing using WORD or other +# programs which support those fields. +# Note: wordpad (write) and others do not support links. + +RTF_HYPERLINKS = NO + +# Load stylesheet definitions from file. Syntax is similar to doxygen's +# config file, i.e. a series of assignments. You only have to provide +# replacements, missing definitions are set to their default value. + +RTF_STYLESHEET_FILE = + +# Set optional variables used in the generation of an rtf document. +# Syntax is similar to doxygen's config file. + +RTF_EXTENSIONS_FILE = + +#--------------------------------------------------------------------------- +# configuration options related to the man page output +#--------------------------------------------------------------------------- + +# If the GENERATE_MAN tag is set to YES (the default) Doxygen will +# generate man pages + +GENERATE_MAN = NO + +# The MAN_OUTPUT tag is used to specify where the man pages will be put. +# If a relative path is entered the value of OUTPUT_DIRECTORY will be +# put in front of it. If left blank `man' will be used as the default path. + +MAN_OUTPUT = + +# The MAN_EXTENSION tag determines the extension that is added to +# the generated man pages (default is the subroutine's section .3) + +MAN_EXTENSION = + +# If the MAN_LINKS tag is set to YES and Doxygen generates man output, +# then it will generate one additional man file for each entity +# documented in the real man page(s). These additional files +# only source the real man page, but without them the man command +# would be unable to find the correct page. The default is NO. + +MAN_LINKS = NO + +#--------------------------------------------------------------------------- +# configuration options related to the XML output +#--------------------------------------------------------------------------- + +# If the GENERATE_XML tag is set to YES Doxygen will +# generate an XML file that captures the structure of +# the code including all documentation. + +GENERATE_XML = NO + +# The XML_OUTPUT tag is used to specify where the XML pages will be put. +# If a relative path is entered the value of OUTPUT_DIRECTORY will be +# put in front of it. If left blank `xml' will be used as the default path. + +XML_OUTPUT = xml + +# The XML_SCHEMA tag can be used to specify an XML schema, +# which can be used by a validating XML parser to check the +# syntax of the XML files. + +XML_SCHEMA = + +# The XML_DTD tag can be used to specify an XML DTD, +# which can be used by a validating XML parser to check the +# syntax of the XML files. + +XML_DTD = + +# If the XML_PROGRAMLISTING tag is set to YES Doxygen will +# dump the program listings (including syntax highlighting +# and cross-referencing information) to the XML output. Note that +# enabling this will significantly increase the size of the XML output. + +XML_PROGRAMLISTING = YES + +#--------------------------------------------------------------------------- +# configuration options for the AutoGen Definitions output +#--------------------------------------------------------------------------- + +# If the GENERATE_AUTOGEN_DEF tag is set to YES Doxygen will +# generate an AutoGen Definitions (see autogen.sf.net) file +# that captures the structure of the code including all +# documentation. Note that this feature is still experimental +# and incomplete at the moment. + +GENERATE_AUTOGEN_DEF = NO + +#--------------------------------------------------------------------------- +# configuration options related to the Perl module output +#--------------------------------------------------------------------------- + +# If the GENERATE_PERLMOD tag is set to YES Doxygen will +# generate a Perl module file that captures the structure of +# the code including all documentation. Note that this +# feature is still experimental and incomplete at the +# moment. + +GENERATE_PERLMOD = NO + +# If the PERLMOD_LATEX tag is set to YES Doxygen will generate +# the necessary Makefile rules, Perl scripts and LaTeX code to be able +# to generate PDF and DVI output from the Perl module output. + +PERLMOD_LATEX = NO + +# If the PERLMOD_PRETTY tag is set to YES the Perl module output will be +# nicely formatted so it can be parsed by a human reader. +# This is useful +# if you want to understand what is going on. +# On the other hand, if this +# tag is set to NO the size of the Perl module output will be much smaller +# and Perl will parse it just the same. + +PERLMOD_PRETTY = YES + +# The names of the make variables in the generated doxyrules.make file +# are prefixed with the string contained in PERLMOD_MAKEVAR_PREFIX. +# This is useful so different doxyrules.make files included by the same +# Makefile don't overwrite each other's variables. + +PERLMOD_MAKEVAR_PREFIX = + +#--------------------------------------------------------------------------- +# Configuration options related to the preprocessor +#--------------------------------------------------------------------------- + +# If the ENABLE_PREPROCESSING tag is set to YES (the default) Doxygen will +# evaluate all C-preprocessor directives found in the sources and include +# files. + +ENABLE_PREPROCESSING = YES + +# If the MACRO_EXPANSION tag is set to YES Doxygen will expand all macro +# names in the source code. If set to NO (the default) only conditional +# compilation will be performed. Macro expansion can be done in a controlled +# way by setting EXPAND_ONLY_PREDEF to YES. + +MACRO_EXPANSION = YES + +# If the EXPAND_ONLY_PREDEF and MACRO_EXPANSION tags are both set to YES +# then the macro expansion is limited to the macros specified with the +# PREDEFINED and EXPAND_AS_DEFINED tags. + +EXPAND_ONLY_PREDEF = NO + +# If the SEARCH_INCLUDES tag is set to YES (the default) the includes files +# in the INCLUDE_PATH (see below) will be search if a #include is found. + +SEARCH_INCLUDES = YES + +# The INCLUDE_PATH tag can be used to specify one or more directories that +# contain include files that are not input files but should be processed by +# the preprocessor. + +INCLUDE_PATH = + +# You can use the INCLUDE_FILE_PATTERNS tag to specify one or more wildcard +# patterns (like *.h and *.hpp) to filter out the header-files in the +# directories. If left blank, the patterns specified with FILE_PATTERNS will +# be used. + +INCLUDE_FILE_PATTERNS = + +# The PREDEFINED tag can be used to specify one or more macro names that +# are defined before the preprocessor is started (similar to the -D option of +# gcc). The argument of the tag is a list of macros of the form: name +# or name=definition (no spaces). If the definition and the = are +# omitted =1 is assumed. To prevent a macro definition from being +# undefined via #undef or recursively expanded use the := operator +# instead of the = operator. + +PREDEFINED = + +# If the MACRO_EXPANSION and EXPAND_ONLY_PREDEF tags are set to YES then +# this tag can be used to specify a list of macro names that should be expanded. +# The macro definition that is found in the sources will be used. +# Use the PREDEFINED tag if you want to use a different macro definition. + +EXPAND_AS_DEFINED = + +# If the SKIP_FUNCTION_MACROS tag is set to YES (the default) then +# doxygen's preprocessor will remove all function-like macros that are alone +# on a line, have an all uppercase name, and do not end with a semicolon. Such +# function macros are typically used for boiler-plate code, and will confuse +# the parser if not removed. + +SKIP_FUNCTION_MACROS = YES + +#--------------------------------------------------------------------------- +# Configuration::additions related to external references +#--------------------------------------------------------------------------- + +# The TAGFILES option can be used to specify one or more tagfiles. +# Optionally an initial location of the external documentation +# can be added for each tagfile. The format of a tag file without +# this location is as follows: +# +# TAGFILES = file1 file2 ... +# Adding location for the tag files is done as follows: +# +# TAGFILES = file1=loc1 "file2 = loc2" ... +# where "loc1" and "loc2" can be relative or absolute paths or +# URLs. If a location is present for each tag, the installdox tool +# does not have to be run to correct the links. +# Note that each tag file must have a unique name +# (where the name does NOT include the path) +# If a tag file is not located in the directory in which doxygen +# is run, you must also specify the path to the tagfile here. + +TAGFILES = + +# When a file name is specified after GENERATE_TAGFILE, doxygen will create +# a tag file that is based on the input files it reads. + +GENERATE_TAGFILE = + +# If the ALLEXTERNALS tag is set to YES all external classes will be listed +# in the class index. If set to NO only the inherited external classes +# will be listed. + +ALLEXTERNALS = NO + +# If the EXTERNAL_GROUPS tag is set to YES all external groups will be listed +# in the modules index. If set to NO, only the current project's groups will +# be listed. + +EXTERNAL_GROUPS = YES + +# The PERL_PATH should be the absolute path and name of the perl script +# interpreter (i.e. the result of `which perl'). + +PERL_PATH = + +#--------------------------------------------------------------------------- +# Configuration options related to the dot tool +#--------------------------------------------------------------------------- + +# If the CLASS_DIAGRAMS tag is set to YES (the default) Doxygen will +# generate a inheritance diagram (in HTML, RTF and LaTeX) for classes with base +# or super classes. Setting the tag to NO turns the diagrams off. Note that +# this option is superseded by the HAVE_DOT option below. This is only a +# fallback. It is recommended to install and use dot, since it yields more +# powerful graphs. + +CLASS_DIAGRAMS = YES + +# You can define message sequence charts within doxygen comments using the \msc +# command. Doxygen will then run the mscgen tool (see +# http://www.mcternan.me.uk/mscgen/) to produce the chart and insert it in the +# documentation. The MSCGEN_PATH tag allows you to specify the directory where +# the mscgen tool resides. If left empty the tool is assumed to be found in the +# default search path. + +MSCGEN_PATH = + +# If set to YES, the inheritance and collaboration graphs will hide +# inheritance and usage relations if the target is undocumented +# or is not a class. + +HIDE_UNDOC_RELATIONS = YES + +# If you set the HAVE_DOT tag to YES then doxygen will assume the dot tool is +# available from the path. This tool is part of Graphviz, a graph visualization +# toolkit from AT&T and Lucent Bell Labs. The other options in this section +# have no effect if this option is set to NO (the default) + +HAVE_DOT = NO + +# By default doxygen will write a font called FreeSans.ttf to the output +# directory and reference it in all dot files that doxygen generates. This +# font does not include all possible unicode characters however, so when you need +# these (or just want a differently looking font) you can specify the font name +# using DOT_FONTNAME. You need need to make sure dot is able to find the font, +# which can be done by putting it in a standard location or by setting the +# DOTFONTPATH environment variable or by setting DOT_FONTPATH to the directory +# containing the font. + +DOT_FONTNAME = FreeSans + +# The DOT_FONTSIZE tag can be used to set the size of the font of dot graphs. +# The default size is 10pt. + +DOT_FONTSIZE = 10 + +# By default doxygen will tell dot to use the output directory to look for the +# FreeSans.ttf font (which doxygen will put there itself). If you specify a +# different font using DOT_FONTNAME you can set the path where dot +# can find it using this tag. + +DOT_FONTPATH = + +# If the CLASS_GRAPH and HAVE_DOT tags are set to YES then doxygen +# will generate a graph for each documented class showing the direct and +# indirect inheritance relations. Setting this tag to YES will force the +# the CLASS_DIAGRAMS tag to NO. + +CLASS_GRAPH = YES + +# If the COLLABORATION_GRAPH and HAVE_DOT tags are set to YES then doxygen +# will generate a graph for each documented class showing the direct and +# indirect implementation dependencies (inheritance, containment, and +# class references variables) of the class with other documented classes. + +COLLABORATION_GRAPH = YES + +# If the GROUP_GRAPHS and HAVE_DOT tags are set to YES then doxygen +# will generate a graph for groups, showing the direct groups dependencies + +GROUP_GRAPHS = YES + +# If the UML_LOOK tag is set to YES doxygen will generate inheritance and +# collaboration diagrams in a style similar to the OMG's Unified Modeling +# Language. + +UML_LOOK = NO + +# If set to YES, the inheritance and collaboration graphs will show the +# relations between templates and their instances. + +TEMPLATE_RELATIONS = NO + +# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDE_GRAPH, and HAVE_DOT +# tags are set to YES then doxygen will generate a graph for each documented +# file showing the direct and indirect include dependencies of the file with +# other documented files. + +INCLUDE_GRAPH = YES + +# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDED_BY_GRAPH, and +# HAVE_DOT tags are set to YES then doxygen will generate a graph for each +# documented header file showing the documented files that directly or +# indirectly include this file. + +INCLUDED_BY_GRAPH = YES + +# If the CALL_GRAPH and HAVE_DOT options are set to YES then +# doxygen will generate a call dependency graph for every global function +# or class method. Note that enabling this option will significantly increase +# the time of a run. So in most cases it will be better to enable call graphs +# for selected functions only using the \callgraph command. + +CALL_GRAPH = NO + +# If the CALLER_GRAPH and HAVE_DOT tags are set to YES then +# doxygen will generate a caller dependency graph for every global function +# or class method. Note that enabling this option will significantly increase +# the time of a run. So in most cases it will be better to enable caller +# graphs for selected functions only using the \callergraph command. + +CALLER_GRAPH = NO + +# If the GRAPHICAL_HIERARCHY and HAVE_DOT tags are set to YES then doxygen +# will graphical hierarchy of all classes instead of a textual one. + +GRAPHICAL_HIERARCHY = YES + +# If the DIRECTORY_GRAPH, SHOW_DIRECTORIES and HAVE_DOT tags are set to YES +# then doxygen will show the dependencies a directory has on other directories +# in a graphical way. The dependency relations are determined by the #include +# relations between the files in the directories. + +DIRECTORY_GRAPH = YES + +# The DOT_IMAGE_FORMAT tag can be used to set the image format of the images +# generated by dot. Possible values are png, jpg, or gif +# If left blank png will be used. + +DOT_IMAGE_FORMAT = png + +# The tag DOT_PATH can be used to specify the path where the dot tool can be +# found. If left blank, it is assumed the dot tool can be found in the path. + +DOT_PATH = + +# The DOTFILE_DIRS tag can be used to specify one or more directories that +# contain dot files that are included in the documentation (see the +# \dotfile command). + +DOTFILE_DIRS = + +# The DOT_GRAPH_MAX_NODES tag can be used to set the maximum number of +# nodes that will be shown in the graph. If the number of nodes in a graph +# becomes larger than this value, doxygen will truncate the graph, which is +# visualized by representing a node as a red box. Note that doxygen if the +# number of direct children of the root node in a graph is already larger than +# DOT_GRAPH_MAX_NODES then the graph will not be shown at all. Also note +# that the size of a graph can be further restricted by MAX_DOT_GRAPH_DEPTH. + +DOT_GRAPH_MAX_NODES = 50 + +# The MAX_DOT_GRAPH_DEPTH tag can be used to set the maximum depth of the +# graphs generated by dot. A depth value of 3 means that only nodes reachable +# from the root by following a path via at most 3 edges will be shown. Nodes +# that lay further from the root node will be omitted. Note that setting this +# option to 1 or 2 may greatly reduce the computation time needed for large +# code bases. Also note that the size of a graph can be further restricted by +# DOT_GRAPH_MAX_NODES. Using a depth of 0 means no depth restriction. + +MAX_DOT_GRAPH_DEPTH = 0 + +# Set the DOT_TRANSPARENT tag to YES to generate images with a transparent +# background. This is disabled by default, because dot on Windows does not +# seem to support this out of the box. Warning: Depending on the platform used, +# enabling this option may lead to badly anti-aliased labels on the edges of +# a graph (i.e. they become hard to read). + +DOT_TRANSPARENT = NO + +# Set the DOT_MULTI_TARGETS tag to YES allow dot to generate multiple output +# files in one run (i.e. multiple -o and -T options on the command line). This +# makes dot run faster, but since only newer versions of dot (>1.8.10) +# support this, this feature is disabled by default. + +DOT_MULTI_TARGETS = NO + +# If the GENERATE_LEGEND tag is set to YES (the default) Doxygen will +# generate a legend page explaining the meaning of the various boxes and +# arrows in the dot generated graphs. + +GENERATE_LEGEND = YES + +# If the DOT_CLEANUP tag is set to YES (the default) Doxygen will +# remove the intermediate dot files that are used to generate +# the various graphs. + +DOT_CLEANUP = YES + +#--------------------------------------------------------------------------- +# Options related to the search engine +#--------------------------------------------------------------------------- + +# The SEARCHENGINE tag specifies whether or not a search engine should be +# used. If set to NO the values of all tags below this one will be ignored. + +SEARCHENGINE = NO diff --git a/guidoar-dev/guidocalculus/LICENSE.LGPL b/guidoar-dev/guidocalculus/LICENSE.LGPL new file mode 100644 index 000000000..5ab7695ab --- /dev/null +++ b/guidoar-dev/guidocalculus/LICENSE.LGPL @@ -0,0 +1,504 @@ + GNU LESSER GENERAL PUBLIC LICENSE + Version 2.1, February 1999 + + Copyright (C) 1991, 1999 Free Software Foundation, Inc. + 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + +[This is the first released version of the Lesser GPL. It also counts + as the successor of the GNU Library Public License, version 2, hence + the version number 2.1.] + + Preamble + + The licenses for most software are designed to take away your +freedom to share and change it. By contrast, the GNU General Public +Licenses are intended to guarantee your freedom to share and change +free software--to make sure the software is free for all its users. + + This license, the Lesser General Public License, applies to some +specially designated software packages--typically libraries--of the +Free Software Foundation and other authors who decide to use it. You +can use it too, but we suggest you first think carefully about whether +this license or the ordinary General Public License is the better +strategy to use in any particular case, based on the explanations below. + + When we speak of free software, we are referring to freedom of use, +not price. Our General Public Licenses are designed to make sure that +you have the freedom to distribute copies of free software (and charge +for this service if you wish); that you receive source code or can get +it if you want it; that you can change the software and use pieces of +it in new free programs; and that you are informed that you can do +these things. + + To protect your rights, we need to make restrictions that forbid +distributors to deny you these rights or to ask you to surrender these +rights. These restrictions translate to certain responsibilities for +you if you distribute copies of the library or if you modify it. + + For example, if you distribute copies of the library, whether gratis +or for a fee, you must give the recipients all the rights that we gave +you. You must make sure that they, too, receive or can get the source +code. If you link other code with the library, you must provide +complete object files to the recipients, so that they can relink them +with the library after making changes to the library and recompiling +it. And you must show them these terms so they know their rights. + + We protect your rights with a two-step method: (1) we copyright the +library, and (2) we offer you this license, which gives you legal +permission to copy, distribute and/or modify the library. + + To protect each distributor, we want to make it very clear that +there is no warranty for the free library. Also, if the library is +modified by someone else and passed on, the recipients should know +that what they have is not the original version, so that the original +author's reputation will not be affected by problems that might be +introduced by others. + + Finally, software patents pose a constant threat to the existence of +any free program. We wish to make sure that a company cannot +effectively restrict the users of a free program by obtaining a +restrictive license from a patent holder. Therefore, we insist that +any patent license obtained for a version of the library must be +consistent with the full freedom of use specified in this license. + + Most GNU software, including some libraries, is covered by the +ordinary GNU General Public License. This license, the GNU Lesser +General Public License, applies to certain designated libraries, and +is quite different from the ordinary General Public License. We use +this license for certain libraries in order to permit linking those +libraries into non-free programs. + + When a program is linked with a library, whether statically or using +a shared library, the combination of the two is legally speaking a +combined work, a derivative of the original library. The ordinary +General Public License therefore permits such linking only if the +entire combination fits its criteria of freedom. The Lesser General +Public License permits more lax criteria for linking other code with +the library. + + We call this license the "Lesser" General Public License because it +does Less to protect the user's freedom than the ordinary General +Public License. It also provides other free software developers Less +of an advantage over competing non-free programs. These disadvantages +are the reason we use the ordinary General Public License for many +libraries. However, the Lesser license provides advantages in certain +special circumstances. + + For example, on rare occasions, there may be a special need to +encourage the widest possible use of a certain library, so that it becomes +a de-facto standard. To achieve this, non-free programs must be +allowed to use the library. A more frequent case is that a free +library does the same job as widely used non-free libraries. In this +case, there is little to gain by limiting the free library to free +software only, so we use the Lesser General Public License. + + In other cases, permission to use a particular library in non-free +programs enables a greater number of people to use a large body of +free software. For example, permission to use the GNU C Library in +non-free programs enables many more people to use the whole GNU +operating system, as well as its variant, the GNU/Linux operating +system. + + Although the Lesser General Public License is Less protective of the +users' freedom, it does ensure that the user of a program that is +linked with the Library has the freedom and the wherewithal to run +that program using a modified version of the Library. + + The precise terms and conditions for copying, distribution and +modification follow. Pay close attention to the difference between a +"work based on the library" and a "work that uses the library". The +former contains code derived from the library, whereas the latter must +be combined with the library in order to run. + + GNU LESSER GENERAL PUBLIC LICENSE + TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION + + 0. This License Agreement applies to any software library or other +program which contains a notice placed by the copyright holder or +other authorized party saying it may be distributed under the terms of +this Lesser General Public License (also called "this License"). +Each licensee is addressed as "you". + + A "library" means a collection of software functions and/or data +prepared so as to be conveniently linked with application programs +(which use some of those functions and data) to form executables. + + The "Library", below, refers to any such software library or work +which has been distributed under these terms. A "work based on the +Library" means either the Library or any derivative work under +copyright law: that is to say, a work containing the Library or a +portion of it, either verbatim or with modifications and/or translated +straightforwardly into another language. (Hereinafter, translation is +included without limitation in the term "modification".) + + "Source code" for a work means the preferred form of the work for +making modifications to it. For a library, complete source code means +all the source code for all modules it contains, plus any associated +interface definition files, plus the scripts used to control compilation +and installation of the library. + + Activities other than copying, distribution and modification are not +covered by this License; they are outside its scope. The act of +running a program using the Library is not restricted, and output from +such a program is covered only if its contents constitute a work based +on the Library (independent of the use of the Library in a tool for +writing it). Whether that is true depends on what the Library does +and what the program that uses the Library does. + + 1. You may copy and distribute verbatim copies of the Library's +complete source code as you receive it, in any medium, provided that +you conspicuously and appropriately publish on each copy an +appropriate copyright notice and disclaimer of warranty; keep intact +all the notices that refer to this License and to the absence of any +warranty; and distribute a copy of this License along with the +Library. + + You may charge a fee for the physical act of transferring a copy, +and you may at your option offer warranty protection in exchange for a +fee. + + 2. You may modify your copy or copies of the Library or any portion +of it, thus forming a work based on the Library, and copy and +distribute such modifications or work under the terms of Section 1 +above, provided that you also meet all of these conditions: + + a) The modified work must itself be a software library. + + b) You must cause the files modified to carry prominent notices + stating that you changed the files and the date of any change. + + c) You must cause the whole of the work to be licensed at no + charge to all third parties under the terms of this License. + + d) If a facility in the modified Library refers to a function or a + table of data to be supplied by an application program that uses + the facility, other than as an argument passed when the facility + is invoked, then you must make a good faith effort to ensure that, + in the event an application does not supply such function or + table, the facility still operates, and performs whatever part of + its purpose remains meaningful. + + (For example, a function in a library to compute square roots has + a purpose that is entirely well-defined independent of the + application. Therefore, Subsection 2d requires that any + application-supplied function or table used by this function must + be optional: if the application does not supply it, the square + root function must still compute square roots.) + +These requirements apply to the modified work as a whole. If +identifiable sections of that work are not derived from the Library, +and can be reasonably considered independent and separate works in +themselves, then this License, and its terms, do not apply to those +sections when you distribute them as separate works. But when you +distribute the same sections as part of a whole which is a work based +on the Library, the distribution of the whole must be on the terms of +this License, whose permissions for other licensees extend to the +entire whole, and thus to each and every part regardless of who wrote +it. + +Thus, it is not the intent of this section to claim rights or contest +your rights to work written entirely by you; rather, the intent is to +exercise the right to control the distribution of derivative or +collective works based on the Library. + +In addition, mere aggregation of another work not based on the Library +with the Library (or with a work based on the Library) on a volume of +a storage or distribution medium does not bring the other work under +the scope of this License. + + 3. You may opt to apply the terms of the ordinary GNU General Public +License instead of this License to a given copy of the Library. To do +this, you must alter all the notices that refer to this License, so +that they refer to the ordinary GNU General Public License, version 2, +instead of to this License. (If a newer version than version 2 of the +ordinary GNU General Public License has appeared, then you can specify +that version instead if you wish.) Do not make any other change in +these notices. + + Once this change is made in a given copy, it is irreversible for +that copy, so the ordinary GNU General Public License applies to all +subsequent copies and derivative works made from that copy. + + This option is useful when you wish to copy part of the code of +the Library into a program that is not a library. + + 4. You may copy and distribute the Library (or a portion or +derivative of it, under Section 2) in object code or executable form +under the terms of Sections 1 and 2 above provided that you accompany +it with the complete corresponding machine-readable source code, which +must be distributed under the terms of Sections 1 and 2 above on a +medium customarily used for software interchange. + + If distribution of object code is made by offering access to copy +from a designated place, then offering equivalent access to copy the +source code from the same place satisfies the requirement to +distribute the source code, even though third parties are not +compelled to copy the source along with the object code. + + 5. A program that contains no derivative of any portion of the +Library, but is designed to work with the Library by being compiled or +linked with it, is called a "work that uses the Library". Such a +work, in isolation, is not a derivative work of the Library, and +therefore falls outside the scope of this License. + + However, linking a "work that uses the Library" with the Library +creates an executable that is a derivative of the Library (because it +contains portions of the Library), rather than a "work that uses the +library". The executable is therefore covered by this License. +Section 6 states terms for distribution of such executables. + + When a "work that uses the Library" uses material from a header file +that is part of the Library, the object code for the work may be a +derivative work of the Library even though the source code is not. +Whether this is true is especially significant if the work can be +linked without the Library, or if the work is itself a library. The +threshold for this to be true is not precisely defined by law. + + If such an object file uses only numerical parameters, data +structure layouts and accessors, and small macros and small inline +functions (ten lines or less in length), then the use of the object +file is unrestricted, regardless of whether it is legally a derivative +work. (Executables containing this object code plus portions of the +Library will still fall under Section 6.) + + Otherwise, if the work is a derivative of the Library, you may +distribute the object code for the work under the terms of Section 6. +Any executables containing that work also fall under Section 6, +whether or not they are linked directly with the Library itself. + + 6. As an exception to the Sections above, you may also combine or +link a "work that uses the Library" with the Library to produce a +work containing portions of the Library, and distribute that work +under terms of your choice, provided that the terms permit +modification of the work for the customer's own use and reverse +engineering for debugging such modifications. + + You must give prominent notice with each copy of the work that the +Library is used in it and that the Library and its use are covered by +this License. You must supply a copy of this License. If the work +during execution displays copyright notices, you must include the +copyright notice for the Library among them, as well as a reference +directing the user to the copy of this License. Also, you must do one +of these things: + + a) Accompany the work with the complete corresponding + machine-readable source code for the Library including whatever + changes were used in the work (which must be distributed under + Sections 1 and 2 above); and, if the work is an executable linked + with the Library, with the complete machine-readable "work that + uses the Library", as object code and/or source code, so that the + user can modify the Library and then relink to produce a modified + executable containing the modified Library. (It is understood + that the user who changes the contents of definitions files in the + Library will not necessarily be able to recompile the application + to use the modified definitions.) + + b) Use a suitable shared library mechanism for linking with the + Library. A suitable mechanism is one that (1) uses at run time a + copy of the library already present on the user's computer system, + rather than copying library functions into the executable, and (2) + will operate properly with a modified version of the library, if + the user installs one, as long as the modified version is + interface-compatible with the version that the work was made with. + + c) Accompany the work with a written offer, valid for at + least three years, to give the same user the materials + specified in Subsection 6a, above, for a charge no more + than the cost of performing this distribution. + + d) If distribution of the work is made by offering access to copy + from a designated place, offer equivalent access to copy the above + specified materials from the same place. + + e) Verify that the user has already received a copy of these + materials or that you have already sent this user a copy. + + For an executable, the required form of the "work that uses the +Library" must include any data and utility programs needed for +reproducing the executable from it. However, as a special exception, +the materials to be distributed need not include anything that is +normally distributed (in either source or binary form) with the major +components (compiler, kernel, and so on) of the operating system on +which the executable runs, unless that component itself accompanies +the executable. + + It may happen that this requirement contradicts the license +restrictions of other proprietary libraries that do not normally +accompany the operating system. Such a contradiction means you cannot +use both them and the Library together in an executable that you +distribute. + + 7. You may place library facilities that are a work based on the +Library side-by-side in a single library together with other library +facilities not covered by this License, and distribute such a combined +library, provided that the separate distribution of the work based on +the Library and of the other library facilities is otherwise +permitted, and provided that you do these two things: + + a) Accompany the combined library with a copy of the same work + based on the Library, uncombined with any other library + facilities. This must be distributed under the terms of the + Sections above. + + b) Give prominent notice with the combined library of the fact + that part of it is a work based on the Library, and explaining + where to find the accompanying uncombined form of the same work. + + 8. You may not copy, modify, sublicense, link with, or distribute +the Library except as expressly provided under this License. Any +attempt otherwise to copy, modify, sublicense, link with, or +distribute the Library is void, and will automatically terminate your +rights under this License. However, parties who have received copies, +or rights, from you under this License will not have their licenses +terminated so long as such parties remain in full compliance. + + 9. You are not required to accept this License, since you have not +signed it. However, nothing else grants you permission to modify or +distribute the Library or its derivative works. These actions are +prohibited by law if you do not accept this License. Therefore, by +modifying or distributing the Library (or any work based on the +Library), you indicate your acceptance of this License to do so, and +all its terms and conditions for copying, distributing or modifying +the Library or works based on it. + + 10. Each time you redistribute the Library (or any work based on the +Library), the recipient automatically receives a license from the +original licensor to copy, distribute, link with or modify the Library +subject to these terms and conditions. You may not impose any further +restrictions on the recipients' exercise of the rights granted herein. +You are not responsible for enforcing compliance by third parties with +this License. + + 11. If, as a consequence of a court judgment or allegation of patent +infringement or for any other reason (not limited to patent issues), +conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot +distribute so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you +may not distribute the Library at all. For example, if a patent +license would not permit royalty-free redistribution of the Library by +all those who receive copies directly or indirectly through you, then +the only way you could satisfy both it and this License would be to +refrain entirely from distribution of the Library. + +If any portion of this section is held invalid or unenforceable under any +particular circumstance, the balance of the section is intended to apply, +and the section as a whole is intended to apply in other circumstances. + +It is not the purpose of this section to induce you to infringe any +patents or other property right claims or to contest validity of any +such claims; this section has the sole purpose of protecting the +integrity of the free software distribution system which is +implemented by public license practices. Many people have made +generous contributions to the wide range of software distributed +through that system in reliance on consistent application of that +system; it is up to the author/donor to decide if he or she is willing +to distribute software through any other system and a licensee cannot +impose that choice. + +This section is intended to make thoroughly clear what is believed to +be a consequence of the rest of this License. + + 12. If the distribution and/or use of the Library is restricted in +certain countries either by patents or by copyrighted interfaces, the +original copyright holder who places the Library under this License may add +an explicit geographical distribution limitation excluding those countries, +so that distribution is permitted only in or among countries not thus +excluded. In such case, this License incorporates the limitation as if +written in the body of this License. + + 13. The Free Software Foundation may publish revised and/or new +versions of the Lesser General Public License from time to time. +Such new versions will be similar in spirit to the present version, +but may differ in detail to address new problems or concerns. + +Each version is given a distinguishing version number. If the Library +specifies a version number of this License which applies to it and +"any later version", you have the option of following the terms and +conditions either of that version or of any later version published by +the Free Software Foundation. If the Library does not specify a +license version number, you may choose any version ever published by +the Free Software Foundation. + + 14. If you wish to incorporate parts of the Library into other free +programs whose distribution conditions are incompatible with these, +write to the author to ask for permission. For software which is +copyrighted by the Free Software Foundation, write to the Free +Software Foundation; we sometimes make exceptions for this. Our +decision will be guided by the two goals of preserving the free status +of all derivatives of our free software and of promoting the sharing +and reuse of software generally. + + NO WARRANTY + + 15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO +WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW. +EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR +OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY +KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE +LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME +THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. + + 16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN +WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY +AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU +FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR +CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE +LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING +RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A +FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF +SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH +DAMAGES. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Libraries + + If you develop a new library, and you want it to be of the greatest +possible use to the public, we recommend making it free software that +everyone can redistribute and change. You can do so by permitting +redistribution under these terms (or, alternatively, under the terms of the +ordinary General Public License). + + To apply these terms, attach the following notices to the library. It is +safest to attach them to the start of each source file to most effectively +convey the exclusion of warranty; and each file should have at least the +"copyright" line and a pointer to where the full notice is found. + + + Copyright (C) + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + +Also add information on how to contact you by electronic and paper mail. + +You should also get your employer (if you work as a programmer) or your +school, if any, to sign a "copyright disclaimer" for the library, if +necessary. Here is a sample; alter the names: + + Yoyodyne, Inc., hereby disclaims all copyright interest in the + library `Frob' (a library for tweaking knobs) written by James Random Hacker. + + , 1 April 1990 + Ty Coon, President of Vice + +That's all there is to it! + + diff --git a/guidoar-dev/guidocalculus/package/makefile b/guidoar-dev/guidocalculus/package/makefile new file mode 100644 index 000000000..be95aa6e0 --- /dev/null +++ b/guidoar-dev/guidocalculus/package/makefile @@ -0,0 +1,24 @@ +start: + @ echo "Target list : " + @ echo " macos : bundles GuidoCalculus" + @ echo " win32 : TODO" + @ echo " linux : TODO" + +#include makeBundle + +APP_PATH := ../bin +APP := GuidoCalculus +QT_PLUGIN_PATH := /Developer/Applications/Qt/plugins/ +QT_FRAMEWORK_PATH := /Library/Frameworks +GUIDOLIB = ../../../guidolib/cmake/Release + +striplist = $(shell find $(APP).app -name "*_debug*") + +macos: + -[ -d $(APP).app ] && rm -rf $(APP).app + cp -r ../bin/$(APP).app . + macdeployqt GuidoCalculus.app + + +strip: + rm -rf $(striplist) diff --git a/guidoar-dev/guidocalculus/readme.txt b/guidoar-dev/guidocalculus/readme.txt new file mode 100644 index 000000000..49ffe852f --- /dev/null +++ b/guidoar-dev/guidocalculus/readme.txt @@ -0,0 +1,14 @@ +---------------------------------------------------------------- + GuidoCalculus + (c) Grame 2009-2012 + fober@grame.fr +---------------------------------------------------------------- + +This application is based on Qt. +In addition to the guidoar library, it makes use of the following guido components: + - GUIDOEngine library + - GuidoQt library + - GraphicsSceneMainWindow library +The project (.pro) is setup to refer to the guido library at ../../../guidolib +i.e. the guido library repository should be at the same level than the guidoar library. + diff --git a/guidoar-dev/guidocalculus/src/GUI/MainWindow.cpp b/guidoar-dev/guidocalculus/src/GUI/MainWindow.cpp new file mode 100644 index 000000000..8b4670abd --- /dev/null +++ b/guidoar-dev/guidocalculus/src/GUI/MainWindow.cpp @@ -0,0 +1,943 @@ +/* + * MainWindow.cpp + * + * Created by Christophe Daudin on 12/05/09. + * Copyright 2009 Grame. All rights reserved. + * + * GNU Lesser General Public License Usage + * Alternatively, this file may be used under the terms of the GNU Lesser + * General Public License version 2.1 as published by the Free Software + * Foundation and appearing in the file LICENSE.LGPL included in the + * packaging of this file. Please review the following information to + * ensure the GNU Lesser General Public License version 2.1 requirements + * will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. + * + * + * This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE + * WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + */ +#include "MainWindow.h" + +#include "QGuidoPainter.h" +#include "QSimpleItemContainer.h" +#include "QGuidoItemContainerFactory.h" +#include "QGuidoItemContainer.h" + +#include "MainWindowObjects.h" +#include "QResolutionDialog.h" +#include "GuidoHighlighter.h" +#include "QItemResizer.h" +#include "QPaletteItem.h" + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#ifdef USES_GUIDO_AR + #include "QGuidoAR.h" +#endif + +#ifdef GUIDO_CALCULUS_APP +#define APP_NAME "GuidoCalculus" +#else +#define APP_NAME "GuidoSceneComposer" +#endif + +#include + +#define DEFAULT_DISPLAY_TYPE QGuidoItemContainerFactory::TYPE_M_PAGE + +#define RESIZER_BORDER_WIDTH 5 + +#include "QPageManager.h" + +//----------------------------------------------------------------------- +MainWindow::MainWindow() + : GraphicsSceneMainWindow( new GuidoGraphicsView() , new QGuidoItemContainerFactory() ) +{ + //Dynamic plugin load. + QDir dir(QApplication::applicationDirPath()); + dir.cdUp(); + dir.cd("Plugins"); + QCoreApplication::addLibraryPath( dir.absolutePath()); + + mGraphicsView->setRenderHint( QPainter::Antialiasing , true ); + + //Guido Engine initialization. + QGuidoPainter::startGuidoEngine(); + + mIsWorkspaceModeOn = false; + GraphicsSceneMainWindow::init(); + + mGuidoItemContainerFactory = (QGuidoItemContainerFactory*)mFactory; + mExportState = None; + mExportWindow = 0; + + mLanguageTextEdit->setLineWrapMode(QTextEdit::NoWrap); + +#ifdef USES_GUIDO_AR + mPlayingContainer = 0; + + //Add the QPaletteItem-s + QPaletteItem * paletteItem; + //Sum palette + paletteItem = new QPaletteItem( PALETTE_GUIDO_ELEMENT , 100 , 0); + paletteItem->addInteraction( buildPixmapItem(RSC_DIR + "combiAfter.png" ) , COMBINATION_AFTER ); + paletteItem->addInteraction( buildPixmapItem(RSC_DIR + "combiOverEnd.png" ) , COMBINATION_OVER_ALIGN_RIGHT ); + paletteItem->addInteraction( buildPixmapItem(RSC_DIR + "combiOverStart.png" ) , COMBINATION_OVER_ALIGN_LEFT ); + paletteItem->addInteraction( buildPixmapItem(RSC_DIR + "combiBefore.png" ) , COMBINATION_BEFORE ); + paletteItem->addInteraction( buildPixmapItem(RSC_DIR + "combiUnderStart.png" ) , COMBINATION_UNDER_ALIGN_LEFT ); + paletteItem->addInteraction( buildPixmapItem(RSC_DIR + "combiUnderEnd.png" ) , COMBINATION_UNDER_ALIGN_RIGHT ); + mPalettes << paletteItem; + //Selection palette + paletteItem = new QPaletteItem( PALETTE_GUIDO_ELEMENT , 100 , 0); + paletteItem->addInteraction( new QGraphicsSimpleTextItem("Tail") , COMBINATION_TAIL ); + paletteItem->addInteraction( new QGraphicsSimpleTextItem("Voice Head") , COMBINATION_VOICE_HEAD ); + paletteItem->addInteraction( new QGraphicsSimpleTextItem("Head") , COMBINATION_HEAD ); + paletteItem->addInteraction( new QGraphicsSimpleTextItem("Voice tail") , COMBINATION_VOICE_TAIL ); + mPalettes << paletteItem; + //Selection palette + paletteItem = new QPaletteItem( PALETTE_GUIDO_ELEMENT , 100 , 0); + paletteItem->addInteraction( new QGraphicsSimpleTextItem("Transpose") , COMBINATION_TRANSPOSE ); + paletteItem->addInteraction( new QGraphicsSimpleTextItem("Stretch") , COMBINATION_DURATION ); + paletteItem->addInteraction( new QGraphicsSimpleTextItem("Rythm") , COMBINATION_RYTHM ); + paletteItem->addInteraction( new QGraphicsSimpleTextItem("Note") , COMBINATION_PITCH ); + mPalettes << paletteItem; + + for ( int i = 0 ; i < mPalettes.size() ; i++ ) + { + //Set each palette pen & brush + mPalettes[i]->setBrush( HIGHLIGHTED_BRUSH ); + QPen palettePen( HIGHLIGHTED_PEN ); + palettePen.setWidth( palettePen.width() * 2 ); + mPalettes[i]->setPen( palettePen ); + mGraphicsScene->addItem( mPalettes[i] ); + + //Desactivate each palette (its activation will be done according to the palette combobox selected item) + mPalettes[i]->setPaletteEnabled( false ); + + //Palette's positioning policy + mPalettes[i]->setPositioningPolicy(QPaletteItem::CENTER_AND_RESIZE_POLICY); + } + + QPaletteManager::instance()->setActivationDelay(500); + connect( QPaletteManager::instance() , SIGNAL(interactionActivated(QGraphicsItem*,QGraphicsItem*,int,int,int)) , this , SLOT( combineItems(QGraphicsItem*,QGraphicsItem*,int,int,int) ) ); + changeActivePalette(0); +#endif + + adaptActions(); + + mGuidoHighlighter = 0; +} + +//----------------------------------------------------------------------- +MainWindow::~MainWindow() +{ + QGuidoPainter::stopGuidoEngine(); +} + +//----------------------------------------------------------------------- +void MainWindow::adaptActions() +{ + mAddAct->setIcon(QIcon(RSC_DIR + QString("addGuido.png"))); + mAddAct->setText( tr("Add Guido item") ); + mAddAct->setStatusTip(tr("Add a Guido item to the scene")); + mAddFromFileAct->setIcon(QIcon(RSC_DIR + QString("addFromFileGuido.png"))); +// mAddFromFileAct->setStatusTip(tr("Add a new GMN graphics item from a GMN file")); + mRemoveAct->setIcon(QIcon(RSC_DIR + QString("removeItem.png"))); +// mRemoveAct->setStatusTip(tr("Remove the selected GMN graphics items")); +// mCopyAct->setStatusTip(tr("Copy the selected GMN graphics items")); +} + +//-----------------------------------------------------------------------// +// Private slots // +//-----------------------------------------------------------------------// + +#define EXPORT_SELECTED_ITEMS "Export selected item(s)" +#define EXPORT_THE_SCENE "Export scene" +//------------------------------------------------------------------------- +void MainWindow::exportToImage() +{ + QList selectedItems = selectedLanguageItems(); + + if ( mExportWindow ) + finalizeExport(false); + else if ( selectedItems.size() > 0 ) + { + QStringList comboboxItems; + comboboxItems << tr(EXPORT_SELECTED_ITEMS) << tr(EXPORT_THE_SCENE); + + bool ok; + QString item = QInputDialog::getItem(this, tr("Export to image ..."), + tr("What would you like to export ?"), comboboxItems, 0, false, &ok); + if (ok && !item.isEmpty()) + { + if ( item == EXPORT_SELECTED_ITEMS ) + { + if ( selectedItems.size() == 1 ) + exportFirstItem(); + else + { + QRectF exportRect; + int i; + QList containers = languageItems(); + for ( i = 0 ; i < containers.size() ; i++ ) + { + if ( !containers[i]->isSelected() ) + containers[i]->setVisible(false); + else + exportRect |= containers[i]->sceneBoundingRect(); + } + + exportRectDialog( exportRect ); + + for ( i = 0 ; i < containers.size() ; i++ ) + { + if ( !containers[i]->isSelected() ) + containers[i]->setVisible(true); + } + } + + } + else if ( item == EXPORT_THE_SCENE ) + { + exportRectDialog( mBackgroundItem->pageRectInSceneCoords() ); + } + } + } + else + exportRectDialog( mBackgroundItem->pageRectInSceneCoords() ); +} + +//------------------------------------------------------------------------- +void MainWindow::about() +{ + QMessageBox::about(this, tr(QString("About " + QString(APP_NAME)).toUtf8().data()), + tr(QString("The "+ QString(APP_NAME)+" allows you to compose a graphics scene " + + "made of GUIDO Scores.").toUtf8().data())); +} + +//------------------------------------------------------------------------- +void MainWindow::itemRemoved( QLanguageItem * item ) +{ + GraphicsSceneMainWindow::itemRemoved( item ); +#ifdef USES_GUIDO_AR + controlPlayingContainer( item ); +#endif +} + +//------------------------------------------------------------------------- +void MainWindow::addTextItem() +{ + QLanguageItem* languageItem = mGuidoItemContainerFactory->buildSimpleTextItemContainer(); + languageItem->setCode( "A text item" ); + setupNAddNewItem( languageItem ); + setupItemFromMenu( languageItem ); + +} + +//------------------------------------------------------------------------- +void MainWindow::addItemFromAnyFile() +{ + QString fileName = QFileDialog::getOpenFileName( + this, QString("Add an item from a file"), + getFileDialogPath(), + tr("All (*.*)")); + + // Create the item with the file + QLanguageItem* createdItem = 0; + // Add & setup the created item + if ( addFile( fileName , &createdItem ) ) + setupItemFromMenu( createdItem ); +} + +#define A4_LITTLE 210 +#define A4_BIG 297 +//------------------------------------------------------------------------- +void MainWindow::setPageA4Portrait() +{ + mBackgroundItem->setPageSize(QSizeF( A4_LITTLE , A4_BIG )); + mBackgroundItem->setResizeEnabled( false ); +} + +//------------------------------------------------------------------------- +void MainWindow::setPageA3Portrait() +{ + mBackgroundItem->setPageSize(QSizeF( 2*A4_LITTLE , 2*A4_BIG )); + mBackgroundItem->setResizeEnabled( false ); +} + +//------------------------------------------------------------------------- +void MainWindow::setPageA4Landscape() +{ + mBackgroundItem->setPageSize(QSizeF( A4_BIG , A4_LITTLE )); + mBackgroundItem->setResizeEnabled( false ); +} + +//------------------------------------------------------------------------- +void MainWindow::setPageA3Landscape() +{ + mBackgroundItem->setPageSize(QSizeF( 2*A4_BIG , 2*A4_LITTLE )); + mBackgroundItem->setResizeEnabled( false ); +} + +#ifdef USES_GUIDO_AR +//------------------------------------------------------------------------- +void MainWindow::playItem() +{ + if ( !dynamic_cast(mFirstSelectedItem) ) + return; + + if ( mPlayingContainer != mFirstSelectedItem ) + { + // An item has already been played, without being explicitely stopped. + stopItem(); + } + + ((QGuidoItemContainer*)mFirstSelectedItem)->play(); + + mPlayingContainer = mFirstSelectedItem; + + mPauseAct->setEnabled( true ); + mStopAct->setEnabled( true ); +} + +//------------------------------------------------------------------------- +void MainWindow::pauseItem() +{ + if ( mPlayingContainer ) + { + ((QGuidoItemContainer*)mPlayingContainer)->pause(); + mPauseAct->setEnabled( false ); + } +} + +//------------------------------------------------------------------------- +void MainWindow::stopItem() +{ + if ( mPlayingContainer ) + { + ((QGuidoItemContainer*)mPlayingContainer)->stop(); + mPlayingContainer = 0; + mPauseAct->setEnabled( false ); + mStopAct->setEnabled( false ); + } +} + +//------------------------------------------------------------------------- +void MainWindow::exportItemToMidi() +{ + QLanguageItem * container = dynamic_cast( sender() ); + assert(container); + + QString savePath; + if ( container->file().length() ) + savePath = QFileInfo( container->file() ).absolutePath(); + if ( savePath == "" ) + savePath = windowFilePath(); + if ( savePath == "" ) + savePath = QDir::homePath(); + + savePath += "/" + container->name(); + + QString filters = MIDI_FILE_FILTER; + + QString selectedFilter(""); + QString fileName = QFileDialog::getSaveFileName(this, tr("Export item"), + savePath, + tr(filters.toUtf8().data()) , + &selectedFilter); + + if ( fileName.isEmpty() ) + return; + + formatFileName(fileName,selectedFilter,filters); + + QGuidoAR::midiExport(container->code() , fileName ); +} + +//------------------------------------------------------------------------- +void MainWindow::combineItems( QGraphicsItem * droppedItem , QGraphicsItem* targetItem , int,int, int interactionId ) +{ + QGuidoItemContainer * itemA = dynamic_cast(targetItem); + QGuidoItemContainer * itemB = dynamic_cast(droppedItem); + if ( !itemA || !itemB ) + return; + + //Asking for building a new QGuidoItem or QGuidoSPageItem (depending on "isPageMode" parameter) + QString gmnCode; + switch ( interactionId ) + { + case COMBINATION_UNDER_ALIGN_LEFT : + gmnCode = QGuidoAR::parallel( itemA->code() , itemB->code() , QGuidoAR::Left ); + break; + case COMBINATION_UNDER_ALIGN_RIGHT : + gmnCode = QGuidoAR::parallel( itemA->code() , itemB->code() , QGuidoAR::Right ); + break; + case COMBINATION_OVER_ALIGN_LEFT : + gmnCode = QGuidoAR::parallel( itemB->code() , itemA->code() , QGuidoAR::Left ); + break; + case COMBINATION_OVER_ALIGN_RIGHT : + gmnCode = QGuidoAR::parallel( itemB->code() , itemA->code() , QGuidoAR::Right ); + break; + case COMBINATION_BEFORE : + gmnCode = QGuidoAR::sequence( itemB->code() , itemA->code() ); + break; + case COMBINATION_AFTER : + gmnCode = QGuidoAR::sequence( itemA->code() , itemB->code() ); + break; + case COMBINATION_HEAD : + gmnCode = QGuidoAR::head( itemA->code() , itemB->code() ); + break; + case COMBINATION_TAIL : + gmnCode = QGuidoAR::tail( itemA->code() , itemB->code() ); + break; + case COMBINATION_VOICE_HEAD : + gmnCode = QGuidoAR::top( itemA->code() , itemB->code() ); + break; + case COMBINATION_VOICE_TAIL : + gmnCode = QGuidoAR::bottom( itemA->code() , itemB->code() ); + break; + case COMBINATION_INTERLEAVE : + gmnCode = QGuidoAR::interleave( itemA->code() , itemB->code() ); + break; + case COMBINATION_TRANSPOSE : + gmnCode = QGuidoAR::transpose( itemA->code() , itemB->code() ); + break; + case COMBINATION_DURATION : + gmnCode = QGuidoAR::duration( itemA->code() , itemB->code() ); + break; + case COMBINATION_RYTHM : + gmnCode = QGuidoAR::rythm( itemA->code() , itemB->code() ); + break; + case COMBINATION_PITCH : + gmnCode = QGuidoAR::pitch( itemA->code() , itemB->code() ); + break; + default: + return; + } + + //Set the code of the target item with the code computed by GuidoAR + itemA->setCode( gmnCode ); + + //It's a fusion of 2 items, so we remove the dropped item (only if it was in the main scene: history&storage items are not affected). + if ( itemB->scene() == mGraphicsScene ) + { + itemB->deleteLater(); + itemRemoved( itemB ); + } + unselectAll(); + itemA->setSelected( true ); + + //Don't forget to call QGraphicsSceneMainWindow::addToHistory, because we changed the code + GraphicsSceneMainWindow::addToHistory(itemA); +} + +//------------------------------------------------------------------------- +void MainWindow::changeActivePalette(int index) +{ + for ( int i = 0 ; i < mPalettes.size() ; i++ ) + { + mPalettes[i]->setPaletteEnabled( i == index ); + } +} + +#endif + +//------------------------------------------------------------------------- +void MainWindow::exportItem() +{ + QGuidoItemContainer * item = (QGuidoItemContainer *)sender(); + exportItem( item ); +} + +//-----------------------------------------------------------------------// +// Private functions // +//-----------------------------------------------------------------------// + +//------------------------------------------------------------------------- +void MainWindow::createActions() +{ + mSettings.mDesactiveUIElements << ADD_FROM_FILE_ACT; + + GraphicsSceneMainWindow::createActions(); + + mExportAct = new QAction(QIcon(RSC_DIR + QString("export.png")), tr("&Export...") , this); + mExportAct->setShortcut( tr("Ctrl+E") ); + mExportAct->setStatusTip(tr("Export the scene, an item, or use Shift+Drag&Drop to specify an export-window")); + connect(mExportAct , SIGNAL(triggered()) , this , SLOT(exportToImage()) ); + + mAddTextAct = new QAction(QIcon(RSC_DIR + QString("addText.png")), tr("Add text item") , this); + mAddTextAct->setStatusTip(tr("Add a text item to the scene")); + connect(mAddTextAct , SIGNAL(triggered()) , this , SLOT(addTextItem()) ); + + mAddFromAnyFileAct = new QAction(QIcon(RSC_DIR + QString("addFromAnyFile.png")), tr("Add item from file...") , this); + mAddFromAnyFileAct->setStatusTip("Add a new item from a file"); + connect(mAddFromAnyFileAct , SIGNAL(triggered()) , this , SLOT(addItemFromAnyFile()) ); + + mSetPageA4PortraitAct = new QAction(tr("A4 Portrait") , this); + connect(mSetPageA4PortraitAct , SIGNAL(triggered()) , this , SLOT(setPageA4Portrait()) ); + mSetPageA3PortraitAct = new QAction(tr("A3 Portrait") , this); + connect(mSetPageA3PortraitAct , SIGNAL(triggered()) , this , SLOT(setPageA3Portrait()) ); + mSetPageA4LandscapeAct = new QAction(tr("A4 Landscape") , this); + connect(mSetPageA4LandscapeAct , SIGNAL(triggered()) , this , SLOT(setPageA4Landscape()) ); + mSetPageA3LandscapeAct = new QAction(tr("A3 Landscape") , this); + connect(mSetPageA3LandscapeAct , SIGNAL(triggered()) , this , SLOT(setPageA3Landscape()) ); + +#ifdef USES_GUIDO_AR + mPlayAct = new QAction(style()->standardIcon(QStyle::SP_MediaPlay), tr("Play"), this); + mPlayAct->setStatusTip(tr("Play selected item")); + connect( mPlayAct , SIGNAL(triggered()) , this , SLOT(playItem()) ); + mPauseAct = new QAction(style()->standardIcon(QStyle::SP_MediaPause), tr("Pause"), this); + mPauseAct->setStatusTip(tr("Pause selected item")); + connect( mPauseAct , SIGNAL(triggered()) , this , SLOT(pauseItem()) ); + mStopAct = new QAction(style()->standardIcon(QStyle::SP_MediaStop), tr("Stop"), this); + mStopAct->setStatusTip(tr("Stop selected item")); + connect( mStopAct , SIGNAL(triggered()) , this , SLOT(stopItem()) ); +#endif +} + +//------------------------------------------------------------------------- +void MainWindow::createMenus() +{ + GraphicsSceneMainWindow::createMenus(); + + mFileMenu->addAction(mExportAct); + + mEditMenu->addSeparator(); + QMenu * menu = mEditMenu->addMenu("Page format"); + menu->addAction( mSetPageA4PortraitAct ); + menu->addAction( mSetPageA3PortraitAct ); + menu->addSeparator(); + menu->addAction( mSetPageA4LandscapeAct ); + menu->addAction( mSetPageA3LandscapeAct ); + + mEditMenu->insertAction(mRemoveAct , mAddFromAnyFileAct); + mEditMenu->insertAction(mAddAct , mAddTextAct); +} + +//------------------------------------------------------------------------- +void MainWindow::createToolBars() +{ + GraphicsSceneMainWindow::createToolBars(); + + mFileToolBar->addAction(mExportAct); + + mEditToolBar->insertAction(mRemoveAct , mAddFromAnyFileAct); + mEditToolBar->insertAction(mAddAct , mAddTextAct); + +#ifdef USES_GUIDO_AR + mPlayToolBar = addToolBar(tr("MIDI play")); + mPlayToolBar->addAction( mPlayAct ); + mPlayToolBar->addAction( mPauseAct ); + mPlayToolBar->addAction( mStopAct ); + mPlayToolBar->setObjectName( "PlayToolBar" ); + + mCombinationToolBar = addToolBar(tr("&Combinations")); + mCombinationToolBar->setObjectName("CombinationsToolBar"); + QComboBox * paletteBox = new QComboBox(); + mCombinationToolBar->addWidget(paletteBox); + paletteBox->addItem( "Sum palette" ); + paletteBox->addItem( "Selection palette" ); + paletteBox->addItem( "Complex palette" ); + connect( paletteBox , SIGNAL( currentIndexChanged(int) ) , this , SLOT( changeActivePalette(int) ) ); +#endif +} + +//------------------------------------------------------------------------- +void MainWindow::setupNAddItem(QLanguageItem* guidoItemContainer) +{ + GraphicsSceneMainWindow::setupNAddItem( guidoItemContainer ); + + if ( dynamic_cast (guidoItemContainer) ) + { + connect( guidoItemContainer , SIGNAL(exportItem()) , this, SLOT(exportItem()) ); + ((QGuidoItemContainer*)guidoItemContainer)->setMinMaxScale( mSettings.mMinScale , mSettings.mMaxScale ); + } +} + +//------------------------------------------------------------------------- +void MainWindow::updateWindowState() +{ + GraphicsSceneMainWindow::updateWindowState(); +#ifdef USES_GUIDO_AR + mPlayAct->setEnabled( ( selectedLanguageItems().size() == 1 ) && (dynamic_cast(mFirstSelectedItem)) ); + mPauseAct->setEnabled( mPlayingContainer ); + mStopAct->setEnabled( mPlayingContainer ); +#endif + + // Adds a Guido syntax highlighter on the textEdit if the only selected item is a QGuidoItemContainer. + if ( ( selectedLanguageItems().size() == 1 ) && (dynamic_cast(mFirstSelectedItem)) ) + { + // Adds the Guido syntax highlighter if there wasn't already one. + if ( !mGuidoHighlighter ) + mGuidoHighlighter = new GuidoHighlighter( mLanguageTextEdit->document() ); + } + else + { + // Destroys the Guido syntax highlighter if the only selected item is not a QGuidoItemContainer. + if ( ( selectedLanguageItems().size() == 1 ) && !(dynamic_cast(mFirstSelectedItem)) ) + { + if ( mGuidoHighlighter ) + { + delete mGuidoHighlighter; + mGuidoHighlighter = 0; + } + } + } + +} + +#ifdef USES_GUIDO_AR +//------------------------------------------------------------------------- +void MainWindow::controlPlayingContainer( QGraphicsItem * container ) +{ + if ( mPlayingContainer == container ) + mPlayingContainer = 0; +} +#endif + +//------------------------------------------------------------------------- +void MainWindow::keyPressEvent( QKeyEvent * event ) +{ + if ( mLanguageTextEdit->hasFocus() ) + return; + + int key = event->key(); + if ( key == Qt::Key_Shift ) + { + if ( selectedLanguageItems().size() == 0 ) + { + //Cancel any previous export process. + finalizeExport(true); + //Start the export process. + //Go in first state of export process. + mExportState = WaitRectStart; + + unselectAll(); + QApplication::setOverrideCursor( Qt::CrossCursor ); + event->accept(); + } + } + else if ( key == Qt::Key_Escape ) + { + finalizeExport(true); + event->accept(); + } +} + +//------------------------------------------------------------------------- +void MainWindow::keyReleaseEvent ( QKeyEvent * event ) +{ + if ( mLanguageTextEdit->hasFocus() ) + return; + + if ( event->key() == Qt::Key_Shift ) + { + if ( mExportState == WaitRectEnd ) + { + QApplication::restoreOverrideCursor(); + mExportState = WaitValidation; + event->accept(); + } + else if ( mExportState == WaitRectStart ) + { + finalizeExport(true); + event->accept(); + } + } +} + + +//------------------------------------------------------------------------- +void MainWindow::finalizeExport(bool cancel) +{ + mExportState = None; + + QApplication::restoreOverrideCursor(); + if ( mExportWindow ) + { + QRectF exportRectangle = mExportWindow->rect(); + mGraphicsScene->removeItem( mExportWindow ); + delete mExportWindow; + mExportWindow = 0; + //Export the view only in case of a validation + if ( !cancel ) + { + exportRectDialog( exportRectangle ); + statusBar()->showMessage("Export done"); + } + else + statusBar()->showMessage("Export cancelled"); + } +} + +//------------------------------------------------------------------------- +void MainWindow::exportRectDialog(const QRectF& exportRectangle ) +{ + //Select filename & export type + QString savePath = getFileDialogPath(); + if ( savePath == "" ) + savePath = windowFilePath(); + savePath += "/" + QFileInfo(windowFilePath()).fileName(); + + QString filters = PNG_FILE_FILTER + + QString("\n") + PDF_FILE_FILTER +// + QString("\n") + PS_FILE_FILTER + ; + QString selectedFilter(""); + QString fileName = QFileDialog::getSaveFileName(this, tr("Export the scene"), + savePath, + tr(filters.toUtf8().data()) , + &selectedFilter); + + if ( fileName.isEmpty() ) + return; + + setLastManagedFile(fileName); + formatFileName(fileName,selectedFilter,filters); + + exportRect( exportRectangle , fileName , selectedFilter ); +} + +//------------------------------------------------------------------------- +void MainWindow::exportRect(const QRectF& exportRectangle , const QString& fileName , const QString& fileType ) +{ + QList selectedItems = selectedLanguageItems(); + unselectAll(); + + QPainter painter; + if ( fileType == PNG_FILE_FILTER ) + { + int result = QResolutionDialog( exportRectangle , EXPORT_MIN_DETAIL , EXPORT_MAX_DETAIL , EXPORT_DEFAULT_DETAIL , EXPORT_DETAIL_TO_SCALE_FACTOR ).exec(); + if ( result ) + { + //Create a new QImage, with a size corresponding to the Guido Score page + QSizeF size( exportRectangle.width() , exportRectangle.height() ); + size.setWidth( result * EXPORT_DETAIL_TO_SCALE_FACTOR * size.width() ); + size.setHeight( result * EXPORT_DETAIL_TO_SCALE_FACTOR * size.height() ); + QImage image( size.width() , size.height() , QImage::Format_ARGB32); + image.fill( QColor(Qt::white).rgb() ); + + painter.begin( &image ); + + //Paint in the QImage + paintSceneRect( exportRectangle , &painter ); + + painter.end(); + + image.save( fileName , "PNG" ); + } + } + else if ( ( fileType == PDF_FILE_FILTER ) || ( fileType == PS_FILE_FILTER ) ) + { + QPrinter printer; + printer.setFullPage(true); + printer.setOutputFileName( fileName ); + if ( fileType == PS_FILE_FILTER ) + { + printer.setOutputFormat( QPrinter::PdfFormat ); + } + else if ( fileType == PDF_FILE_FILTER ) + { + printer.setOutputFormat( QPrinter::PdfFormat ); + } + + printer.setPaperSize( QSizeF( exportRectangle.width() , exportRectangle.height() ) , QPrinter::Millimeter ); + painter.setWindow( exportRectangle.toRect() ); + + painter.begin( &printer ); + + paintSceneRect( exportRectangle , &painter ); + + painter.end(); + } + + for ( int i = 0 ; i < selectedItems.size() ; i++ ) + selectedItems[i]->setSelected(true); +} + +//------------------------------------------------------------------------- +void MainWindow::paintSceneRect( const QRectF& exportRectangle , QPainter * painter ) +{ + // print, fitting the viewport contents into a full page + QRectF target(0,0,painter->device()->width() , painter->device()->height() ); + +#if !linux + QList containers = languageItems(); + for ( int i = 0 ; i < containers.size() ; i++ ) + { + if ( dynamic_cast(containers[i]) ) + ((QGuidoItemContainer*)containers[i])->guidoItem()->setCacheMode( QGraphicsItem::NoCache ); + else if ( dynamic_cast(containers[i]) ) + ((QSimpleItemContainer*)containers[i])->containedItem()->setCacheMode( QGraphicsItem::NoCache ); + } +#endif + mGraphicsScene->render( painter , target , exportRectangle ); +#if !linux + for ( int i = 0 ; i < containers.size() ; i++ ) + { + if ( dynamic_cast(containers[i]) ) + ((QGuidoItemContainer*)containers[i])->guidoItem()->setCacheMode( QGraphicsItem::DeviceCoordinateCache ); + else if ( dynamic_cast(containers[i]) ) + ((QSimpleItemContainer*)containers[i])->containedItem()->setCacheMode( QGraphicsItem::DeviceCoordinateCache ); + } +#endif +} + +//------------------------------------------------------------------------- +void MainWindow::exportFirstItem() +{ + QList selectedItems = selectedLanguageItems(); + if ( selectedItems.size() > 0 ) + { + //Export the first (and only) selected item, if it is a QGuidoItemContainer. + //(do nothing for other types of items) + if ( dynamic_cast(mFirstSelectedItem) ) + exportItem( (QGuidoItemContainer*)mFirstSelectedItem ); + else + QMessageBox::warning( this , "Export item" , "Item not exported : only Guido items can be exported." ); + } +} + +//------------------------------------------------------------------------- +void MainWindow::exportItem(QGuidoItemContainer * item) +{ + //Select filename & export type + QString savePath; + if ( item->file().length() ) + savePath = QFileInfo( item->file() ).absolutePath(); + if ( savePath == "" ) + savePath = getFileDialogPath(); + + savePath += "/" + item->name(); + + QString filters = PNG_FILE_FILTER + + QString("\n") + PDF_FILE_FILTER +// + QString("\n") + GMN_FILE_FILTER +// + QString("\n") + PS_FILE_FILTER + ; + QString selectedFilter(""); + QString fileName = QFileDialog::getSaveFileName(this, "Export the selected " + GraphicsSceneMainWindow::applicationSettings().mLanguageNameShort + " item", + savePath, + tr(filters.toUtf8().data()) , + &selectedFilter); + + if ( fileName.isEmpty() ) + return; + + formatFileName(fileName,selectedFilter,filters); + setLastManagedFile(fileName ); + + + if ( selectedFilter == PNG_FILE_FILTER ) + { + int result = QResolutionDialog( item->guidoItem()->boundingRect() , EXPORT_MIN_DETAIL , EXPORT_MAX_DETAIL , EXPORT_DEFAULT_DETAIL , EXPORT_DETAIL_TO_SCALE_FACTOR ).exec(); + if ( result ) + itemToImage( item->guidoItem() , result * EXPORT_DETAIL_TO_SCALE_FACTOR , QColor(Qt::white).rgb() ).save( fileName ); + + return; + } + + if ( selectedFilter == PDF_FILE_FILTER ) + { + item->exportToPdf( fileName ); + return; + } + + assert(0); +} + +//------------------------------------------------------------------------- +QItemResizer* MainWindow::plugResizer(QLanguageItem * itemContainer) +{ + QItemResizer * resizer = GraphicsSceneMainWindow::plugResizer(itemContainer); + + if ( dynamic_cast(itemContainer) ) + { + resizer->setPen( QPen( QColor( SIMPLE_ITEM_BASE_RGB,SIMPLE_ITEM_ALPHA_1) ) ); + resizer->setBrush( QBrush( QColor(SIMPLE_ITEM_BASE_RGB,SIMPLE_ITEM_ALPHA_2) ) ); + resizer->setResizeBorder( RESIZER_BORDER_WIDTH , Qt::NoBrush ); + resizer->setKeepAspectRatio(false); + } + else + { +// resizer->setPen( SELECTED_PEN ); +// resizer->setBrush( HIGHLIGHTED_BRUSH ); + resizer->setRoundedRectRadius( ROUNDED_RECT_RADIUS ); + resizer->setResizeBorder( RESIZER_BORDER_WIDTH , Qt::NoBrush ); + + assert( dynamic_cast(itemContainer) ); + QGuidoItemContainer* guidoContainer = (QGuidoItemContainer*)itemContainer; + guidoContainer->setResizer( resizer ); + } + + return resizer; +} + +//------------------------------------------------------------------------- +void GuidoGraphicsView::mousePressEvent ( QMouseEvent * event ) +{ + MainWindow* mainWindow = (MainWindow*)mMainWindow; + //If in first state of export process (WaitRectStart), + //anchor the top-left point of the export rectangle + //Go in second state of export process (WaitRectEnd). + if ( mainWindow->mExportState == MainWindow::WaitRectStart ) + { + event->accept(); + QPointF graphicsViewPos = mainWindow->mGraphicsView->mapToScene( event->pos() ); + + QRectF rect( graphicsViewPos.x() , graphicsViewPos.y() , 0 , 0 ); + mainWindow->mExportWindowStartPoint = graphicsViewPos; + mainWindow->mExportWindow = mainWindow->mGraphicsScene->addRect( rect , QPen( Qt::DashLine ) , QBrush( QColor(230,230,230,50) ) ); + + mainWindow->mExportState = MainWindow::WaitRectEnd; + } + else + { + // Cancel any export-selection + if ( mainWindow->mExportState == MainWindow::WaitValidation ) + { + mainWindow->finalizeExport(true); + } + LanguageGraphicsView::mousePressEvent(event); + } +} + +//------------------------------------------------------------------------- +void GuidoGraphicsView::mouseMoveEvent( QMouseEvent * event ) +{ + MainWindow* mainWindow = (MainWindow*)mMainWindow; + //If in second state of the export process (WaitRectEnd), + //update the bottom-right point of the export rectangle + //with the current mouse position. + if ( mainWindow->mExportState == MainWindow::WaitRectEnd ) + { + event->accept(); + + QPointF graphicsViewPos = mainWindow->mGraphicsView->mapToScene( event->pos() ); + + QRectF exportRect( mainWindow->mExportWindowStartPoint.x() , mainWindow->mExportWindowStartPoint.y() , graphicsViewPos.x() - mainWindow->mExportWindowStartPoint.x() , graphicsViewPos.y() - mainWindow->mExportWindowStartPoint.y()); + + mainWindow->mExportWindow->setRect( exportRect & mainWindow->mBackgroundItem->pageRectInSceneCoords() ); + + QString statusMsg; + QTextStream(&statusMsg) << "Exported rectangle size = " << mainWindow->mExportWindow->rect().width() << "x" << mainWindow->mExportWindow->rect().height(); + mainWindow->statusBar()->showMessage( statusMsg ); + } + else + { + QGraphicsView::mouseMoveEvent(event); + } + QPointF posSceneCoords = mainWindow->mGraphicsView->mapToScene( event->pos() ); + mainWindow->updateCursorPos( posSceneCoords ); +} + diff --git a/guidoar-dev/guidocalculus/src/GUI/MainWindow.h b/guidoar-dev/guidocalculus/src/GUI/MainWindow.h new file mode 100644 index 000000000..635d35a6e --- /dev/null +++ b/guidoar-dev/guidocalculus/src/GUI/MainWindow.h @@ -0,0 +1,168 @@ +/* + * MainWindow.h + * + * Created by Christophe Daudin on 12/05/09. + * Copyright 2009 Grame. All rights reserved. + * + * GNU Lesser General Public License Usage + * Alternatively, this file may be used under the terms of the GNU Lesser + * General Public License version 2.1 as published by the Free Software + * Foundation and appearing in the file LICENSE.LGPL included in the + * packaging of this file. Please review the following information to + * ensure the GNU Lesser General Public License version 2.1 requirements + * will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. + * + * + * This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE + * WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + */ +#ifndef MAINWINDOW_H +#define MAINWINDOW_H + +class QGuidoItemContainerFactory; + +#include "GraphicsSceneMainWindow.h" + +class QPaletteItem; +enum CombinationType +{ + COMBINATION_UNDER_ALIGN_LEFT = 0 , + COMBINATION_UNDER_ALIGN_RIGHT , + COMBINATION_OVER_ALIGN_LEFT , + COMBINATION_OVER_ALIGN_RIGHT , + COMBINATION_AFTER , + COMBINATION_BEFORE , + COMBINATION_UNDEFINED , + COMBINATION_TAIL , + COMBINATION_HEAD , + COMBINATION_VOICE_HEAD , + COMBINATION_VOICE_TAIL , + COMBINATION_INTERLEAVE , + COMBINATION_TRANSPOSE , + COMBINATION_DURATION , + COMBINATION_RYTHM , + COMBINATION_PITCH +}; + +class QGuidoItemContainer; +class GuidoHighlighter; + +class MainWindow : public GraphicsSceneMainWindow +{ + Q_OBJECT + + friend class GuidoGraphicsView; + +public: + MainWindow(); + void adaptActions(); + ~MainWindow(); + +protected Q_SLOTS: + void exportToImage(); + void about(); + void itemRemoved( QLanguageItem * item ); + void addTextItem(); + void addItemFromAnyFile(); + void setPageA4Portrait(); + void setPageA3Portrait(); + void setPageA4Landscape(); + void setPageA3Landscape(); + + +#ifdef USES_GUIDO_AR + void playItem(); + void pauseItem(); + void stopItem(); + void exportItemToMidi(); + void combineItems( QGraphicsItem * droppedItem , QGraphicsItem* targetItem , int,int , int interactionId ); + void changeActivePalette(int index); +#endif + + void exportItem(); + +protected: + + // Widgets initialization methods. + void createActions(); + void createMenus(); + void createToolBars(); + + virtual void setupNAddItem(QLanguageItem* decorator); //A compléter dans la MainWindow derivée. + + void updateWindowState(); + + // UI events handlers. + void keyPressEvent ( QKeyEvent * event ); + void keyReleaseEvent ( QKeyEvent * event ); + + // Ends the "export To Image" process, resetting the state of the window back to normal. If (cancel==true), the export isn't done. + void finalizeExport(bool cancel); + // Render the exportRect (in scene coordinates) to an image (opens a "Save as..." dialog). + + //Render the exportRect (in scene coordinates) to the fileName. + void exportRectDialog(const QRectF &exportRectangle); + void exportRect(const QRectF &exportRectangle , const QString& fileName , const QString& filter); + void paintSceneRect( const QRectF& exportRectangle , QPainter * painter ); + + void exportFirstItem(); + void exportItem(QGuidoItemContainer * item); + + //Specified QItemResizer setup (Pens,Brushes,shape) + QItemResizer* plugResizer(QLanguageItem * itemContainer); + + //ExportState defines the 4 states of the process "export a portion of the mGraphicsView to an image". + typedef enum ExportState { + None , // Idle state : waiting for the user to press key "Alt". + WaitRectStart , // First state : now waiting for the user to define the + // top-left point of the export rectangle + WaitRectEnd , // Second state: now waiting for the user to define the + // bottom-right point of the export rectangle + WaitValidation // Last state : now waiting for the user to confirm/cancel + // the export. + } ExportState; + + QGraphicsRectItem * mExportWindow; + QPointF mExportWindowStartPoint; + ExportState mExportState; + + QAction *mExportAct; + QAction *mAddTextAct; + QAction *mAddFromAnyFileAct; + QAction *mSetPageA4PortraitAct; + QAction *mSetPageA3PortraitAct; + QAction *mSetPageA4LandscapeAct; + QAction *mSetPageA3LandscapeAct; + + + QGuidoItemContainerFactory * mGuidoItemContainerFactory; + + GuidoHighlighter * mGuidoHighlighter; + +#ifdef USES_GUIDO_AR + void controlPlayingContainer( QGraphicsItem * container ); + + QAction *mPlayAct; + QAction *mPauseAct; + QAction *mStopAct; + + QToolBar *mPlayToolBar; + QLanguageItem * mPlayingContainer; + + QMenu *mCombinationMenu; + QToolBar *mCombinationToolBar; + QList mPalettes; +#endif + +}; + +#include "MainWindowObjects.h" +//------------------------------------------------------------------------------------------------------------------------ +class GuidoGraphicsView : public LanguageGraphicsView +{ + protected: + void mousePressEvent(QMouseEvent * event); + void mouseMoveEvent(QMouseEvent * event); +}; + +#endif diff --git a/guidoar-dev/guidocalculus/src/GuidoAR/QGuidoAR.cpp b/guidoar-dev/guidocalculus/src/GuidoAR/QGuidoAR.cpp new file mode 100644 index 000000000..77a60ed17 --- /dev/null +++ b/guidoar-dev/guidocalculus/src/GuidoAR/QGuidoAR.cpp @@ -0,0 +1,225 @@ +/* + * QGuidoAR.cpp + * + * Created by Christophe Daudin on 12/05/09. + * Copyright 2009 Grame. All rights reserved. + * + * GNU Lesser General Public License Usage + * Alternatively, this file may be used under the terms of the GNU Lesser + * General Public License version 2.1 as published by the Free Software + * Foundation and appearing in the file LICENSE.LGPL included in the + * packaging of this file. Please review the following information to + * ensure the GNU Lesser General Public License version 2.1 requirements + * will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. + * + * + * This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE + * WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + */ +#include "QGuidoAR.h" + + +#include +#include + +#ifdef WIN32 +# pragma warning (disable : 4786) +# define basename(name) (name) +# define _CRT_SECURE_NO_DEPRECATE +#else +# include +#endif + +#include +#include +#include + +#include "libguidoar.h" + +typedef guido::garErr (*GuidoAROperation)( const char * , const char * , std::ostream& ); + +/* +//-------------------------------------------------------------------------------- +QString operate( const QString& str1 , const QString& str2 ,guido::operation * guidoOperation ) +{ + guido::guidoparser r; + guido::SARMusic g1 = r.parseString( str1.toUtf8().data() ); + if (!g1) +// readErr(*argsPtr); + return ""; + + guido::SARMusic g2 = r.parseString( str2.toUtf8().data() ); + if (!g2) +// readErr(*argsPtr); + return ""; + + g1 = (*guidoOperation)(g1, g2); + + if (g1) + { + guido::Sguidoelement result = g1; + std::ostringstream oss; + oss << result; + QString str_result( oss.str().c_str() ); + return str_result; + } + return ""; +} +*/ + +//-------------------------------------------------------------------------------- +QString operate( const QString& str1 , const QString& str2 , GuidoAROperation operation ) +{ + std::ostringstream oss; + guido::garErr err = operation( str1.toUtf8().constData() , str2.toUtf8().constData() , oss ); + if ( err == guido::kNoErr ) + return QString( oss.str().c_str() ); + else + return "Error"; +} + + +//-------------------------------------------------------------------------------- +QString QGuidoAR::sequence( const QString& str1 , const QString& str2 ) +{ + return operate( str1 , str2 , guido::guidoGSeq ); +} + +//-------------------------------------------------------------------------------- +GuidoAROperation parallelAlignToOperation( QGuidoAR::ParallelAlign parallelAlign ) +{ + switch (parallelAlign) + { + case QGuidoAR::Left: return guido::guidoGPar; + case QGuidoAR::Right: return guido::guidoGRPar; + default : assert(0); return guido::guidoGPar; + } +} + +//-------------------------------------------------------------------------------- +QString QGuidoAR::parallel( const QString& str1 , const QString& str2 , ParallelAlign parallelAlign ) +{ + return operate( str1 , str2 , parallelAlignToOperation(parallelAlign) ); +} + +//-------------------------------------------------------------------------------- +QString QGuidoAR::duration( const QString& str1 , const QString& str2 ) +{ + return operate( str1 , str2 , guido::guidoGSetDuration ); +} + +//-------------------------------------------------------------------------------- +QString QGuidoAR::interleave( const QString& str1 , const QString& str2 ) +{ + return operate( str1 , str2 , guido::guidoGSeq ); +} + +//-------------------------------------------------------------------------------- +QString QGuidoAR::transpose( const QString& str1 , const QString& str2 ) +{ + return operate( str1 , str2 , guido::guidoGTranpose ); +} + +//-------------------------------------------------------------------------------- +QString QGuidoAR::head( const QString& str1 , const QString& str2 ) +{ + return operate( str1 , str2 , guido::guidoGHead ); +} + +//-------------------------------------------------------------------------------- +QString QGuidoAR::tail( const QString& str1 , const QString& str2 ) +{ + return operate( str1 , str2 , guido::guidoGTail ); +} + +//-------------------------------------------------------------------------------- +QString QGuidoAR::top( const QString& str1 , const QString& str2 ) +{ + return operate( str1 , str2 , guido::guidoGTop ); +} + +//-------------------------------------------------------------------------------- +QString QGuidoAR::bottom( const QString& str1 , const QString& str2 ) +{ + return operate( str1 , str2 , guido::guidoGBottom ); +} + +//-------------------------------------------------------------------------------- +QString QGuidoAR::rythm( const QString& str1 , const QString& str2 ) +{ + std::ostringstream oss; + guido::garErr err = guido::guidoApplyRythm( str1.toUtf8().constData() , str2.toUtf8().constData() , guido::kApplyForwardLoop , oss ); + if ( err == guido::kNoErr ) + return QString( oss.str().c_str() ); + else + return "Error"; +} + +//_______________________________________________________________________________ +QString QGuidoAR::pitch( const QString& str1 , const QString& str2 ) +{ + std::ostringstream oss; + guido::garErr err = guido::guidoApplyPitch( str1.toUtf8().constData() , str2.toUtf8().constData() , guido::kApplyForwardLoop , guido::kUseLowest , oss ); + if ( err == guido::kNoErr ) + return QString( oss.str().c_str() ); + else + return "Error"; +} + +#ifdef USEMidiShare + +#include "guidoparser.h" +#include "midicontextvisitor.h" +#include "midiconverter.h" +#include + +//_______________________________________________________________________________ +void QGuidoAR::midiExport( const QString& gmnCode , const QString& outMidiFile ) +{ + assert( outMidiFile.length() ); + + guido::guidoparser r; + guido::Sguidoelement score = r.parseString( gmnCode.toUtf8().data() ); + if (score) + { + guido::midiconverter mc; + + int err = mc.score2midifile(score, outMidiFile.toUtf8().data() ); + if (err != noErr) + std::cerr << "error " << err << " while converting GMN to midifile " << outMidiFile.toUtf8().data() << std::endl; + } + else + { + std::cerr << "error : can't convert GMN to a valid score" << std::endl; + } +} + +//_______________________________________________________________________________ +int QGuidoAR::getMidiRef( const QString& gmnCode ) +{ + guido::guidoparser r; + + guido::Sguidoelement score = r.parseString( gmnCode.toUtf8().data() ); + if (score) + { + guido::midiconverter mc; + short ref = mc.score2player(score, gmnCode.toUtf8().data()); + if (ref > 0) { + MidiConnect (ref, 0, true); + return ref; + } + } + return -1; +} + +//_______________________________________________________________________________ +void QGuidoAR::midiPlay( int midiRef ) { StartPlayer(midiRef); } +void QGuidoAR::midiPause( int midiRef ) { PausePlayer(midiRef); } +void QGuidoAR::midiResume( int midiRef ) { ContPlayer(midiRef); } +void QGuidoAR::midiStop( int midiRef ) { StopPlayer (midiRef); } +void QGuidoAR::midiClose( int midiRef ) +{ + MidiConnect (midiRef, 0, false); + ClosePlayer (midiRef); +} +#endif diff --git a/guidoar-dev/guidocalculus/src/GuidoAR/QGuidoAR.h b/guidoar-dev/guidocalculus/src/GuidoAR/QGuidoAR.h new file mode 100644 index 000000000..aa1b8b6b1 --- /dev/null +++ b/guidoar-dev/guidocalculus/src/GuidoAR/QGuidoAR.h @@ -0,0 +1,84 @@ +/* + * QGuidoAR.h + * + * Created by Christophe Daudin on 12/05/09. + * Copyright 2009 Grame. All rights reserved. + * + * GNU Lesser General Public License Usage + * Alternatively, this file may be used under the terms of the GNU Lesser + * General Public License version 2.1 as published by the Free Software + * Foundation and appearing in the file LICENSE.LGPL included in the + * packaging of this file. Please review the following information to + * ensure the GNU Lesser General Public License version 2.1 requirements + * will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. + * + * + * This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE + * WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + */ +#ifndef GUIDO_AR_H +#define GUIDO_AR_H + + +#include + +class QGuidoAR +{ + + public: + + /*! \brief Builds a Guido Score putting in sequence the Guido Score + * built from GMN code str1 and the Guido Score built from + * GMN code str2, and returns the corresponding GMN code. + */ + static QString sequence( const QString& str1 , const QString& str2 ); + + typedef enum ParallelAlign + { + Right , Left + } ParallelAlign; + + /*! \brief Builds a Guido Score putting in parallel the Guido Score + * built from GMN code str1 and the Guido Score built from + * GMN code str2, and returns the corresponding GMN code. + */ + static QString parallel( const QString& str1 , const QString& str2 , ParallelAlign parallelAlign = Left ); + + static QString interleave( const QString& str1 , const QString& str2 ); + + static QString duration( const QString& str1 , const QString& str2 ); + + static QString transpose( const QString& str1 , const QString& str2 ); + + static QString head( const QString& str1 , const QString& str2 ); + + static QString tail( const QString& str1 , const QString& str2 ); + + static QString top( const QString& str1 , const QString& str2 ); + + static QString bottom( const QString& str1 , const QString& str2 ); + + static QString rythm( const QString& str1 , const QString& str2 ); + + static QString pitch( const QString& str1 , const QString& str2 ); + + #ifdef USEMidiShare + static int getMidiRef( const QString& gmnCode ); + static void midiPlay( int midiRef ); + static void midiPause( int midiRef ); + static void midiResume( int midiRef ); + static void midiStop( int midiRef ); + static void midiClose( int midiRef ); + static void midiExport( const QString& gmnCode , const QString& outMidiFile ); + #else + static int getMidiRef( const QString& ) { return -1; } + static void midiPlay( int ) {} + static void midiPause( int ) {} + static void midiResume( int ) {} + static void midiStop( int ) {} + static void midiClose( int ) {} + static void midiExport( const QString& , const QString& ) {} + #endif +}; + +#endif //GUIDO_AR_H diff --git a/guidoar-dev/guidocalculus/src/GuidoCalculus.pro b/guidoar-dev/guidocalculus/src/GuidoCalculus.pro new file mode 100644 index 000000000..91a32e164 --- /dev/null +++ b/guidoar-dev/guidocalculus/src/GuidoCalculus.pro @@ -0,0 +1,75 @@ +APP_NAME = GuidoCalculus +DEFINES += GUIDO_CALCULUS_APP +include( shared.pri ) + +RESOURCES_DIR=rsc +isEmpty( GUIDOLIB ) { GUIDOLIB = ../../../guidolib } +GUIDOLIBS = $$GUIDOLIB/environments/Qt/libs +GUIDOQT = $$GUIDOLIB/environments/Qt/libs/GuidoQt +GSMW = $$GUIDOLIB/environments/Qt/libs/GraphicsSceneMainWindow + +####### +CONFIG += no_keywords +QT += widgets printsupport + +!exists( $$GUIDOLIB ) { + error( "Can't find Guido Library at \"$$GUIDOLIB\". Call qmake with option: \"GUIDOLIB=./path/to/guidolib\" " ) +} + +####### External libraries link ####### + +# GraphicsSceneMainWindow link for each platform +win32:!win32-g++ { + LIBS += $$GSMW/GraphicsSceneMainWindow.lib +} +win32-g++ { + LIBS += -L$$GSMW -lGraphicsSceneMainWindow +} +unix { + LIBS += -L$$GUIDOLIBS -lGraphicsSceneMainWindow +} +INCLUDEPATH += $$GSMW/include + +# GuidoQt library link for each platform +win32:!win32-g++:LIBS += $$GUIDOQT/GuidoQt.lib +win32-g++:LIBS += -L$$GUIDOQT/ -lGuidoQt +unix:LIBS += -L$$GUIDOLIBS -lGuidoQt +INCLUDEPATH += $$GUIDOQT/include + +# GUIDOEngine library link for each platform +macx:LIBS += -F$$GUIDOLIB/build/MacOS/Release -framework GUIDOEngine +win32:!win32-g++:LIBS += $$GUIDOLIB/cmake/release/GUIDOEngine.lib +win32-g++:LIBS += -L$$GUIDOLIB/cmake -lguidoengine +unix:!macx:LIBS += -lGUIDOEngine +INCLUDEPATH += $$GUIDOLIB/src/engine/include + +###### GUIDO AR ###### +DEFINES += USES_GUIDO_AR +GUIDO_AR_PATH = ../.. + +macx { + ICON = $$RESOURCES_DIR/guido.icns + FONT.files = $$RESOURCES_DIR/guido2.svg + FONT.files += $$RESOURCES_DIR/guido2.ttf + FONT.path = Contents/Resources + QMAKE_BUNDLE_DATA += FONT +} + +#### guidoar library link +macx:LIBS += -F$$GUIDO_AR_PATH/build/macos/Release -framework guidoar +win32:!win32-g++:LIBS += $$GUIDO_AR_PATH/cmake/release/guidoar.lib +win32-g++:LIBS += -L$$GUIDO_AR_PATH/cmake -lguidoar +unix:!macx:LIBS += -L$$GUIDO_AR_PATH/cmake -lguidoar +INCLUDEPATH += $$GUIDO_AR_PATH/src/lib $$GUIDO_AR_PATH/src/interface $$GUIDO_AR_PATH/src/midi $$GUIDO_AR_PATH/src/visitors $$GUIDO_AR_PATH/src/parser $$GUIDO_AR_PATH/src/guido $$GUIDO_AR_PATH/src/guido/abstract + +SOURCES_DIR = . + +###### SOURCES ###### +SOURCES += main.cpp GUI/*.cpp GuidoAR/*.cpp GuidoHighlighter/*.cpp GuidoItemContainer/*.cpp + +###### HEADERS ###### +HEADERS += GUI/*.h GuidoAR/*.h GuidoHighlighter/*.h GuidoItemContainer/*.h +INCLUDEPATH += GUI GuidoAR GuidoHighlighter GuidoItemContainer + +###### RESOURCES ###### +RESOURCES += rsc/guidoar.qrc rsc/guido.qrc diff --git a/guidoar-dev/guidocalculus/src/GuidoHighlighter/GuidoHighlighter.cpp b/guidoar-dev/guidocalculus/src/GuidoHighlighter/GuidoHighlighter.cpp new file mode 100644 index 000000000..34e0b5e9e --- /dev/null +++ b/guidoar-dev/guidocalculus/src/GuidoHighlighter/GuidoHighlighter.cpp @@ -0,0 +1,133 @@ +/* + * GuidoHighlighter.cpp + * + * Created by Christophe Daudin on 12/05/09. + * Copyright 2009 Grame. All rights reserved. + * + * GNU Lesser General Public License Usage + * Alternatively, this file may be used under the terms of the GNU Lesser + * General Public License version 2.1 as published by the Free Software + * Foundation and appearing in the file LICENSE.LGPL included in the + * packaging of this file. Please review the following information to + * ensure the GNU Lesser General Public License version 2.1 requirements + * will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. + * + * + * This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE + * WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + */ + + +#include "GuidoHighlighter.h" +//#include only on unix +#include +using namespace std; + +#define WHITE Qt::white +#define TRANSPARENT Qt::transparent + +#define VIOLET QColor(72,66,139) +#define LIGHT_YELLOW QColor(250,250,210) +#define LIGHT_GREEN QColor(240,255,240) +#define FLORAL_GREEN QColor(255,250,240) +#define DARK_OLIVE_GREEN QColor(85,107,47) +#define DODGER_BLUE_4 QColor(16,78,139) +#define INDIAN_RED_1 QColor(255,106,106) +#define INDIAN_RED_2 QColor(190,84,83) +#define DARK_SEA_GREEN_1 QColor(193,255,193) +#define DARK_SEA_BLUE_1 QColor(193,193,255) +#define LAVENDER_BLUSH QColor(255,240,245) +#define GREEN_4 QColor(0,139,0) +#define ORANGE_1 QColor(240,110,36) +#define ORANGE_2 QColor(209,110,36) +#define DEEP_BLUE QColor(31,68,110) +#define DEEP_TURQUOISE QColor(31,109,110) +#define DEEP_PURPLE QColor( 70 , 0 , 83 ) + +#define SQUARE_BRACKETS_FONT DEEP_PURPLE +#define SQUARE_BRACKETS_BACK TRANSPARENT +#define SQUARE_BRACKETS_WEIGHT QFont::Black + +#define CURLY_BRACKETS_FONT DEEP_PURPLE +#define CURLY_BRACKETS_BACK TRANSPARENT +#define CURLY_BRACKETS_WEIGHT QFont::Black + +#define NOTE_NAMES_FONT DEEP_BLUE +#define NOTE_NAMES_BACK TRANSPARENT +#define NOTE_NAMES_WEIGHT QFont::Bold + +#define ACCIDENTALS_FONT DEEP_BLUE +#define ACCIDENTALS_BACK TRANSPARENT +#define ACCIDENTALS_WEIGHT QFont::Bold + +#define DURATIONS_FONT INDIAN_RED_2 +#define DURATIONS_BACK TRANSPARENT +#define DURATIONS_WEIGHT QFont::Bold + +#define TAGS_FONT ORANGE_2 +#define TAGS_BACK TRANSPARENT +#define TAGS_WEIGHT QFont::Bold + +#define FULL_TAGS_FONT Qt::black +#define FULL_TAGS_BACK TRANSPARENT +#define FULL_TAGS_WEIGHT QFont::Bold + +#define COMMENTS_FONT GREEN_4 +#define COMMENTS_BACK TRANSPARENT +#define COMMENTS_WEIGHT QFont::Normal + +#define NOTE QString( "(c|cis|d|dis|e|f|fis|g|gis|a|ais|h|b|do|re|mi|fa|sol|la|si|ti|empty)" ) +#define NOTE_PATTERN QString( "((_|" + NOTE + ")\\s*[#|&]*\\s*(-\\d)?\\d*)" ) + +#define TAG QString("\\\\\\w+(:\\d)?") +//------------------------------------------------------------------------- +GuidoHighlighter::GuidoHighlighter(QTextDocument *parent) + :MusicNotationHighlighter(parent) +{ + // SPECIAL CHARS + QStringList squareBracketPattern; + squareBracketPattern + << "\\[" + << "\\]" + ; + appendLineRule(squareBracketPattern, buildTextCharFormat( SQUARE_BRACKETS_FONT,SQUARE_BRACKETS_BACK,SQUARE_BRACKETS_WEIGHT ),false); + + QStringList curlyBracketPattern; + curlyBracketPattern + << "\\{" + << "\\}" + ; + appendLineRule(curlyBracketPattern, buildTextCharFormat( CURLY_BRACKETS_FONT,CURLY_BRACKETS_BACK,CURLY_BRACKETS_WEIGHT ),false); + + // DURATION + QStringList durationPatterns; + durationPatterns + << NOTE_PATTERN + "(\\s*\\*\\s*\\d+)?(\\s*/\\s*\\d+)?" + ; + appendLineRule(durationPatterns, buildTextCharFormat( DURATIONS_FONT,DURATIONS_BACK,DURATIONS_WEIGHT ),false); + + // NOTE NAMES + QStringList noteNamesPatterns; + noteNamesPatterns + << NOTE_PATTERN; + appendLineRule(noteNamesPatterns, buildTextCharFormat( NOTE_NAMES_FONT,NOTE_NAMES_BACK,NOTE_NAMES_WEIGHT ),false); + + // TAGS + QStringList fullTagPattern; + fullTagPattern << TAG + "(<.*>)"; + appendLineRule( fullTagPattern , buildTextCharFormat( FULL_TAGS_FONT,FULL_TAGS_BACK,FULL_TAGS_WEIGHT ) , true ); + + //the tag itself + QStringList tagsPatterns; + tagsPatterns << TAG; + appendLineRule(tagsPatterns, buildTextCharFormat( TAGS_FONT,TAGS_BACK,TAGS_WEIGHT ),false); + + QStringList commentsPatterns; + commentsPatterns <<"\\%.*"; + appendLineRule(commentsPatterns, buildTextCharFormat( COMMENTS_FONT,COMMENTS_BACK,COMMENTS_WEIGHT ),false); + + QString startCommentsPatterns("\\(\\*"); + QString endCommentsPatterns("\\*\\)"); + appendMultilineRule(startCommentsPatterns,endCommentsPatterns, + buildTextCharFormat( COMMENTS_FONT,COMMENTS_BACK,COMMENTS_WEIGHT ),true); +} diff --git a/guidoar-dev/guidocalculus/src/GuidoHighlighter/GuidoHighlighter.h b/guidoar-dev/guidocalculus/src/GuidoHighlighter/GuidoHighlighter.h new file mode 100644 index 000000000..14241fabf --- /dev/null +++ b/guidoar-dev/guidocalculus/src/GuidoHighlighter/GuidoHighlighter.h @@ -0,0 +1,36 @@ +/* + * GuidoHighlighter.h + * + * Created by Christophe Daudin on 12/05/09. + * Copyright 2009 Grame. All rights reserved. + * + * GNU Lesser General Public License Usage + * Alternatively, this file may be used under the terms of the GNU Lesser + * General Public License version 2.1 as published by the Free Software + * Foundation and appearing in the file LICENSE.LGPL included in the + * packaging of this file. Please review the following information to + * ensure the GNU Lesser General Public License version 2.1 requirements + * will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. + * + * + * This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE + * WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + */ + +#ifndef GUIDOHIGHLIGHTER_H_ +#define GUIDOHIGHLIGHTER_H_ + +#include +#include +#include +#include + +#include "MusicNotationHighlighter.h" + +class GuidoHighlighter:public MusicNotationHighlighter +{ +public: + GuidoHighlighter(QTextDocument *parent = 0); +}; + +#endif /*GUIDOHIGHLIGHTER_H_*/ diff --git a/guidoar-dev/guidocalculus/src/GuidoItemContainer/QGuidoItemContainer.cpp b/guidoar-dev/guidocalculus/src/GuidoItemContainer/QGuidoItemContainer.cpp new file mode 100644 index 000000000..c31bbce21 --- /dev/null +++ b/guidoar-dev/guidocalculus/src/GuidoItemContainer/QGuidoItemContainer.cpp @@ -0,0 +1,1082 @@ +/* + * QGuidoItemContainer.cpp + * + * Created by Christophe Daudin on 12/05/09. + * Copyright 2009 Grame. All rights reserved. + * + * GNU Lesser General Public License Usage + * Alternatively, this file may be used under the terms of the GNU Lesser + * General Public License version 2.1 as published by the Free Software + * Foundation and appearing in the file LICENSE.LGPL included in the + * packaging of this file. Please review the following information to + * ensure the GNU Lesser General Public License version 2.1 requirements + * will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. + * + * + * This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE + * WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + */ + +#include +#include +#include + +#include "QGuidoItemContainer.h" +#include "QGuidoGraphicsItem.h" +#include "QGuidoImporter.h" + +#include "QItemResizer.h" + +#ifdef USES_GUIDO_AR + #include "QGuidoAR.h" + #include "QPaletteItem.h" +#endif + +#include +#include + +#define PROPORTIONAL_SPRING 1.0f +#define PROPORTIONAL_FORCE 1500.0f +#define NO_PROPORTIONAL_SPRING 1.1f +#define NO_PROPORTIONAL_FORCE 750.0f + +#define DEFAULT_PROPORTIONAL false +#define DEFAULT_OPTIMAL_PAGE_FILL true +#define DEFAULT_RESIZE_PAGE true + +#define SELECTION_FLAG_SELECTED 2 +#define SELECTION_FLAG_HIGHLIGHTED 1 +#define SELECTION_FLAG_IDLE 0 +#define SELECTION_SWITCH_INVALID_CODE 1 + +#define TITLE_BAR_FONT_COLOR Qt::black +#define TITLE_BAR_FONT QFont("Lucida Grande") +#define TITLE_BAR_FONT_PEN_WIDTH 1.0f + + +#define ARROW_PEN_WIDTH 2 + +#define PAGE_TURNER_ARROW_SIZE 10 + +#define PAGE_LABEL_RECT_OUT_WIDTH 5 +#define PAGE_LABEL_RECT_OUT_HEIGHT 5 +#define PAGE_LABEL_TEXT_MARGIN 0 +#define PAGE_LABEL_RECT_RADIUS_FACTOR 0.5f + +#define INVALID_RECT QRect(0,0,100,100) + +#define DOM_GUIDO_ITEM_CURRENT_PAGE "currentPage" +#define DOM_GUIDO_ITEM_GRID_WIDTH "gridWidth" +#define DOM_GUIDO_ITEM_GRID_HEIGHT "gridHeight" + +#define GMN_CONTAINER_MIME_FLAG "GMNContainerMimeFlag" +#define GMN_CONTAINER_MIME_GRID_WIDTH "GMNContainerMimeGridWidth" +#define GMN_CONTAINER_MIME_GRID_HEIGHT "GMNContainerMimeGridHeight" +#define GMN_CONTAINER_MIME_PAGE_INDEX "gmnContainerMimePageIndex" + +class QPageTurnerItem : public QGraphicsPolygonItem +{ + public: + QPageTurnerItem( bool isNext , const QPolygonF& polygon , QGuidoItemContainer * parent ) + : QGraphicsPolygonItem( polygon , parent ) + { + mParent = parent; + mIsNext = isNext; + + setAcceptHoverEvents(true); + + setCursor( Qt::PointingHandCursor ); + } + + protected: + + void mousePressEvent( QGraphicsSceneMouseEvent * event ) + { + if ( mIsNext ) + mParent->nextPage(); + else + mParent->previousPage(); + + event->accept(); + } + + QGuidoItemContainer * mParent; + bool mIsNext; + +}; + +QPolygonF getRightArrowPolygon(const QRectF& boundingRect); +QPolygonF getLeftArrowPolygon(const QRectF& boundingRect); + + +//------------------------------------------------------------------------- +// Public functions // +//------------------------------------------------------------------------- +//------------------------------------------------------------------------- +QGuidoItemContainer::QGuidoItemContainer(QGraphicsItem * parent) + : QLanguageItem(parent) +{ + init(); +} + +//------------------------------------------------------------------------- +QGuidoItemContainer::QGuidoItemContainer(const QMimeData * mimeData , QGraphicsItem * parent) + : QLanguageItem(parent) +{ + QGuidoItemContainer::init(mimeData); +} + +//------------------------------------------------------------------------- +QGuidoItemContainer::QGuidoItemContainer(const QDomElement * domElement , QGraphicsItem * parent) + : QLanguageItem(parent) +{ + QGuidoItemContainer::init(domElement); +} + +//------------------------------------------------------------------------- +QGuidoItemContainer::QGuidoItemContainer(const QGuidoItemContainer * other , QGraphicsItem * parent) + : QLanguageItem(parent) +{ + QGuidoItemContainer::init(other); +} + +//------------------------------------------------------------------------- +QGuidoItemContainer::~QGuidoItemContainer() +{ +#ifdef USES_GUIDO_AR + if ( mMidiRef != -1 ) + { + stop(); + QGuidoAR::midiClose(mMidiRef); + mPlayerState = STOPPED; + mMidiRef = -1; + } +#endif +} + +//------------------------------------------------------------------------- +void QGuidoItemContainer::exportToPdf(const QString& fileName) +{ + QPrinter printer; + printer.setFullPage(true); + printer.setOutputFileName( fileName ); + printer.setOutputFormat( QPrinter::PdfFormat ); + exportToPdf( &printer ); +} + +//------------------------------------------------------------------------- +QDomElement QGuidoItemContainer::saveToDomElement( QDomDocument * doc) +{ + QDomElement element = QLanguageItem::saveToDomElement(doc); + + element.setAttribute( DOM_GUIDO_ITEM_PROPORTIONAL_LAYOUT , mIsProportionalOn ); + element.setAttribute( DOM_GUIDO_ITEM_OPTIMAL_PAGE_FILL , mIsOptimalPageFillOn ); + element.setAttribute( DOM_GUIDO_ITEM_RESIZE_PAGE_ON , mGuidoItem->isResizePageToMusicOn() ); + element.setAttribute( DOM_GUIDO_ITEM_SCALE , mGuidoItem->transform().m11() ); + + element.setAttribute( DOM_GUIDO_ITEM_CURRENT_PAGE, mGuidoItem->firstVisiblePage() ); + element.setAttribute( DOM_GUIDO_ITEM_GRID_WIDTH, mGuidoItem->gridWidth() ); + element.setAttribute( DOM_GUIDO_ITEM_GRID_HEIGHT, mGuidoItem->gridHeight() ); + + return element; +} + +//------------------------------------------------------------------------- +bool QGuidoItemContainer::recognizes( const QMimeData * mimeData ) +{ + return mimeData->hasFormat( GMN_CONTAINER_MIME_FLAG ); +} + +//------------------------------------------------------------------------- +bool QGuidoItemContainer::recognizes( const QDomElement * e ) +{ + return ( QVariant( e->attribute( DOM_GUIDO_ITEM_PROPORTIONAL_LAYOUT, "-1" ) ).toInt() != -1 ); +} + +//------------------------------------------------------------------------- +bool QGuidoItemContainer::setCode( const QString& code ) +{ +// bool oldIsValid = isValid(); + + mGuidoItem->setGMNCode(code); + if (!isValid() && QGuidoImporter::musicxmlSupported()) { // try to import file as MusicXML file + std::stringstream out; + if ( QGuidoImporter::musicxmlString2Guido(code.toUtf8().constData(), true, out) ) + { + mGuidoItem->setGMNCode( out.str().c_str() ); + unlinkFile(); + } + } + + QLanguageItem::codeChanged(); + + mPenBrushSwitcher.setActiveSwitch( isValid() ? 0 : SELECTION_SWITCH_INVALID_CODE ); + updateSelectionItem(); + mHasToUpdateDragImage = true; + + if ( mResizer ) + updateResizerColor(); + +#ifdef USES_GUIDO_AR + stop(); + mMidiRef = QGuidoAR::getMidiRef( this->code() ); +#endif + + return isValid(); +} + +//------------------------------------------------------------------------- +void QGuidoItemContainer::descriptiveNameHasChanged() +{ + updateTitleBar(); +} + +//------------------------------------------------------------------------- +bool QGuidoItemContainer::isEqualTo( QLanguageItem * item ) const +{ + if ( !QLanguageItem::isEqualTo(item) ) + return false; + + QGuidoItemContainer* otherContainer = dynamic_cast(item); + if ( !otherContainer ) + return false; + +// if ( mIsOptimalPageFillOn != otherContainer->mIsOptimalPageFillOn ) +// return false; +// if ( mIsProportionalOn != otherContainer->mIsProportionalOn ) +// return false; + +// if ( mGuidoItem->firstVisiblePage()!= other->mGuidoItem->firstVisiblePage()) +// return false; + + return true; +} + +//------------------------------------------------------------------------- +QGuidoGraphicsItem * QGuidoItemContainer::guidoItem() const +{ + return mGuidoItem; +} + +//------------------------------------------------------------------------- +void QGuidoItemContainer::setMinMaxScale(float min , float max) +{ + mMinScale = min; + mMaxScale = max; +} + +//------------------------------------------------------------------------- +// Public slots // +//------------------------------------------------------------------------- + +//------------------------------------------------------------------------- +void QGuidoItemContainer::resized(const QRectF& newRect) +{ + if ( newRect.toRect() == rect().toRect() ) + return; + + + if ( mResizeMode == RESIZE_GRID ) + { + QRectF oldRect = rect(); + mGuidoItem->setGridWidth( mGuidoItem->gridWidth() * newRect.width() / rect().width() + 0.5f ); + mGuidoItem->setGridHeight( mGuidoItem->gridHeight() * newRect.height() / rect().height() + 0.5f ); + guidoGeometryChanged(); + + QSizeF dSize( rect().size() - oldRect.size() ); + moveBy( dSize.width() * ( newRect.x() ? -1 : 0 ) , dSize.height() * ( newRect.y() ? -1 : 0 ) ); + } + else if ( mResizeMode == RESIZE_FORMAT ) + { + QRectF oldRect = rect(); + + GuidoPageFormat f = mGuidoItem->guidoPageFormat(); + f.width = f.width * newRect.width() / rect().width(); + f.height = f.height * newRect.height() / rect().height(); + mGuidoItem->setGuidoPageFormat(f); + + //Control if how the page format was actually supported, + //and set it to its actual value. + if ( rect().toRect() != newRect.toRect() ) //has use int comparison, float isn't reliable + { + f = mGuidoItem->guidoPageFormat(); + f.width = f.width * rect().width() / newRect.width(); + f.height = f.height * rect().height() / newRect.height(); + mGuidoItem->setGuidoPageFormat(f); + } + + QSizeF dSize( rect().size() - oldRect.size() ); + +// moveBy( newRect.x() , newRect.y() ); + moveBy( dSize.width() * ( newRect.x() ? -1 : 0 ) , dSize.height() * ( newRect.y() ? -1 : 0 ) ); + } + else + { + float xScale = mGuidoItem->transform().m11(); + float yScale = mGuidoItem->transform().m22(); + + float dx = newRect.x(); + float dy = newRect.y(); + + float sx = ( newRect.width() / rect().width() ); + float sy = ( newRect.height() / rect().height() ); + + float boundedSx = sx; + float boundedSy = sy; + + if ( mMaxScale ) + boundedSx = qMin( mMaxScale/xScale , boundedSx ); + boundedSx = qMax( mMinScale/xScale , boundedSx ); + if ( mMaxScale ) + boundedSy = qMin( mMaxScale/yScale , boundedSy ); + boundedSy = qMax( mMinScale/yScale , boundedSy ); + + dx = dx * (boundedSx - 1 ) / ( sx - 1 ); + dy = dy * (boundedSy - 1 ) / ( sy - 1 ); + + moveBy( dx , dy ); + +// mGuidoItem->scale( boundedSx , boundedSy ); + mGuidoItem->setTransform(QTransform::fromScale(boundedSx, boundedSy), true); + guidoGeometryChanged(); + + Q_EMIT scaleChanged( mGuidoItem->transform().m11() ); + } + mResizeMode = RESIZE_NORMAL; + if ( mResizer ) + mResizer->setKeepAspectRatio(true); +} + +//------------------------------------------------------------------------- +// Protected slots // +//------------------------------------------------------------------------- + +//------------------------------------------------------------------------- +void QGuidoItemContainer::switchOptimalPageFill() +{ + setOptimalPageFill( !mIsOptimalPageFillOn ); +} + +//------------------------------------------------------------------------- +void QGuidoItemContainer::switchProportional() +{ + setProportional( !mIsProportionalOn ); +} + +//------------------------------------------------------------------------- +void QGuidoItemContainer::switchResizePage() +{ + setResizePageToMusic( !mGuidoItem->isResizePageToMusicOn() ); +} + +//------------------------------------------------------------------------- +// Protected functions // +//------------------------------------------------------------------------- + +/* +* This method is called in subclasses constructors. +* +* Why isn't it called direclty in QGuidoItemContainer constructor ? +* -> because subclasses build a specific QGuidoItem, accessed +* by the pure virtual QGuidoItemContainer::mGuidoItem, +* and used in QGuidoItemContainer::init(). +* -> this design has pros (one initialisation code for the mGuidoItem) +* and cons (subclasses MUST call the baseclass's init function) +*/ +//------------------------------------------------------------------------- +void QGuidoItemContainer::init() +{ + mGuidoItem = new QGuidoGraphicsItem( this ); + +#if !linux // bug in Qt 4.4 with the linux cache mode + mGuidoItem->setCacheMode( QGraphicsItem::DeviceCoordinateCache ); +#endif + +#ifdef USES_GUIDO_AR + mMidiRef = -1; + mPlayerState = STOPPED; + + QLanguageItem::plug( new QPaletteItemDropper( PALETTE_GUIDO_ELEMENT , QList() << PALETTE_GUIDO_ELEMENT , this , this ) ); +#endif + + connect( mGuidoItem , SIGNAL(geometryHasChanged()), this, SLOT(guidoGeometryChanged()) ); + + mIsProportionalOn = DEFAULT_PROPORTIONAL; + mIsOptimalPageFillOn = DEFAULT_OPTIMAL_PAGE_FILL; + mGuidoItem->setResizePageToMusic( DEFAULT_RESIZE_PAGE ); + + setMinMaxScale(0,0); + + mHeadBar = new QTextPathItem( "" , true , TITLE_BAR_FONT_COLOR , TITLE_BAR_FONT , TITLE_BAR_FONT_PEN_WIDTH , this ); + mHeadBar->setZValue( 1 ); + + mSelectionItem = new QGraphicsPathItem(this); + mSelectionItem->setZValue(-1); + + setAcceptHoverEvents(true); + + connect( this , SIGNAL(descriptiveNameChanged()) , this, SLOT(descriptiveNameHasChanged()) ); + + // Set pens & brushes + mPenBrushSwitcher.addFlag( SELECTION_FLAG_SELECTED , 2 , PenBrush(SELECTED_PEN , SELECTED_BRUSH ) ); + mPenBrushSwitcher.addFlag( SELECTION_FLAG_HIGHLIGHTED , 1 , PenBrush(HIGHLIGHTED_PEN , HIGHLIGHTED_BRUSH ) ); + mPenBrushSwitcher.addFlag( SELECTION_FLAG_IDLE , 0, PenBrush(STANDARD_PEN , STANDARD_BRUSH ) ); + mPenBrushSwitcher.setFlag( SELECTION_FLAG_IDLE , true ); + mPenBrushSwitcher.setSwitchedFlag(SELECTION_FLAG_IDLE, SELECTION_SWITCH_INVALID_CODE, PenBrush(INVALID_PEN, INVALID_STANDARD_BRUSH ) ); + mPenBrushSwitcher.setSwitchedFlag(SELECTION_FLAG_HIGHLIGHTED, SELECTION_SWITCH_INVALID_CODE, PenBrush(INVALID_PEN, INVALID_HIGHLIGHTED_BRUSH ) ); + mPenBrushSwitcher.setSwitchedFlag(SELECTION_FLAG_SELECTED, SELECTION_SWITCH_INVALID_CODE, PenBrush(INVALID_PEN, INVALID_BRUSH_SELECTED ) ); + +//Imported from QGuidoSPageItemContainer + mNextPageTurner = new QPageTurnerItem( true, QPolygonF() , this ); + mPreviousPageTurner = new QPageTurnerItem( false, QPolygonF() , this ); + + mNextPageTurner->setZValue(4); + mPreviousPageTurner->setZValue(4); + + mPageLabelItem = new QTextPathItem( "" , true , Qt::black , QFont(FONT_FAMILY , FONT_SIZE) , 1 , this ); + mPageLabelItem->setZValue(2); + + //Visibility controlled in updatePageItemsVisibility, only for non-storage items. + mPageLabelItem->setVisible( false ); + mNextPageTurner->setVisible(false); + mPreviousPageTurner->setVisible(false); + + //Set pen + QPen pen = QPen( Qt::black ); + pen.setJoinStyle( Qt::RoundJoin ); + pen.setWidth( ARROW_PEN_WIDTH ); + mNextPageTurner->setBrush( SELECTED_BRUSH ); + mPreviousPageTurner->setBrush( SELECTED_BRUSH ); + mNextPageTurner->setPen( pen ); + mPreviousPageTurner->setPen( pen ); + + mPageLabelItem->setPen( SELECTED_PEN ); + mPageLabelItem->setBrush( SELECTED_BRUSH ); + updatePageIndexLabel(); + + guidoUpdateGeometry( INVALID_RECT ); + + mResizeMode = RESIZE_NORMAL; + mResizer = 0; +} + +//------------------------------------------------------------------------- +void QGuidoItemContainer::init(const QMimeData * mimeData) +{ + init(); + loadFromMimeData(mimeData); +} + +//------------------------------------------------------------------------- +void QGuidoItemContainer::init(const QDomElement * domElement) +{ + init(); + loadFromDomElement(domElement); +} + +//------------------------------------------------------------------------- +void QGuidoItemContainer::init(const QGuidoItemContainer * other) +{ + init(); + loadFromOtherContainer(other); +} + +//------------------------------------------------------------------------- +void QGuidoItemContainer::loadFromMimeData( const QMimeData * mimeData ) +{ + load( mimeData ); + + if ( mimeData->hasFormat(GMN_CONTAINER_MIME_PROPORTIONAL_ON) ) + mIsProportionalOn = mimeData->data( GMN_CONTAINER_MIME_PROPORTIONAL_ON ).toInt(); + else + mIsProportionalOn = DEFAULT_PROPORTIONAL; + + if ( mimeData->hasFormat(GMN_CONTAINER_MIME_OPTIMAL_PAGE_FILL_ON) ) + mIsOptimalPageFillOn = mimeData->data( GMN_CONTAINER_MIME_OPTIMAL_PAGE_FILL_ON ).toInt(); + else + mIsOptimalPageFillOn = DEFAULT_OPTIMAL_PAGE_FILL; + + if ( mimeData->hasFormat(GMN_CONTAINER_MIME_RESIZE_PAGE_ON) ) + setResizePageToMusic( mimeData->data( GMN_CONTAINER_MIME_RESIZE_PAGE_ON ).toInt() ); + else + setResizePageToMusic( DEFAULT_RESIZE_PAGE ); + + + if ( mimeData->hasFormat( GMN_CONTAINER_MIME_SCALE ) ) + { + float scale = mimeData->data( GMN_CONTAINER_MIME_SCALE ).toDouble(); + resize( scale , scale ); + } + + updateLayoutSettings(); + + mGuidoItem->setGridWidth( mimeData->data( GMN_CONTAINER_MIME_GRID_WIDTH ).toInt() ); + mGuidoItem->setGridHeight( mimeData->data( GMN_CONTAINER_MIME_GRID_HEIGHT ).toInt() ); + setCurrentPage( mimeData->data( GMN_CONTAINER_MIME_PAGE_INDEX ).toInt() ); +} + +//------------------------------------------------------------------------- +void QGuidoItemContainer::loadFromOtherContainer( const QGuidoItemContainer * otherContainer ) +{ + setResizePageToMusic( otherContainer->mGuidoItem->isResizePageToMusicOn() ); + load( otherContainer ); + mIsOptimalPageFillOn = otherContainer->mIsOptimalPageFillOn; + mIsProportionalOn = otherContainer->mIsProportionalOn; + +// mGuidoItem->scale( otherContainer->mGuidoItem->transform().m11() , otherContainer->mGuidoItem->transform().m22() ); + mGuidoItem->setTransform(QTransform::fromScale(otherContainer->mGuidoItem->transform().m11(), otherContainer->mGuidoItem->transform().m22()), true); + + updateLayoutSettings(); + mGuidoItem->setGridWidth(otherContainer->mGuidoItem->gridWidth()); + mGuidoItem->setGridHeight(otherContainer->mGuidoItem->gridHeight()); + setCurrentPage( otherContainer->mGuidoItem->firstVisiblePage()); +} + +//------------------------------------------------------------------------- +void QGuidoItemContainer::loadFromDomElement( const QDomElement * e) +{ + if ( e->tagName() != DOM_LANGUAGE_ITEM ) + return; + + mIsProportionalOn = QVariant( e->attribute( DOM_GUIDO_ITEM_PROPORTIONAL_LAYOUT, "#DEFAULT_PROPORTIONAL" ) ).toBool(); + mIsOptimalPageFillOn = QVariant( e->attribute( DOM_GUIDO_ITEM_OPTIMAL_PAGE_FILL, "#DEFAULT_OPTIMAL_PAGE_FILL" ) ).toBool(); + setResizePageToMusic( QVariant( e->attribute( DOM_GUIDO_ITEM_RESIZE_PAGE_ON, "#DEFAULT_RESIZE_PAGE" ) ).toBool() ); + + load( e ); + + float scale = QVariant( e->attribute( DOM_GUIDO_ITEM_SCALE, "1" ) ).toDouble(); + resize( scale , scale ); + + updateLayoutSettings(); + + int currentPage = QVariant( e->attribute( DOM_GUIDO_ITEM_CURRENT_PAGE, "1" ) ).toInt(); + int gridWidth = QVariant( e->attribute( DOM_GUIDO_ITEM_GRID_WIDTH, "1" ) ).toInt(); + int gridHeight = QVariant( e->attribute( DOM_GUIDO_ITEM_GRID_HEIGHT, "1" ) ).toInt(); + mGuidoItem->setGridWidth(gridWidth); + mGuidoItem->setGridHeight(gridHeight); + setCurrentPage( currentPage ); +} + +//------------------------------------------------------------------------- +QMenu * QGuidoItemContainer::buildContextMenu() +{ + QMenu * menu = QLanguageItem::buildContextMenu(); + + QAction * exportAct = new QAction( "Export" , this ); + connect( exportAct , SIGNAL( triggered() ) , this , SIGNAL( exportItem() ) ); + menu->addAction( exportAct ); + + QMenu * layoutMenu = menu->addMenu( CONTEXT_MENU_LAYOUT ); + layoutMenu->setObjectName( CONTEXT_MENU_LAYOUT ); + + //Layout actions :Proportional layout + QString layoutProportionalMsg = QString("Switch ") + ( mIsProportionalOn ? "OFF" : "ON" ) + " Proportionnal layout"; + QAction * layoutProportionalSwitch = new QAction( layoutProportionalMsg , layoutMenu ); + connect( layoutProportionalSwitch , SIGNAL(triggered()) , this , SLOT(switchProportional()) ); + layoutMenu->addAction(layoutProportionalSwitch); + + //Layout actions : Optimal page fill + QString layoutOptimalPageFillMsg = QString("Switch ") + ( mIsOptimalPageFillOn ? "OFF" : "ON" ) + " Optimal page fill"; + QAction * layoutOptimalPageFillSwitch = new QAction( layoutOptimalPageFillMsg , layoutMenu ); + connect( layoutOptimalPageFillSwitch , SIGNAL(triggered()) , this , SLOT(switchOptimalPageFill()) ); + layoutMenu->addAction(layoutOptimalPageFillSwitch); + + //Layout actions : Auto-resizePageToMusic + QString layoutResizePageMsg = QString("Switch ") + ( mGuidoItem->isResizePageToMusicOn() ? "OFF" : "ON" ) + " Auto Resize-Page"; + QAction * layoutResizePageSwitch = new QAction( layoutResizePageMsg , layoutMenu ); + connect( layoutResizePageSwitch , SIGNAL(triggered()) , this , SLOT(switchResizePage()) ); + layoutMenu->addAction(layoutResizePageSwitch); + +//"Change the current page" actions. + QAction * firstPage = new QAction( "First page" , this ); + QAction * previousPage = new QAction( "Previous page" , this ); + QAction * nextPage = new QAction( "Next page" , this ); + QAction * lastPage = new QAction( "Last page" , this ); + + connect(firstPage , SIGNAL(triggered()) , this , SLOT(firstPage()) ); + connect(previousPage , SIGNAL(triggered()) , this , SLOT(previousPage()) ); + connect(nextPage , SIGNAL(triggered()) , this , SLOT(nextPage()) ); + connect(lastPage , SIGNAL(triggered()) , this , SLOT(lastPage()) ); + + layoutMenu->addAction( newSeparator(this) ); + layoutMenu->addAction(firstPage); + layoutMenu->addAction(previousPage); + layoutMenu->addAction(nextPage); + layoutMenu->addAction(lastPage); + +/* + bool onceOnly = false; + for ( int i = 0 ; i < menu->actions().size() ; i++ ) + { + if ( menu->actions()[i]->data().toString() == CONTEXT_MENU_LAYOUT ) + { + if ( !onceOnly ) + { + layoutMenu->addSeparator(); + onceOnly = true; + } +// qDebug("QGuidoItemContainer::buildContextMenu() : action removed from menu and added to "); + layoutMenu->addAction( menu->actions()[i] ); + menu->actions()[i]->setParent( layoutMenu ); + menu->removeAction( menu->actions()[i] ); + i--; + } + } +*/ + + return menu; +} + +//------------------------------------------------------------------------- +QImage* QGuidoItemContainer::buildDragImage() +{ + return new QImage( itemToImage( mSelectionItem , 1.0f , 0 , true ) ); +} + +//------------------------------------------------------------------------- +void QGuidoItemContainer::exportToPdf( QPrinter * printer ) +{ + int originalPage = mGuidoItem->firstVisiblePage(); + + mGuidoItem->setPage(1); + QRectF firstPageRect = guidoItem()->boundingRect(); + printer->setPaperSize( QSizeF( firstPageRect.width() , firstPageRect.height() ) , QPrinter::Millimeter ); + + QPainter painter; + painter.begin( printer ); + + painter.setWindow( firstPageRect.toRect() ); + + int pCount = mGuidoItem->pageCount(); + for ( int page = 1 ; page <= pCount ; page++ ) + { + QRectF rect = guidoItem()->boundingRect(); + + QStyleOptionGraphicsItem option; + option.exposedRect = rect; + mGuidoItem->paint( &painter , &option , 0 ); + + if (page != pCount) + { + mGuidoItem->setPage(page+1); + rect = guidoItem()->boundingRect(); + + printer->newPage(); + } + } + painter.end(); + + mGuidoItem->setPage( originalPage ); +} + +//------------------------------------------------------------------------- +void QGuidoItemContainer::updateLayoutSettings() +{ + GuidoLayoutSettings settings = mGuidoItem->guidoLayoutSettings(); + + settings.optimalPageFill = ( mIsOptimalPageFillOn ) ? 1 : 0; + settings.force = ( mIsProportionalOn ) ? PROPORTIONAL_FORCE : NO_PROPORTIONAL_FORCE; + settings.spring = ( mIsProportionalOn ) ? PROPORTIONAL_SPRING : NO_PROPORTIONAL_SPRING; + + mGuidoItem->setGuidoLayoutSettings( settings ); +} + +//------------------------------------------------------------------------- +void QGuidoItemContainer::setOptimalPageFill(bool isOptimalPageFillOn) +{ + mIsOptimalPageFillOn = isOptimalPageFillOn; + updateLayoutSettings(); +} + +//------------------------------------------------------------------------- +void QGuidoItemContainer::setResizePageToMusic(bool isResizePageOn) +{ + mGuidoItem->setResizePageToMusic(isResizePageOn); +} + +//------------------------------------------------------------------------- +void QGuidoItemContainer::setProportional(bool isProportionalOn) +{ + mIsProportionalOn = isProportionalOn; + updateLayoutSettings(); +} + +//------------------------------------------------------------------------- +QMimeData * QGuidoItemContainer::buildMimeData() +{ + QMimeData * data = QLanguageItem::buildMimeData(); + data->setData( GMN_CONTAINER_MIME_FLAG , 0 ); + data->setData( GMN_CONTAINER_MIME_PROPORTIONAL_ON , QByteArray::number(mIsProportionalOn) ); + data->setData( GMN_CONTAINER_MIME_OPTIMAL_PAGE_FILL_ON , QByteArray::number(mIsOptimalPageFillOn) ); + data->setData( GMN_CONTAINER_MIME_RESIZE_PAGE_ON , QByteArray::number(mGuidoItem->isResizePageToMusicOn()) ); + data->setData( GMN_CONTAINER_MIME_SCALE , QByteArray::number(mGuidoItem->transform().m11() ) ); + + data->setData( GMN_CONTAINER_MIME_PAGE_INDEX , QByteArray::number( mGuidoItem->firstVisiblePage()) ); + data->setData( GMN_CONTAINER_MIME_GRID_WIDTH , QByteArray::number( mGuidoItem->gridWidth()) ); + data->setData( GMN_CONTAINER_MIME_GRID_HEIGHT , QByteArray::number( mGuidoItem->gridHeight()) ); + return data; +} + +//------------------------------------------------------------------------- +void QGuidoItemContainer::updateTitleBarVisibility() +{ +// mHeadBar->setVisible( ( mPenBrushSwitcher.isFlagOn( SELECTION_FLAG_HIGHLIGHTED ) || isSelected() ) && file().length() && ( mHeadBar->textItem()->boundingRect().height() < rect().height() ) ); + mHeadBar->setVisible( false ); +} + +//------------------------------------------------------------------------- +void QGuidoItemContainer::updateTitleBar() +{ + int barHeight = QFontMetrics( mHeadBar->textItem()->font() ).height(); + + QPainterPath path; + path.moveTo( 0 , barHeight ); + path.arcTo( QRect(0,0,ROUNDED_RECT_RADIUS * 2 , ROUNDED_RECT_RADIUS * 2) , 180 , -90 ); + path.lineTo( rect().width() - ROUNDED_RECT_RADIUS * 2 , 0 ); + path.arcTo( QRect( path.currentPosition().x() , path.currentPosition().y() ,ROUNDED_RECT_RADIUS * 2 , ROUNDED_RECT_RADIUS * 2) , 90 , -90 ); + path.lineTo( rect().width() , barHeight ); + path.closeSubpath(); + + mHeadBar->setPath( path ); + + updateTitleText(); + updateTitleBarVisibility(); +} + +//------------------------------------------------------------------------- +void QGuidoItemContainer::updateTitleText() +{ + if ( !file().length() ) + return; + + if ( !rect().isValid() ) + return; + + mHeadBar->setText( getDescriptiveFileName() ); +} + +//------------------------------------------------------------------------- +void QGuidoItemContainer::updateSyntaxErrorItem() +{ +/* + QPainterPath path; + path.addRoundedRect( rect() , mRoundedRectRadius , mRoundedRectRadius ); + mSyntaxErrorItem->setPath( path ); +*/ +} + +//------------------------------------------------------------------------- +void QGuidoItemContainer::updateSelectionItem() +{ + mSelectionItem->setPen( mPenBrushSwitcher.activeObject().mPen ); + mSelectionItem->setBrush( mPenBrushSwitcher.activeObject().mBrush ); + mHeadBar->setPen( mPenBrushSwitcher.activeObject().mPen ); + mHeadBar->setBrush( mPenBrushSwitcher.activeObject().mBrush ); +} + +//------------------------------------------------------------------------- +void QGuidoItemContainer::setFile(const QString& fileName) +{ + QLanguageItem::setFile(fileName); + updateTitleText(); + updateTitleBarVisibility(); +} + +//------------------------------------------------------------------------- +void QGuidoItemContainer::keyPressEvent ( QKeyEvent * event ) +{ + if ( mIsStorageModeOn ) + return; + + QLanguageItem::keyPressEvent( event ); + int key = event->key(); + if ( ( key == Qt::Key_PageUp ) + || ( key == Qt::Key_PageDown ) + ) + { + int pageIncrement; + switch (key) + { + case Qt::Key_PageUp: pageIncrement = -1; break; + case Qt::Key_PageDown: pageIncrement = 1; break; + default: pageIncrement = 0; break; + } + if ( pageIncrement == 1 ) + nextPage(); + else + previousPage(); + + event->accept(); + } + else if ( key == Qt::Key_G ) + { + mResizeMode = RESIZE_GRID; + mResizer->setKeepAspectRatio(false); + event->accept(); + } + else if ( key == Qt::Key_F ) + { + mResizeMode = RESIZE_FORMAT; + mResizer->setKeepAspectRatio(false); + event->accept(); + } + else + { + event->ignore(); + } +} + +//------------------------------------------------------------------------- +void QGuidoItemContainer::setResizer( QItemResizer* resizer ) +{ + mResizer = resizer; + updateResizerColor(); +} + +//------------------------------------------------------------------------- +void QGuidoItemContainer::updatePageItemsVisibility() +{ + if ( mIsStorageModeOn ) + return; + + int firstVisiblePage = mGuidoItem->firstVisiblePage(); + int lastVisiblePage = mGuidoItem->lastVisiblePage(); + int pageCount = mGuidoItem->pageCount(); + mNextPageTurner->setVisible ( mGuidoItem->isGMNValid() && isSelected() && ( pageCount > lastVisiblePage ) ); + mPreviousPageTurner->setVisible ( mGuidoItem->isGMNValid() && isSelected() && ( firstVisiblePage > 1 ) ); + mPageLabelItem->setVisible ( mGuidoItem->isGMNValid() && isSelected() && !((mGuidoItem->firstVisiblePage()==1) && (mGuidoItem->lastVisiblePage()==mGuidoItem->pageCount())) ); +} + +//------------------------------------------------------------------------- +void QGuidoItemContainer::updatePageIndexLabel() +{ +// qDebug() << "updatePageIndexLabel() : " << mGuidoItem->firstVisiblePage() << "-" << mGuidoItem->lastVisiblePage() << "/" << mGuidoItem->pageCount() ; + + //Updates the page index item. + QString pageLabel; + if ( mGuidoItem->firstVisiblePage() != mGuidoItem->lastVisiblePage() ) + QTextStream(&pageLabel) << mGuidoItem->firstVisiblePage() << "-" << mGuidoItem->lastVisiblePage() << "/" << mGuidoItem->pageCount() ; + else + QTextStream(&pageLabel) << mGuidoItem->firstVisiblePage() << "/" << mGuidoItem->pageCount() ; + + QFontMetrics fontMetrics( mPageLabelItem->textItem()->font() ); + QRect pageLabelRect = fontMetrics.boundingRect( pageLabel ); + pageLabelRect.moveTo( rect().width() , rect().height() ); + pageLabelRect.translate( -pageLabelRect.width() + PAGE_LABEL_RECT_OUT_WIDTH , -pageLabelRect.height() + PAGE_LABEL_RECT_OUT_HEIGHT ); + pageLabelRect.translate(-5,-2); + pageLabelRect.setWidth( pageLabelRect.width() + 10 ); + pageLabelRect.setHeight( pageLabelRect.height() + 4 ); + QPainterPath pageLabelPath; + pageLabelPath.addRoundedRect( pageLabelRect , ROUNDED_RECT_RADIUS , ROUNDED_RECT_RADIUS ); + if ( mPageLabelItem->path() != pageLabelPath ) + mPageLabelItem->setPath( pageLabelPath ); + + mPageLabelItem->setText(pageLabel); +} + +//------------------------------------------------------------------------- +void QGuidoItemContainer::updateResizerColor() +{ + mResizer->setPen( isValid() ? SELECTED_PEN : INVALID_PEN ); + mResizer->setBrush( isValid() ? HIGHLIGHTED_BRUSH : INVALID_STANDARD_BRUSH ); +} + +//------------------------------------------------------------------------- +void QGuidoItemContainer::setCurrentPage(int page) +{ + mGuidoItem->setPage(page); + + guidoGeometryChanged(); +} + +//------------------------------------------------------------------------- +void QGuidoItemContainer::firstPage() +{ + if ( mGuidoItem->firstVisiblePage()!= 1 ) + setCurrentPage(1); +} + +//------------------------------------------------------------------------- +void QGuidoItemContainer::previousPage() +{ + int currentPage = mGuidoItem->firstVisiblePage(); + if ( currentPage - 1 >= 1 ) + setCurrentPage( currentPage - 1 ); +} + +//------------------------------------------------------------------------- +void QGuidoItemContainer::nextPage() +{ + int currentPage = mGuidoItem->firstVisiblePage(); + if ( currentPage + 1 <= mGuidoItem->pageCount() ) + setCurrentPage( currentPage + 1 ); +} + +//------------------------------------------------------------------------- +void QGuidoItemContainer::lastPage() +{ + int currentPage = mGuidoItem->firstVisiblePage(); + int pageCount = mGuidoItem->pageCount(); + if ( currentPage != pageCount ) + setCurrentPage( pageCount ); +} + +//------------------------------------------------------------------------- +QPolygonF getRightArrowPolygon(const QRectF& boundingRect) +{ + QVector rightPoints; + rightPoints << QPointF(0,0) << QPointF(-PAGE_TURNER_ARROW_SIZE,-PAGE_TURNER_ARROW_SIZE) << QPointF(-PAGE_TURNER_ARROW_SIZE,PAGE_TURNER_ARROW_SIZE); + QPolygonF rightPolygon( rightPoints ); + rightPolygon.translate( boundingRect.width() + PAGE_TURNER_ARROW_SIZE/2 , boundingRect.height() / 2 ); + return rightPolygon; +} + +//------------------------------------------------------------------------- +QPolygonF getLeftArrowPolygon(const QRectF& boundingRect) +{ + QVector leftPoints; + leftPoints << QPointF(0,0) << QPointF(PAGE_TURNER_ARROW_SIZE,-PAGE_TURNER_ARROW_SIZE) << QPointF(PAGE_TURNER_ARROW_SIZE,PAGE_TURNER_ARROW_SIZE); + QPolygonF leftPolygon( leftPoints ); + leftPolygon.translate( 0 - PAGE_TURNER_ARROW_SIZE/2, boundingRect.height() / 2 ); + return leftPolygon; +} + +//------------------------------------------------------------------------- +QVariant QGuidoItemContainer::itemChange( GraphicsItemChange change, const QVariant& value ) +{ + QVariant standardResult = QLanguageItem::itemChange( change , value ); + + if ( change == QGraphicsItem::ItemSelectedHasChanged ) + { + updateTitleBarVisibility(); + mPenBrushSwitcher.setFlag( SELECTION_FLAG_SELECTED , value.toBool() ); + updateSelectionItem(); + updatePageItemsVisibility(); + } + return standardResult; +} + +//------------------------------------------------------------------------- +void QGuidoItemContainer::hoverEnterEvent ( QGraphicsSceneHoverEvent * e ) +{ + QLanguageItem::hoverEnterEvent(e); + + mPenBrushSwitcher.setFlag( SELECTION_FLAG_HIGHLIGHTED , true ); + updateSelectionItem(); + + updateTitleBarVisibility(); +} + +//------------------------------------------------------------------------- +void QGuidoItemContainer::hoverLeaveEvent ( QGraphicsSceneHoverEvent * e ) +{ + QLanguageItem::hoverLeaveEvent(e); + + mPenBrushSwitcher.setFlag( SELECTION_FLAG_HIGHLIGHTED , false ); + updateSelectionItem(); + updateTitleBarVisibility(); +} + +/* +* The mGuidoItem geometry has changed, for various reasons (codeChanged, layout, pages alignment, ...) +* so the QGuidoItemContainer compute its new size (for now, uses the new size of mGuidoItem) +* and call updateGeometry(QRect) with it. +* +* This method doesn't exists in QLanguageItem. +*/ +//------------------------------------------------------------------------- +void QGuidoItemContainer::guidoGeometryChanged() +{ +// if ( isValid() ) +// { + QRectF itemRect = mGuidoItem->boundingRect(); + if ( ( itemRect.width() <= 0 ) || ( itemRect.height() <= 0 ) ) + itemRect = INVALID_RECT; + + QRectF newGeometry = mapFromItem( mGuidoItem , itemRect ).boundingRect(); + if ( newGeometry != rect() ) + { + guidoUpdateGeometry(newGeometry); + } + //Updates page-turn arrows visibility + updatePageItemsVisibility(); + + //Updates page label + updatePageIndexLabel(); +// } +} + +//------------------------------------------------------------------------- +void QGuidoItemContainer::guidoUpdateGeometry(const QRectF& newGeometry) +{ + QLanguageItem::updateGeometry( newGeometry ); + + QPainterPath p; + p.addRoundedRect( newGeometry , ROUNDED_RECT_RADIUS , ROUNDED_RECT_RADIUS ); + mSelectionItem->setPath(p); + + updateTitleBar(); + updateSyntaxErrorItem(); + + //Updates page-turn arrows positions + mNextPageTurner->setPolygon( getRightArrowPolygon(newGeometry) ); + mPreviousPageTurner->setPolygon( getLeftArrowPolygon(newGeometry) ); +} + +//------------------------------------------------------------------------- +void QGuidoItemContainer::resize( float xScale , float yScale ) +{ + resized( QRectF( 0, 0, xScale * rect().width() , yScale * rect().height()) ); +} + +//------------------------------------------------------------------------ +// Guido AR section (palette stuff, guido2midi) // +//------------------------------------------------------------------------ + +#ifdef USES_GUIDO_AR + +//------------------------------------------------------------------------- +void QGuidoItemContainer::play() +{ + + if ( mMidiRef == -1 ) + { + stop(); + mMidiRef = QGuidoAR::getMidiRef(mGuidoItem->gmnCode()); + } + + if ( mPlayerState == PAUSED ) + QGuidoAR::midiResume(mMidiRef); + else + QGuidoAR::midiPlay(mMidiRef); + + mPlayerState = PLAYING; + +} + +//------------------------------------------------------------------------- +void QGuidoItemContainer::pause() +{ + + if ( mMidiRef != -1 ) + { + QGuidoAR::midiPause(mMidiRef); + mPlayerState = PAUSED; + } + +} + +//------------------------------------------------------------------------- +void QGuidoItemContainer::stop() +{ + + if ( mMidiRef != -1 ) + { + QGuidoAR::midiStop(mMidiRef); + mPlayerState = STOPPED; + mMidiRef = -1; + } + +} + +#endif diff --git a/guidoar-dev/guidocalculus/src/GuidoItemContainer/QGuidoItemContainer.h b/guidoar-dev/guidocalculus/src/GuidoItemContainer/QGuidoItemContainer.h new file mode 100644 index 000000000..42ce459e5 --- /dev/null +++ b/guidoar-dev/guidocalculus/src/GuidoItemContainer/QGuidoItemContainer.h @@ -0,0 +1,317 @@ +/* + * QGuidoItemContainer.h + * + * Created by Christophe Daudin on 12/05/09. + * Copyright 2009 Grame. All rights reserved. + * + * GNU Lesser General Public License Usage + * Alternatively, this file may be used under the terms of the GNU Lesser + * General Public License version 2.1 as published by the Free Software + * Foundation and appearing in the file LICENSE.LGPL included in the + * packaging of this file. Please review the following information to + * ensure the GNU Lesser General Public License version 2.1 requirements + * will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. + * + * + * This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE + * WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + */ +#ifndef GUIDO_ITEM_CONTAINER_H +#define GUIDO_ITEM_CONTAINER_H + +#include "QLanguageItem.h" + +#include "QGuidoGraphicsItem.h" +#include "QSwitcher.h" + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#define GMN_CONTAINER_MIME_PROPORTIONAL_ON "GMNContainerMimeTypeProportionalOn" +#define GMN_CONTAINER_MIME_OPTIMAL_PAGE_FILL_ON "GMNContainerMimeTypeOptimalPageFillOn" +#define GMN_CONTAINER_MIME_RESIZE_PAGE_ON "GMNContainerMimeTypeResizePageOn" +#define GMN_CONTAINER_MIME_DISPLAY_TYPE "GMNContainerMimeTypeDisplayType" +#define GMN_CONTAINER_MIME_SCALE "GMNContainerMimeTypeScale" + +#define DOM_GUIDO_ITEM_PAGE_MODE "mode" +#define DOM_GUIDO_ITEM_ORIENTATION "orientation" +#define DOM_GUIDO_ITEM_OPTIMAL_PAGE_FILL "optimalPageFill" +#define DOM_GUIDO_ITEM_PROPORTIONAL_LAYOUT "proportionalLayout" +#define DOM_GUIDO_ITEM_RESIZE_PAGE_ON "resizePage" +#define DOM_GUIDO_ITEM_DISPLAY_TYPE "displayType" +#define DOM_GUIDO_ITEM_SCALE "scale" + +//#define BASE_RGB 125,200,245 +#define BASE_RGB 197,214,255 +#define INVALID_RGB 250,20,20 +#define BASE_COLOR QColor(BASE_RGB) +#define ALPHA_0 150 +#define ALPHA_1 80 +#define ALPHA_2 50 +#define ALPHA_3 20 +#define SELECTED_PEN QPen( QColor( BASE_RGB ) ) +#define SELECTED_BRUSH QBrush( QColor( BASE_RGB , ALPHA_1 ) ) +#define HIGHLIGHTED_PEN QPen( QColor( BASE_RGB ) ) +#define HIGHLIGHTED_BRUSH QBrush( QColor( BASE_RGB , ALPHA_2 ) ) +//#define STANDARD_PEN QPen( QColor( BASE_RGB , ALPHA_0 ) ) +#define STANDARD_PEN Qt::NoPen +#define STANDARD_BRUSH Qt::NoBrush +#define INVALID_PEN Qt::NoPen +#define INVALID_STANDARD_BRUSH QBrush( QColor( INVALID_RGB , ALPHA_3 ) ) +#define INVALID_HIGHLIGHTED_BRUSH QBrush( QColor( INVALID_RGB , ALPHA_2 ) ) +#define INVALID_BRUSH_SELECTED QBrush( QColor( INVALID_RGB , ALPHA_1 ) ) +#define ROUNDED_RECT_RADIUS 5 + +#define CONTEXT_MENU_LAYOUT "Layout" + +#ifdef USES_GUIDO_AR + class QPaletteItem; + class QPaletteItemDropper; + +#define PALETTE_GUIDO_ELEMENT 1 + +#endif + +class QPageTurnerItem; +class QTextPathItem; +class QItemResizer; + +/** +* \brief A specialization of QSelectionItem that only works with QGuidoItem. +* It ads functionnalities to its child QGuidoItem : +* +* - adds a contextual menu to navigate through the pages of the score when +* the decorated item is a QGuidoPageGraphicsItem +* - adds a contextual menu to switch the pagesAlignment of the decorated item +* - adds a contextual menu to emit a switchMode signal, requesting for a change +* of the decorated class. (QGuidoItem <-> QGuidoPageGraphicsItem) +* +* You can dynamically add a QResizerItem or a QPaletteItem, in which case the QGuidoItemContainer +* will emit the rescaleItem & combineItem signals when necessary. +* +* \note In order that the QGuidoItemContainer catches UI events (mouse & keyboard) for the +* the decorated QGuidoItem, the decorated QGuidoItem flags +* QGraphicsItem::ItemIsSelectable and QGraphicsItem::ItemIsFocusable must remain disabled. +*/ +class QGuidoItemContainer : public QLanguageItem +{ + Q_OBJECT + + public: + + /** + * \brief Constructor. + */ + QGuidoItemContainer(QGraphicsItem * parent); + QGuidoItemContainer(const QMimeData * mimeData , QGraphicsItem * parent); + QGuidoItemContainer(const QDomElement * domElement , QGraphicsItem * parent); + QGuidoItemContainer(const QGuidoItemContainer * other , QGraphicsItem * parent); + + virtual ~QGuidoItemContainer(); + + /** + * \brief Exports the Guido Score to pdf-file 'fileName'. + */ + void exportToPdf(const QString& fileName); + + /*! + * \brief Create a new QDomElement storing the properties of the QGuidoItemContainer. + * + * \note The QDomElement may be further used to setup another QGuidoItemContainer, using QGuidoItemContainer::loadFromDomElement. + */ + virtual QDomElement saveToDomElement( QDomDocument * doc); + static bool recognizes(const QMimeData * data); + static bool recognizes( const QDomElement * e ); + + virtual bool setCode( const QString& code ); + virtual QString code() const { return guidoItem()->gmnCode(); } + + virtual bool isValid() const { return guidoItem()->isGMNValid(); } + virtual QString lastErrorMessage() const { return guidoItem()->getLastErrorMessage(); } + + float currentScale() const { return guidoItem()->transform().m11(); } + + /*! + * \brief QGuidoItemContainer comparator. + */ + virtual bool isEqualTo( QLanguageItem * item ) const; + + /** + * \brief Getter to the contained QGuidoItem. + */ + //Note : hack. Will be removed when the Qt bug with linux & QGraphicsItem::setCacheMode will be solved. + virtual QGuidoGraphicsItem * guidoItem() const; + + /*! + * \brief Sets the min/max scale used to set bounds to the QItemResizer. + */ + void setMinMaxScale(float min , float max); + + void keyPressEvent ( QKeyEvent * event ); + + void setResizer( QItemResizer* resizer ); + + public Q_SLOTS : + + void resized(const QRectF& newRect); + + void switchOptimalPageFill(); + void switchProportional(); + void switchResizePage(); + + void firstPage(); + void previousPage(); + void nextPage(); + void lastPage(); + + protected Q_SLOTS : + + virtual void guidoGeometryChanged(); + void descriptiveNameHasChanged(); + + Q_SIGNALS: + + /*! + * \brief Emitted when the item asks to be exported. + */ + void exportItem(); + + protected: + + virtual void init(); + void init(const QMimeData * mimeData); + void init(const QDomElement * domElement); + void init(const QGuidoItemContainer * other); + + /*! + * \brief Sets the properties of the QGuidoItemContainer according to the content of the QDomElement. + * + * \note QGuidoItemContainer::saveToDomElement is the symmetrical function. + * This method never fails, thanks to a default-value policy. + */ + virtual void loadFromDomElement( const QDomElement * ); + + /*! + * \brief Sets the properties of the QGuidoItemContainer according to the content of the QMimeData. + * + * \note QGuidoItemContainer::buildMimeData is the symmetrical function. + * This method never fails, thanks to a default-value policy. + */ + virtual void loadFromMimeData( const QMimeData * mimeData ); + + /*! + * \brief Sets the properties of the QGuidoItemContainer according to the content of the otherContainer. + * + * It doesn't matter if the other QGuidoItemContainer is a different derived class : in this case, + * only the common attributes are imported. + */ + virtual void loadFromOtherContainer( const QGuidoItemContainer * otherContainer ); + + /*! + * \brief Returns the action list for contextual menu. Subclasses may extend this function. + */ + virtual QMenu* buildContextMenu(); + + /*! + * \brief QLanguageItem implementation. + */ + QImage* buildDragImage(); + + /*! + * \brief Print the contained QGuidoItem on the QPrinter. Pure virtual. + */ + void exportToPdf( QPrinter * printer ); + + /*! + * \brief Updates the layoutSettings of the contained QGuidoItem according to mIsProportionalOn and mIsOptimalPageFillOn. + */ + void updateLayoutSettings(); + + void setOptimalPageFill(bool isOptimalPageFillOn); + void setProportional(bool isProportionalOn); + void setResizePageToMusic(bool isResizePageOn); + + /*! + * \brief Builds the QMimeData containing the properties of the QGuidoItemContainer. + * + * Subclasses may extend this function. + * + * \note QGuidoItemContainer::loadFromMimeData is the symmetrical function. + */ + virtual QMimeData * buildMimeData(); + + void updateTitleBarVisibility(); + void updateTitleBar(); + void updateTitleText(); + void updateSyntaxErrorItem(); + void updateSelectionItem(); + void updatePageItemsVisibility(); + void updatePageIndexLabel(); + void updateResizerColor(); + void setCurrentPage(int page); + void setFile(const QString& fileName); + QVariant itemChange( GraphicsItemChange change, const QVariant& value ); + void hoverEnterEvent ( QGraphicsSceneHoverEvent * e ); + void hoverLeaveEvent ( QGraphicsSceneHoverEvent * e ); + void guidoUpdateGeometry(const QRectF& r); + + void resize( float xScale , float yScale ); + + QGuidoGraphicsItem * mGuidoItem; + + bool mIsProportionalOn; + bool mIsOptimalPageFillOn; + + float mMinScale, mMaxScale; + + QPageTurnerItem * mNextPageTurner; + QPageTurnerItem * mPreviousPageTurner; + QTextPathItem * mPageLabelItem; + + QTextPathItem * mHeadBar; +// QTextPathItem * mSyntaxErrorItem; + struct PenBrush { + QPen mPen; + QBrush mBrush; + PenBrush(const QPen& p = QPen() , const QBrush& b = QBrush()) + { + mPen = p; mBrush = b; + } + }; + QSwitcher mPenBrushSwitcher; + QGraphicsPathItem * mSelectionItem; + + QItemResizer* mResizer; + enum ResizeMode { + RESIZE_NORMAL = 0, + RESIZE_GRID = 1, + RESIZE_FORMAT = 2 + }; + int mResizeMode; + +#ifdef USES_GUIDO_AR + + public : + + virtual void play(); + virtual void pause(); + virtual void stop(); + + int mMidiRef; + typedef enum PlayerState { + PLAYING , PAUSED , STOPPED + } PlayerState; + PlayerState mPlayerState; +#endif + +}; + +#endif //GUIDO_ITEM_DECOARTOR_H diff --git a/guidoar-dev/guidocalculus/src/GuidoItemContainer/QGuidoItemContainerFactory.cpp b/guidoar-dev/guidocalculus/src/GuidoItemContainer/QGuidoItemContainerFactory.cpp new file mode 100644 index 000000000..7590a5ec7 --- /dev/null +++ b/guidoar-dev/guidocalculus/src/GuidoItemContainer/QGuidoItemContainerFactory.cpp @@ -0,0 +1,168 @@ +/* + * QGuidoItemContainerFactory.cpp + * + * Created by Christophe Daudin on 12/05/09. + * Copyright 2009 Grame. All rights reserved. + * + * GNU Lesser General Public License Usage + * Alternatively, this file may be used under the terms of the GNU Lesser + * General Public License version 2.1 as published by the Free Software + * Foundation and appearing in the file LICENSE.LGPL included in the + * packaging of this file. Please review the following information to + * ensure the GNU Lesser General Public License version 2.1 requirements + * will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. + * + * + * This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE + * WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + */ +#include "QGuidoItemContainerFactory.h" + +#include "QGuidoItemContainer.h" +#include "QSimpleItemContainer.h" +#include + +#include + +#define DOM_GMN_CONTAINER_ITEM_DISPLAY_TYPE "displayType" + +//------------------------------------------------------------------------------------------ +QGuidoItemContainer * QGuidoItemContainerFactory::buildGuidoItemContainer( QGraphicsItem * parent ) +{ + return new QGuidoItemContainer(parent); +} + +//------------------------------------------------------------------------------------------ +QGuidoItemContainer * QGuidoItemContainerFactory::buildGuidoItemContainer( const QGuidoItemContainer * other , QGraphicsItem * parent ) +{ + return new QGuidoItemContainer(other,parent); +} + +//------------------------------------------------------------------------------------------ +QLanguageItem * QGuidoItemContainerFactory::buildSimpleTextItemContainer( QGraphicsItem * parent ) +{ + QGraphicsSimpleTextItem * item = new QGraphicsSimpleTextItem(); + QGraphicsSimpleTextItemAdapter * adapter = new QGraphicsSimpleTextItemAdapter(item); + return new QSimpleItemContainer( item , adapter , parent ); +} + +//------------------------------------------------------------------------------------------ +QLanguageItem * QGuidoItemContainerFactory::buildLanguageItem( QGraphicsItem * parent ) +{ + return buildGuidoItemContainer( parent ); +} + +//------------------------------------------------------------------------------------------ +QLanguageItem * QGuidoItemContainerFactory::buildLanguageItem( const QLanguageItem * other , QGraphicsItem * parent ) +{ + if( dynamic_cast (other) ) + return buildGuidoItemContainer( (QGuidoItemContainer*)other , parent ); + else if ( dynamic_cast (other) ) + { + const QSimpleItemContainer* simpleItemContainer = (QSimpleItemContainer*)other; + QGraphicsItem * item = 0; + QItemAdapter * adapter = 0; + if ( dynamic_cast (simpleItemContainer->adapter()) ) + { + return QPixmapItemContainer::buildPixmapItemContainer( simpleItemContainer , parent ); + } + else if ( dynamic_cast (simpleItemContainer->adapter()) ) + { + item = new QGraphicsSimpleTextItem(); + adapter = new QGraphicsSimpleTextItemAdapter((QGraphicsSimpleTextItem*)item); + } + if ( item && adapter ) + return new QSimpleItemContainer( item , adapter , simpleItemContainer , parent ); + } + + assert(0); + return 0; +} + +//------------------------------------------------------------------------------------------ +QLanguageItem * QGuidoItemContainerFactory::buildLanguageItem( const QMimeData * mimeData , QGraphicsItem * parent ) +{ + if ( QGuidoItemContainer::recognizes(mimeData) ) + { + return new QGuidoItemContainer(mimeData, parent ); + } + else + { + QGraphicsItem * item = 0; + QItemAdapter * adapter = 0; + if ( QGraphicsPixmapItemAdapter::recognizes(mimeData) ) + { + return QPixmapItemContainer::buildPixmapItemContainer( mimeData , parent ); + } + else if ( QGraphicsSimpleTextItemAdapter::recognizes(mimeData) ) + { + item = new QGraphicsSimpleTextItem(); + adapter = new QGraphicsSimpleTextItemAdapter((QGraphicsSimpleTextItem*)item); + } + if ( item && adapter ) + return new QSimpleItemContainer( item , adapter , mimeData , parent ); + assert(0); + return 0; + } +} + +//------------------------------------------------------------------------------------------ +QLanguageItem * QGuidoItemContainerFactory::buildLanguageItem( const QDomElement * domElement , QGraphicsItem * parent ) +{ + if ( QGuidoItemContainer::recognizes( domElement ) ) + { + return new QGuidoItemContainer(domElement, parent ); + } + else + { + QGraphicsItem * item = 0; + QItemAdapter * adapter = 0; + if ( QGraphicsPixmapItemAdapter::recognizes(domElement) ) + { + return QPixmapItemContainer::buildPixmapItemContainer( domElement , parent ); + } + else if ( QGraphicsSimpleTextItemAdapter::recognizes(domElement) ) + { + item = new QGraphicsSimpleTextItem(); + adapter = new QGraphicsSimpleTextItemAdapter((QGraphicsSimpleTextItem*)item); + } + if ( item && adapter ) + return new QSimpleItemContainer( item , adapter , domElement , parent ); + + assert(0); + return 0; + } +} + +//------------------------------------------------------------------------------------------ +QLanguageItem * QGuidoItemContainerFactory::buildLanguageItemFromFile( const QString& fileName , QGraphicsItem * parent ) +{ + QLanguageItem * languageItem; + // 1. Try to build a QGraphicsPixmapItem container + if ( QImageReader( fileName ).canRead() ) + { + languageItem = QPixmapItemContainer::buildPixmapItemContainer( parent ); + languageItem->loadFile( fileName ); + languageItem->unlinkFile(); // QPixmapItemContainer are never file-linked. + return languageItem; + } + else + { + // 2. The file is not a valid image file + // => Try to build a QGuidoItemContainer + languageItem = buildGuidoItemContainer( parent ); + languageItem->loadFile( fileName ); + if ( languageItem->isValid() ) + return languageItem; + else + { + delete languageItem; + // 3. The file is not a valid Guido file + // => add the contents of the file as a QGraphicsSimpleTextItem + QGraphicsSimpleTextItem * i = new QGraphicsSimpleTextItem(); + languageItem = new QSimpleItemContainer( i , new QGraphicsSimpleTextItemAdapter(i) , parent ); + languageItem->loadFile( fileName ); + return languageItem; + } + } +} diff --git a/guidoar-dev/guidocalculus/src/GuidoItemContainer/QGuidoItemContainerFactory.h b/guidoar-dev/guidocalculus/src/GuidoItemContainer/QGuidoItemContainerFactory.h new file mode 100644 index 000000000..8ab8a5f77 --- /dev/null +++ b/guidoar-dev/guidocalculus/src/GuidoItemContainer/QGuidoItemContainerFactory.h @@ -0,0 +1,54 @@ +/* + * QGuidoItemContainerFactory.h + * + * Created by Christophe Daudin on 12/05/09. + * Copyright 2009 Grame. All rights reserved. + * + * GNU Lesser General Public License Usage + * Alternatively, this file may be used under the terms of the GNU Lesser + * General Public License version 2.1 as published by the Free Software + * Foundation and appearing in the file LICENSE.LGPL included in the + * packaging of this file. Please review the following information to + * ensure the GNU Lesser General Public License version 2.1 requirements + * will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. + * + * + * This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE + * WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + */ +#ifndef GUIDO_ITEM_CONTAINER_FACTORY_H +#define GUIDO_ITEM_CONTAINER_FACTORY_H + +#include "QLanguageItemFactory.h" + +class QGuidoItemContainer; + +class QGuidoItemContainerFactory : public QLanguageItemFactory +{ + + public: + + QGuidoItemContainer * buildGuidoItemContainer( QGraphicsItem * parent = 0 ); + + /** + * \brief Builds a copy of the specified QGuidoItemContainer. + * + * The DisplayType can be forced and then be different of the DisplayType of + * the specified QGuidoItemContainer ; else, you can leave displayType to TYPE_UNDEFINED. + */ + QGuidoItemContainer * buildGuidoItemContainer( const QGuidoItemContainer * other , QGraphicsItem * parent = 0); + + /** + * \brief Builds an empty QLanguageItem thats only displays the text. + */ + QLanguageItem * buildSimpleTextItemContainer( QGraphicsItem * parent = 0 ); + + QLanguageItem * buildLanguageItem( QGraphicsItem * parent = 0 ); + QLanguageItem * buildLanguageItem( const QLanguageItem * other , QGraphicsItem * parent = 0); + QLanguageItem * buildLanguageItem( const QMimeData * mimeData , QGraphicsItem * parent = 0); + QLanguageItem * buildLanguageItem( const QDomElement * domElement , QGraphicsItem * parent = 0); + + QLanguageItem * buildLanguageItemFromFile( const QString& fileName , QGraphicsItem * parent = 0 ); +}; + +#endif //GUIDO_ITEM_CONTAINER_FACTORY_H diff --git a/guidoar-dev/guidocalculus/src/GuidoItemContainer/QSimpleItemContainer.cpp b/guidoar-dev/guidocalculus/src/GuidoItemContainer/QSimpleItemContainer.cpp new file mode 100644 index 000000000..64c1bf13e --- /dev/null +++ b/guidoar-dev/guidocalculus/src/GuidoItemContainer/QSimpleItemContainer.cpp @@ -0,0 +1,392 @@ +/* + * QSimpleItemContainer.cpp + * + * Created by Christophe Daudin on 12/05/09. + * Copyright 2009 Grame. All rights reserved. + * + * GNU Lesser General Public License Usage + * Alternatively, this file may be used under the terms of the GNU Lesser + * General Public License version 2.1 as published by the Free Software + * Foundation and appearing in the file LICENSE.LGPL included in the + * packaging of this file. Please review the following information to + * ensure the GNU Lesser General Public License version 2.1 requirements + * will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. + * + * + * This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE + * WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + */ +#include "QSimpleItemContainer.h" + +#include + +#include + +#define MIME_SIMPLE_ITEM_SCALE_X "MimeImageItemScaleX" +#define MIME_SIMPLE_ITEM_SCALE_Y "MimeImageItemScaleY" + +#define DOM_SIMPLE_ITEM_SCALE_X "DomSimpleItemScaleX" +#define DOM_SIMPLE_ITEM_SCALE_Y "DomSimpleItemScaleY" + +#define PEN_WIDTH 2.0f +#define SELECTED_PEN QPen( QColor(SIMPLE_ITEM_BASE_RGB,SIMPLE_ITEM_ALPHA_1) , PEN_WIDTH ) +//#define SELECTED_BRUSH QBrush( QColor(SIMPLE_ITEM_BASE_RGB,SIMPLE_ITEM_ALPHA_2) ) +#define HIGHLIGHTED_PEN QPen( QColor(SIMPLE_ITEM_BASE_RGB,SIMPLE_ITEM_ALPHA_2) , PEN_WIDTH ) +//#define HIGHLIGHTED_BRUSH QBrush( QColor(SIMPLE_ITEM_BASE_RGB,SIMPLE_ITEM_ALPHA_3) ) +#define SELECTED_BRUSH Qt::NoBrush +#define HIGHLIGHTED_BRUSH Qt::NoBrush +#define STANDARD_PEN Qt::NoPen +#define STANDARD_BRUSH Qt::NoBrush + +#define FLAG_HIGHLIGHTED 0 +#define FLAG_SELECTED 1 +#define FLAG_IDLE 2 + +//------------------------------------------------------------------------- +// Public functions // +//------------------------------------------------------------------------- +QSimpleItemContainer::QSimpleItemContainer( QGraphicsItem * containedItem , QItemAdapter * adapter , QGraphicsItem * parent ) + : QLanguageItem(parent) +{ + init( containedItem , adapter ); +} + +//------------------------------------------------------------------------- +QSimpleItemContainer::QSimpleItemContainer( QGraphicsItem * containedItem , QItemAdapter * adapter , const QMimeData * mimeData , QGraphicsItem * parent) + : QLanguageItem(parent) +{ + init( containedItem , adapter ); + QLanguageItem::load( mimeData ); + unlinkFile(); + + if ( mimeData->hasFormat( MIME_SIMPLE_ITEM_SCALE_X ) ) + { + float scaleX = mimeData->data( MIME_SIMPLE_ITEM_SCALE_X ).toDouble(); + float scaleY = mimeData->data( MIME_SIMPLE_ITEM_SCALE_Y ).toDouble(); + QRectF newRect(0,0,mContainedItem->boundingRect().width() * scaleX , mContainedItem->boundingRect().height() * scaleY ); + resized( newRect ); + } +} + +//------------------------------------------------------------------------- +QSimpleItemContainer::QSimpleItemContainer( QGraphicsItem * containedItem , QItemAdapter * adapter , const QDomElement * domElement , QGraphicsItem * parent) + : QLanguageItem(parent) +{ + init( containedItem , adapter ); + QLanguageItem::load( domElement ); + unlinkFile(); + + float scaleX = QVariant( domElement->attribute( DOM_SIMPLE_ITEM_SCALE_X, "1" ) ).toDouble(); + float scaleY = QVariant( domElement->attribute( DOM_SIMPLE_ITEM_SCALE_Y, "1" ) ).toDouble(); + QRectF newRect(0,0,mContainedItem->boundingRect().width() * scaleX , mContainedItem->boundingRect().height() * scaleY ); + resized( newRect ); +} + +//------------------------------------------------------------------------- +QSimpleItemContainer::QSimpleItemContainer( QGraphicsItem * containedItem , QItemAdapter * adapter , const QSimpleItemContainer * other , QGraphicsItem * parent) + : QLanguageItem(parent) +{ + init( containedItem , adapter ); + QLanguageItem::load( other ); + unlinkFile(); + + float scaleX = other->mContainedItem->transform().m11(); + float scaleY = other->mContainedItem->transform().m22(); + QRectF newRect(0,0,mContainedItem->boundingRect().width() * scaleX , mContainedItem->boundingRect().height() * scaleY ); + resized( newRect ); +} + +//------------------------------------------------------------------------- +QSimpleItemContainer::~QSimpleItemContainer() +{ + delete mItemAdapter; +} + +//------------------------------------------------------------------------- +QDomElement QSimpleItemContainer::saveToDomElement( QDomDocument * doc) +{ + QDomElement element = QLanguageItem::saveToDomElement(doc); + + element.setAttribute( DOM_SIMPLE_ITEM_SCALE_X , mContainedItem->transform().m11() ); + element.setAttribute( DOM_SIMPLE_ITEM_SCALE_Y , mContainedItem->transform().m22() ); + + element.setAttribute( mItemAdapter->domId() , 1 ); + + return element; +} + +//------------------------------------------------------------------------- +bool QSimpleItemContainer::setCode( const QString& code ) +{ + bool result = mItemAdapter->setCode(code); + simpleItemUpdateGeometry( mContainedItem->mapToParent( mContainedItem->boundingRect() ).boundingRect() ); + return result; +} + +//------------------------------------------------------------------------- +// Public slots // +//------------------------------------------------------------------------- + +//------------------------------------------------------------------------- +void QSimpleItemContainer::resized(const QRectF& newRect) +{ + if ( newRect.toRect() == rect().toRect() ) + return; + + float xRatio = ( newRect.width() / rect().width() ); + float yRatio = ( newRect.height() / rect().height() ); + + moveBy( newRect.x() , newRect.y() ); + +// mContainedItem->scale( xRatio , yRatio ); + mContainedItem->setTransform(QTransform::fromScale(xRatio, yRatio), true); + simpleItemUpdateGeometry( mContainedItem->mapToParent( mContainedItem->boundingRect() ).boundingRect() ); + + Q_EMIT scaleChanged( mContainedItem->transform().m11() ); +} + +//------------------------------------------------------------------------- +// Protected functions // +//------------------------------------------------------------------------- + +//------------------------------------------------------------------------- +void QSimpleItemContainer::init( QGraphicsItem * containedItem , QItemAdapter * adapter ) +{ + mItemAdapter = adapter; + + mContainedItem = containedItem; + mContainedItem->setParentItem(this); + +#if !linux // bug in Qt 4.4 with the linux cache mode + mContainedItem->setCacheMode( QGraphicsItem::DeviceCoordinateCache ); +#endif + +// setAcceptsHoverEvents(true); + setAcceptHoverEvents(true); + + // Set pens & brushes + mPenBrushSwitcher.addFlag( FLAG_SELECTED , 2 , PenBrush(SELECTED_PEN , SELECTED_BRUSH ) ); + mPenBrushSwitcher.addFlag( FLAG_HIGHLIGHTED , 1 , PenBrush(HIGHLIGHTED_PEN , HIGHLIGHTED_BRUSH ) ); + mPenBrushSwitcher.addFlag( FLAG_IDLE , 0, PenBrush(STANDARD_PEN , STANDARD_BRUSH ) ); + mPenBrushSwitcher.setFlag( FLAG_IDLE , true ); +/* + mPenBrushSwitcher.setSwitchedFlag(FLAG_IDLE, SWITCH_INVALID_CODE, PenBrush(Qt::NoPen, INVALID_STANDARD_BRUSH ) ); + mPenBrushSwitcher.setSwitchedFlag(FLAG_HIGHLIGHTED, SWITCH_INVALID_CODE, PenBrush(Qt::NoPen, INVALID_HIGHLIGHTED_BRUSH ) ); + mPenBrushSwitcher.setSwitchedFlag(FLAG_SELECTED, SWITCH_INVALID_CODE, PenBrush(Qt::NoPen, INVALID_BRUSH_SELECTED ) ); +*/ + mSelectionItem = new QGraphicsRectItem(this); + mSelectionItem->setZValue( 2 ); + updateSelectionItem(); +} + +#define SELECTION_ITEM_BORDER_MARGIN 3 +//------------------------------------------------------------------------- +void QSimpleItemContainer::simpleItemUpdateGeometry(const QRectF& newGeometry) +{ + QLanguageItem::updateGeometry(newGeometry); + + QRectF selectionRect = rect(); + QPointF delta(PEN_WIDTH/2.0f , PEN_WIDTH/2.0f); + selectionRect.setTopLeft( selectionRect.topLeft() - delta ); + selectionRect.setBottomRight( selectionRect.bottomRight() + delta ); + mSelectionItem->setRect( selectionRect ); +} + +#include + +//------------------------------------------------------------------------- +QImage* QSimpleItemContainer::buildDragImage() +{ + QImage* result = new QImage( rect().toRect().size() , QImage::Format_ARGB32 ); + QPainter painter( result ); + painter.setPen( SELECTED_PEN ); + painter.setBrush( SELECTED_BRUSH ); + painter.drawRect( rect() ); + painter.end(); + return result; +} + +//------------------------------------------------------------------------- +QMimeData * QSimpleItemContainer::buildMimeData() +{ + QMimeData * data = QLanguageItem::buildMimeData(); + data->setData( MIME_SIMPLE_ITEM_SCALE_X , QByteArray::number(mContainedItem->transform().m11() ) ); + data->setData( MIME_SIMPLE_ITEM_SCALE_Y , QByteArray::number(mContainedItem->transform().m22() ) ); + data->setData( mItemAdapter->mimeId() , QByteArray::number(1) ); + return data; +} + +//------------------------------------------------------------------------- +QMenu * QSimpleItemContainer::buildContextMenu() +{ + return mItemAdapter->buildContextMenu( QLanguageItem::buildContextMenu() ); +} + +//------------------------------------------------------------------------- +void QSimpleItemContainer::updateSelectionItem() +{ + mSelectionItem->setPen( mPenBrushSwitcher.activeObject().mPen ); + mSelectionItem->setBrush( mPenBrushSwitcher.activeObject().mBrush ); +} + +//------------------------------------------------------------------------- +QVariant QSimpleItemContainer::itemChange( GraphicsItemChange change, const QVariant& value ) +{ + QVariant standardResult = QLanguageItem::itemChange( change , value ); + + if ( change == QGraphicsItem::ItemSelectedHasChanged ) + { + mPenBrushSwitcher.setFlag( FLAG_SELECTED , value.toBool() ); + updateSelectionItem(); + } + return standardResult; +} + +//------------------------------------------------------------------------- +void QSimpleItemContainer::hoverEnterEvent ( QGraphicsSceneHoverEvent * e ) +{ + QLanguageItem::hoverEnterEvent(e); + + mPenBrushSwitcher.setFlag( FLAG_HIGHLIGHTED , true ); + updateSelectionItem(); +} + +//------------------------------------------------------------------------- +void QSimpleItemContainer::hoverLeaveEvent ( QGraphicsSceneHoverEvent * e ) +{ + QLanguageItem::hoverLeaveEvent(e); + + mPenBrushSwitcher.setFlag( FLAG_HIGHLIGHTED , false ); + updateSelectionItem(); +} + +//------------------------------------------------------------------------- +// QGraphicsPixmapItemAdapter class /// +//------------------------------------------------------------------------- + +//------------------------------------------------------------------------- +QPixmapItemContainer* QPixmapItemContainer::buildPixmapItemContainer(QGraphicsItem * parent ) +{ + QGraphicsPixmapItem * item = new QGraphicsPixmapItem(); + QGraphicsPixmapItemAdapter * adapter = new QGraphicsPixmapItemAdapter(item); + return new QPixmapItemContainer(item, adapter, parent); +} + +//------------------------------------------------------------------------- +QPixmapItemContainer* QPixmapItemContainer::buildPixmapItemContainer(const QMimeData * mimeData , QGraphicsItem * parent ) +{ + QGraphicsPixmapItem * item = new QGraphicsPixmapItem(); + QGraphicsPixmapItemAdapter * adapter = new QGraphicsPixmapItemAdapter(item); + return new QPixmapItemContainer(item, adapter, mimeData , parent); +} + +//------------------------------------------------------------------------- +QPixmapItemContainer* QPixmapItemContainer::buildPixmapItemContainer(const QDomElement * domElement , QGraphicsItem * parent ) +{ + QGraphicsPixmapItem * item = new QGraphicsPixmapItem(); + QGraphicsPixmapItemAdapter * adapter = new QGraphicsPixmapItemAdapter(item); + return new QPixmapItemContainer(item, adapter, domElement , parent); +} + +//------------------------------------------------------------------------- +QPixmapItemContainer* QPixmapItemContainer::buildPixmapItemContainer(const QSimpleItemContainer * other , QGraphicsItem * parent ) +{ + QGraphicsPixmapItem * item = new QGraphicsPixmapItem(); + QGraphicsPixmapItemAdapter * adapter = new QGraphicsPixmapItemAdapter(item); + return new QPixmapItemContainer(item, adapter, other , parent); +} + +//------------------------------------------------------------------------- +QPixmapItemContainer::QPixmapItemContainer(QGraphicsItem * containedItem , QItemAdapter * adapter , QGraphicsItem * parent ) + : QSimpleItemContainer(containedItem, adapter, parent) +{ + init(); +} + +//------------------------------------------------------------------------- +QPixmapItemContainer::QPixmapItemContainer(QGraphicsItem * containedItem , QItemAdapter * adapter ,const QMimeData * mimeData , QGraphicsItem * parent ) + : QSimpleItemContainer(containedItem, adapter, mimeData , parent) +{ + init(); +} + +//------------------------------------------------------------------------- +QPixmapItemContainer::QPixmapItemContainer(QGraphicsItem * containedItem , QItemAdapter * adapter ,const QDomElement * domElement , QGraphicsItem * parent ) + : QSimpleItemContainer(containedItem, adapter, domElement , parent) +{ + init(); +} + +//------------------------------------------------------------------------- +QPixmapItemContainer::QPixmapItemContainer(QGraphicsItem * containedItem , QItemAdapter * adapter ,const QSimpleItemContainer * other , QGraphicsItem * parent ) + : QSimpleItemContainer(containedItem, adapter, other , parent) +{ + init(); +} + +//------------------------------------------------------------------------- +void QPixmapItemContainer::init() +{ + unlinkFile(); +} + +//------------------------------------------------------------------------- +// QGraphicsPixmapItemAdapter class /// +//------------------------------------------------------------------------- + +//------------------------------------------------------------------------- +QGraphicsPixmapItemAdapter::QGraphicsPixmapItemAdapter( QGraphicsPixmapItem* item ) +{ + mItem = item; + mFile = ""; + mIsValid = false; +} + +//------------------------------------------------------------------------- +bool QGraphicsPixmapItemAdapter::setCode(const QString& file) +{ + // Bad hack : if file length > 4000, assume it is not a file path. + // Avoids to call the very slow function QFile::exists() with + // a random big invalid string. + if ( file.length() > 4000 ) + return false; + + // Ignore setCode msg that contains the actual binary data of the image file + // or any invalid setCode. + if ( !QFile::exists( file ) ) + return false; + + if ( file == mFile ) + return mIsValid; + + mFile = file; + + if ( mFile.length() ) + { + mIsValid = QImageReader( mFile ).canRead(); + if ( mIsValid ) + mItem->setPixmap( QPixmap( mFile ) ); + + return mIsValid; + } + return true; +} + +//------------------------------------------------------------------------- +QMenu* QGraphicsPixmapItemAdapter::buildContextMenu( QMenu* standardMenu ) const +{ + //TODO : remove the File menu from standardMenu. + QMenu *fileMenu = standardMenu->findChild( OBJECT_NAME_FILE_MENU ); + delete fileMenu; + return standardMenu; +} + +//------------------------------------------------------------------------- +bool QGraphicsPixmapItemAdapter::isEqualTo( const QItemAdapter * adapter ) const +{ + const QGraphicsPixmapItemAdapter* other = dynamic_cast(adapter); + if ( !other ) + return false; + else + return ( other->code() == code() ); +} diff --git a/guidoar-dev/guidocalculus/src/GuidoItemContainer/QSimpleItemContainer.h b/guidoar-dev/guidocalculus/src/GuidoItemContainer/QSimpleItemContainer.h new file mode 100644 index 000000000..7a9a6700a --- /dev/null +++ b/guidoar-dev/guidocalculus/src/GuidoItemContainer/QSimpleItemContainer.h @@ -0,0 +1,231 @@ +/* + * QSimpleItemContainer.h + * + * Created by Christophe Daudin on 12/05/09. + * Copyright 2009 Grame. All rights reserved. + * + * GNU Lesser General Public License Usage + * Alternatively, this file may be used under the terms of the GNU Lesser + * General Public License version 2.1 as published by the Free Software + * Foundation and appearing in the file LICENSE.LGPL included in the + * packaging of this file. Please review the following information to + * ensure the GNU Lesser General Public License version 2.1 requirements + * will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. + * + * + * This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE + * WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + */ +#ifndef SIMPLE_ITEM_CONTAINER_H +#define SIMPLE_ITEM_CONTAINER_H + +#include "QLanguageItem.h" +#include "QSwitcher.h" + +#include +#include +#include +#include + +#define SIMPLE_ITEM_BASE_RGB 197,214,255 +#define SIMPLE_ITEM_ALPHA_1 200 +#define SIMPLE_ITEM_ALPHA_2 100 +#define SIMPLE_ITEM_ALPHA_3 50 + +#define DOM_SIMPLE_TEXT_ITEM "DomSimpleTextItem" +#define MIME_SIMPLE_TEXT_ITEM "MimeSimpleTextItem" +#define DOM_SIMPLE_PIXMAP_ITEM "DomSimplePixmapItem" +#define MIME_SIMPLE_PIXMAP_ITEM "MimeSimplePixmapItem" + +class QItemAdapter +{ + public : + virtual ~QItemAdapter() {} + + virtual QString code() const = 0; + virtual bool setCode(const QString& code) = 0; + virtual bool isValid() const = 0; + virtual void setFile(const QString& fileName) = 0; + virtual QString domId() const = 0; + virtual QString mimeId() const = 0; + virtual QMenu* buildContextMenu( QMenu* standardMenu ) const { return standardMenu; } + virtual bool isEqualTo( const QItemAdapter * other ) const = 0; +}; + +class QSimpleItemContainer : public QLanguageItem +{ + Q_OBJECT + + protected: + QItemAdapter * mItemAdapter; + QGraphicsItem * mContainedItem; + + public: + + /** + * \brief Constructor. + */ + QSimpleItemContainer(QGraphicsItem * containedItem , QItemAdapter * adapter , QGraphicsItem * parent = 0); + QSimpleItemContainer(QGraphicsItem * containedItem , QItemAdapter * adapter , const QMimeData * mimeData , QGraphicsItem * parent = 0); + QSimpleItemContainer(QGraphicsItem * containedItem , QItemAdapter * adapter , const QDomElement * domElement , QGraphicsItem * parent = 0); + QSimpleItemContainer(QGraphicsItem * containedItem , QItemAdapter * adapter , const QSimpleItemContainer * other , QGraphicsItem * parent = 0); + + virtual ~QSimpleItemContainer(); + + /*! + * \brief Create a new QDomElement storing the properties of the QSimpleItemContainer. + * + * \note The QDomElement may be further used to setup another QSimpleItemContainer, using QSimpleItemContainer::loadFromDomElement. + */ + virtual QDomElement saveToDomElement( QDomDocument * doc); + + float currentScale() const { return mContainedItem->transform().m11(); } + + bool isValid() const { return mItemAdapter->isValid(); } + bool setCode( const QString& code ); + QString code() const { return mItemAdapter->code(); } + + QGraphicsItem * containedItem() { return mContainedItem; } + + /*! + * \brief QSimpleItemContainer comparator. + */ + bool isEqualTo( QLanguageItem * item ) const + { + QSimpleItemContainer* other = dynamic_cast(item); + if ( !other ) + return false; + else + return mItemAdapter->isEqualTo( other->mItemAdapter ); + } + + QItemAdapter * adapter() const { return mItemAdapter; } + + public Q_SLOTS : + + void resized(const QRectF& newRect); + + protected: + + void setFile( const QString& fileName ) { QLanguageItem::setFile(fileName); mItemAdapter->setFile(fileName); } + + void init(QGraphicsItem * containedItem , QItemAdapter * adapter); + + void simpleItemUpdateGeometry(const QRectF& newGeometry); + + /*! + * \brief QLanguageItem implementation. + */ + QImage* buildDragImage(); + + /*! + * \brief QLanguageItem specialization. + */ + QMimeData * buildMimeData(); + + /*! + * \brief QLanguageItem specialization. + */ + QMenu * buildContextMenu(); + + /*! + * \brief Updates the "mSelectionItem" pen and brush according to mPenBrushSwitcher's state. + */ + void updateSelectionItem(); + + QVariant itemChange( GraphicsItemChange change, const QVariant& value ); + void hoverEnterEvent ( QGraphicsSceneHoverEvent * e ); + void hoverLeaveEvent ( QGraphicsSceneHoverEvent * e ); + + struct PenBrush { + QPen mPen; + QBrush mBrush; + PenBrush(const QPen& p = QPen() , const QBrush& b = QBrush()) + { + mPen = p; mBrush = b; + } + }; + QSwitcher mPenBrushSwitcher; + QGraphicsRectItem * mSelectionItem; + + public: + + static bool isSimpleItemContainer( const QMimeData* mimeData); + static bool isSimpleItemContainer( const QDomElement* e); + +}; + +class QPixmapItemContainer : public QSimpleItemContainer +{ + + public: + static QPixmapItemContainer* buildPixmapItemContainer(QGraphicsItem * parent = 0); + static QPixmapItemContainer* buildPixmapItemContainer(const QMimeData * mimeData , QGraphicsItem * parent = 0); + static QPixmapItemContainer* buildPixmapItemContainer(const QDomElement * domElement , QGraphicsItem * parent = 0); + static QPixmapItemContainer* buildPixmapItemContainer(const QSimpleItemContainer * other , QGraphicsItem * parent = 0); + + protected: + QPixmapItemContainer(QGraphicsItem * containedItem , QItemAdapter * adapter , QGraphicsItem * parent = 0); + QPixmapItemContainer(QGraphicsItem * containedItem , QItemAdapter * adapter ,const QMimeData * mimeData , QGraphicsItem * parent = 0); + QPixmapItemContainer(QGraphicsItem * containedItem , QItemAdapter * adapter ,const QDomElement * domElement , QGraphicsItem * parent = 0); + QPixmapItemContainer(QGraphicsItem * containedItem , QItemAdapter * adapter ,const QSimpleItemContainer * other , QGraphicsItem * parent = 0); + + void init(); + +}; + +class QGraphicsSimpleTextItemAdapter : public QItemAdapter +{ + public : + QGraphicsSimpleTextItemAdapter( QGraphicsSimpleTextItem* item) { mItem = item; } + + QString code() const { return mItem->text(); } + bool setCode(const QString& code) { mItem->setText(code); return isValid(); } + bool isValid() const { return true; } + void setFile(const QString&) {} + + static bool recognizes( const QMimeData* mimeData) { return mimeData->hasFormat( MIME_SIMPLE_TEXT_ITEM ); } + static bool recognizes( const QDomElement* e) { return ( QVariant( e->attribute( DOM_SIMPLE_TEXT_ITEM, "0" ) ).toInt() == 1 ); } + QString domId() const { return DOM_SIMPLE_TEXT_ITEM; } + QString mimeId() const { return MIME_SIMPLE_TEXT_ITEM; } + bool isEqualTo( const QItemAdapter * adapter ) const + { + const QGraphicsSimpleTextItemAdapter* other = dynamic_cast(adapter); + if ( !other ) + return false; + else + return ( other->code() == code() ); + } + + protected: + QGraphicsSimpleTextItem * mItem; +}; + +#include +#include +class QGraphicsPixmapItemAdapter : public QItemAdapter +{ + public : + + QGraphicsPixmapItemAdapter( QGraphicsPixmapItem* item ); + + QString code() const { return mFile; } + bool setCode(const QString& file); + bool isValid() const { return mIsValid; } + + void setFile(const QString& fileName) { setCode( fileName ); } + + static bool recognizes( const QMimeData* mimeData) { return mimeData->hasFormat( MIME_SIMPLE_PIXMAP_ITEM ); } + static bool recognizes( const QDomElement* e) { return ( QVariant( e->attribute( DOM_SIMPLE_PIXMAP_ITEM, "0" ) ).toInt() == 1 ); } + QString domId() const { return DOM_SIMPLE_PIXMAP_ITEM; } + QString mimeId() const { return MIME_SIMPLE_PIXMAP_ITEM; } + QMenu* buildContextMenu( QMenu* standardMenu ) const; + bool isEqualTo( const QItemAdapter * adapter ) const; + + protected: + QGraphicsPixmapItem * mItem; + QString mFile; + bool mIsValid; +}; + +#endif //SIMPLE_ITEM_CONTAINER_H diff --git a/guidoar-dev/guidocalculus/src/main.cpp b/guidoar-dev/guidocalculus/src/main.cpp new file mode 100644 index 000000000..9397f5281 --- /dev/null +++ b/guidoar-dev/guidocalculus/src/main.cpp @@ -0,0 +1,113 @@ +/* + * main.cpp + * + * Created by Christophe Daudin on 12/05/09. + * Copyright 2009 Grame. All rights reserved. + * + * GNU Lesser General Public License Usage + * Alternatively, this file may be used under the terms of the GNU Lesser + * General Public License version 2.1 as published by the Free Software + * Foundation and appearing in the file LICENSE.LGPL included in the + * packaging of this file. Please review the following information to + * ensure the GNU Lesser General Public License version 2.1 requirements + * will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. + * + * + * This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE + * WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + */ +#include +#include +#include +#include +#include +#include + +#include "MainWindow.h" + +#ifdef GUIDO_CALCULUS_APP +#define APP_NAME "GuidoCalculus" +#else +#define APP_NAME "GuidoSceneComposer" +#endif +#define COMPANY_NAME "GRAME" + + +#define GUIDO_FONT_FILE "guido2.ttf" +#ifdef Q_WS_MAC +#include +static QString getGuidoFontPath() +{ + QString guidoFontPath = QString(APP_NAME) + ".app/Contents/Resources/" + GUIDO_FONT_FILE; + + if ( QFile::exists(guidoFontPath) ) + return guidoFontPath ; + else + { + if ( QFile::exists(GUIDO_FONT_FILE) ) + return GUIDO_FONT_FILE; + else + return ""; + } +} +#else +static QString getGuidoFontPath() +{ + return GUIDO_FONT_FILE; +} +#endif + + +static void installGuidoFont() +{ + QString fileName = getGuidoFontPath(); + if ( !fileName.isEmpty() ) + QFontDatabase::addApplicationFont ( fileName ); +} + +#define Stringify(x) #x + +int main(int argc, char *argv[]) +{ + QApplication app(argc, argv); + Q_INIT_RESOURCE( application ); +#ifdef USES_GUIDO_AR + Q_INIT_RESOURCE( guidoar ); +#endif + + QCoreApplication::setOrganizationName(COMPANY_NAME); + QCoreApplication::setApplicationName(APP_NAME); + + installGuidoFont(); + + GraphicsSceneMainWindowSettings s; + s.mLanguageNameLong = "Guido Music Notation"; + s.mLanguageNameShort = "Guido"; + s.mLanguageFileExtension = "gmn"; + s.mSceneFileExtension = "gsc"; + s.mDefaultLanguageCode = "[\\meter<\"4/4\"> c2 b1 a g f e d c]"; + s.mLanguageCommandsFile = ":/GuidoCommands.xml"; +#ifdef USES_GUIDO_AR + s.mHasStorage = true; + s.mHasHistory = true; +#else + s.mHasStorage = false; + s.mHasHistory = false; +#endif + s.mMaxItemSize = QSize(200,200); + + GraphicsSceneMainWindow::initApplicationSettings( s ); + MainWindow mainWin; + QApplication::instance()->installEventFilter( &mainWin ); + + if ( argc >= 2 ) + { + QString fileName( argv[1] ); + QFileOpenEvent fileOpenEvent( fileName ); + QApplication::sendEvent( &mainWin , &fileOpenEvent ); + } + + mainWin.show(); + int result = app.exec(); + return result; +} diff --git a/guidoar-dev/guidocalculus/src/rsc/English.lproj/InfoPlist.strings b/guidoar-dev/guidocalculus/src/rsc/English.lproj/InfoPlist.strings new file mode 100644 index 000000000..f516f2b0a Binary files /dev/null and b/guidoar-dev/guidocalculus/src/rsc/English.lproj/InfoPlist.strings differ diff --git a/guidoar-dev/guidocalculus/src/rsc/GuidoCalculus.rc b/guidoar-dev/guidocalculus/src/rsc/GuidoCalculus.rc new file mode 100644 index 000000000..960313e43 --- /dev/null +++ b/guidoar-dev/guidocalculus/src/rsc/GuidoCalculus.rc @@ -0,0 +1,118 @@ +//Microsoft Developer Studio generated resource script. +// +#include "resource.h" + +#define APSTUDIO_READONLY_SYMBOLS +///////////////////////////////////////////////////////////////////////////// +// +// Generated from the TEXTINCLUDE 2 resource. +// +#include "afxres.h" + +///////////////////////////////////////////////////////////////////////////// +#undef APSTUDIO_READONLY_SYMBOLS + +///////////////////////////////////////////////////////////////////////////// +// French (France) resources + +#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_FRA) +#ifdef _WIN32 +LANGUAGE LANG_FRENCH, SUBLANG_FRENCH +#pragma code_page(1252) +#endif //_WIN32 + +#ifndef _MAC +///////////////////////////////////////////////////////////////////////////// +// +// Version +// + +VS_VERSION_INFO VERSIONINFO + FILEVERSION 1,0,0,0 + PRODUCTVERSION 1,0,0,0 + FILEFLAGSMASK 0x3fL +#ifdef _DEBUG + FILEFLAGS 0x1L +#else + FILEFLAGS 0x0L +#endif + FILEOS 0x40004L + FILETYPE 0x1L + FILESUBTYPE 0x0L +BEGIN + BLOCK "StringFileInfo" + BEGIN + BLOCK "080904b0" + BEGIN + VALUE "Comments", "\0" + VALUE "CompanyName", "Grame\0" + VALUE "FileDescription", "GuidoCalculus\0" + VALUE "FileVersion", "1, 0, 0, 0\0" + VALUE "InternalName", "GuidoCalculus\0" + VALUE "LegalCopyright", "Copyright © Grame 2009\0" + VALUE "LegalTrademarks", "\0" + VALUE "OriginalFilename", "GuidoCalculus.exe\0" + VALUE "PrivateBuild", "\0" + VALUE "ProductName", "Grame GuidoCalculus\0" + VALUE "ProductVersion", "1, 0, 0, 0\0" + VALUE "SpecialBuild", "\0" + END + END + BLOCK "VarFileInfo" + BEGIN + VALUE "Translation", 0x809, 1200 + END +END + +#endif // !_MAC + + +///////////////////////////////////////////////////////////////////////////// +// +// Icon +// + +// Icon with lowest ID value placed first to ensure application icon +// remains consistent on all systems. +IDI_ICON1 ICON DISCARDABLE "rsc/icon1.ico" + +#ifdef APSTUDIO_INVOKED +///////////////////////////////////////////////////////////////////////////// +// +// TEXTINCLUDE +// + +1 TEXTINCLUDE DISCARDABLE +BEGIN + "resource.h\0" +END + +2 TEXTINCLUDE DISCARDABLE +BEGIN + "#include ""afxres.h""\r\n" + "\0" +END + +3 TEXTINCLUDE DISCARDABLE +BEGIN + "\r\n" + "\0" +END + +#endif // APSTUDIO_INVOKED + +#endif // French (France) resources +///////////////////////////////////////////////////////////////////////////// + + + +#ifndef APSTUDIO_INVOKED +///////////////////////////////////////////////////////////////////////////// +// +// Generated from the TEXTINCLUDE 3 resource. +// + + +///////////////////////////////////////////////////////////////////////////// +#endif // not APSTUDIO_INVOKED + diff --git a/guidoar-dev/guidocalculus/src/rsc/GuidoCalculusInfo.plist b/guidoar-dev/guidocalculus/src/rsc/GuidoCalculusInfo.plist new file mode 100644 index 000000000..11bb9b787 --- /dev/null +++ b/guidoar-dev/guidocalculus/src/rsc/GuidoCalculusInfo.plist @@ -0,0 +1,38 @@ + + + + + CFBundleDevelopmentRegion + English + CFBundleDocumentTypes + + + CFBundleTypeExtensions + + gmn + gsc + + CFBundleTypeName + Guido Scene + CFBundleTypeRole + Viewer + + + CFBundleExecutable + GuidoCalculus + CFBundleIconFile + guido + CFBundleIdentifier + fr.grame.GuidoCalculus + CFBundleInfoDictionaryVersion + 6.0 + CFBundlePackageType + APPL + CFBundleSignature + ???? + CFBundleVersion + 1.1 + CSResourcesFileMapped + + + diff --git a/guidoar-dev/guidocalculus/src/rsc/GuidoCommands.xml b/guidoar-dev/guidocalculus/src/rsc/GuidoCommands.xml new file mode 100644 index 000000000..b4f4e68e6 --- /dev/null +++ b/guidoar-dev/guidocalculus/src/rsc/GuidoCommands.xml @@ -0,0 +1,223 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ]]> + ]]> + ]]> + ]]> + ]]> + ]]> + ]]> + ]]> + ()]]> + ()]]> + \crescEnd<"fff",0.9>]]> + \dimEnd<"p",0.3>]]> + + + ]]> + ]]> + ]]> + + + ()]]> + + ]]> + + ()]]> + + ]]> + + + + ()]]> + ()]]> + + ()]]> + + + + + ()]]> + ()]]> + ()]]> + ()]]> + ()]]> + + ()]]> + ()]]> + ()]]> + ()]]> + ()]]> + + + + ( (*chords*) )]]> + + ( (*chords*) )]]> + + ( (*chords*) )]]> + ( (*chords*) )]]> + + ()]]> + + ()]]> + + + + + ]]> + ]]> + ]]> + ]]> + ]]> + + + ]]> + ]]> + ]]> + ]]> + ]]> + ]]> + + + ]]> + ]]> + ]]> + ]]> + ]]> + ]]> + + + + + + + ]]> + + ]]> + + + ( (*1st volta*) ) \repeatEnd \volta<"2", "2.", format="|-"> ( (*2nd volta*) )]]> + + + ]]> + ]]> + ]]> + + + + + ]]> + + ]]> + + + + ]]> + ]]> + ()]]> + + + + ]]> + ]]> + + + + ]]> + + + + ]]> + ]]> + ]]> + ]]> + ]]> + ()]]> + ()]]> + ()]]> + ()]]> + ]]> + ]]> + ()]]> + + + + ]]> + ]]> + ]]> + + + ]]> + ]]> + ]]> + ]]> + ()]]> + ()]]> + ()]]> + ()]]> + + + + ]]> + ]]> + + + ]]> + + + + diff --git a/guidoar-dev/guidocalculus/src/rsc/activePalette.png b/guidoar-dev/guidocalculus/src/rsc/activePalette.png new file mode 100644 index 000000000..b6c60547d Binary files /dev/null and b/guidoar-dev/guidocalculus/src/rsc/activePalette.png differ diff --git a/guidoar-dev/guidocalculus/src/rsc/addFromAnyFile.png b/guidoar-dev/guidocalculus/src/rsc/addFromAnyFile.png new file mode 100644 index 000000000..f56851491 Binary files /dev/null and b/guidoar-dev/guidocalculus/src/rsc/addFromAnyFile.png differ diff --git a/guidoar-dev/guidocalculus/src/rsc/addFromFileGuido.png b/guidoar-dev/guidocalculus/src/rsc/addFromFileGuido.png new file mode 100644 index 000000000..12e82268c Binary files /dev/null and b/guidoar-dev/guidocalculus/src/rsc/addFromFileGuido.png differ diff --git a/guidoar-dev/guidocalculus/src/rsc/addGuido.png b/guidoar-dev/guidocalculus/src/rsc/addGuido.png new file mode 100644 index 000000000..81ad4eccf Binary files /dev/null and b/guidoar-dev/guidocalculus/src/rsc/addGuido.png differ diff --git a/guidoar-dev/guidocalculus/src/rsc/addText.png b/guidoar-dev/guidocalculus/src/rsc/addText.png new file mode 100644 index 000000000..3d35c93f7 Binary files /dev/null and b/guidoar-dev/guidocalculus/src/rsc/addText.png differ diff --git a/guidoar-dev/guidocalculus/src/rsc/combiAfter.png b/guidoar-dev/guidocalculus/src/rsc/combiAfter.png new file mode 100644 index 000000000..c61ac28ad Binary files /dev/null and b/guidoar-dev/guidocalculus/src/rsc/combiAfter.png differ diff --git a/guidoar-dev/guidocalculus/src/rsc/combiBefore.png b/guidoar-dev/guidocalculus/src/rsc/combiBefore.png new file mode 100644 index 000000000..102303086 Binary files /dev/null and b/guidoar-dev/guidocalculus/src/rsc/combiBefore.png differ diff --git a/guidoar-dev/guidocalculus/src/rsc/combiOverEnd.png b/guidoar-dev/guidocalculus/src/rsc/combiOverEnd.png new file mode 100644 index 000000000..ae37d6900 Binary files /dev/null and b/guidoar-dev/guidocalculus/src/rsc/combiOverEnd.png differ diff --git a/guidoar-dev/guidocalculus/src/rsc/combiOverStart.png b/guidoar-dev/guidocalculus/src/rsc/combiOverStart.png new file mode 100644 index 000000000..bfba07a1e Binary files /dev/null and b/guidoar-dev/guidocalculus/src/rsc/combiOverStart.png differ diff --git a/guidoar-dev/guidocalculus/src/rsc/combiUnderEnd.png b/guidoar-dev/guidocalculus/src/rsc/combiUnderEnd.png new file mode 100644 index 000000000..405af8b6d Binary files /dev/null and b/guidoar-dev/guidocalculus/src/rsc/combiUnderEnd.png differ diff --git a/guidoar-dev/guidocalculus/src/rsc/combiUnderStart.png b/guidoar-dev/guidocalculus/src/rsc/combiUnderStart.png new file mode 100644 index 000000000..71c4988d3 Binary files /dev/null and b/guidoar-dev/guidocalculus/src/rsc/combiUnderStart.png differ diff --git a/guidoar-dev/guidocalculus/src/rsc/export.png b/guidoar-dev/guidocalculus/src/rsc/export.png new file mode 100644 index 000000000..acee1e1d7 Binary files /dev/null and b/guidoar-dev/guidocalculus/src/rsc/export.png differ diff --git a/guidoar-dev/guidocalculus/src/rsc/guido.icns b/guidoar-dev/guidocalculus/src/rsc/guido.icns new file mode 100644 index 000000000..823582ea8 Binary files /dev/null and b/guidoar-dev/guidocalculus/src/rsc/guido.icns differ diff --git a/guidoar-dev/guidocalculus/src/rsc/guido.qrc b/guidoar-dev/guidocalculus/src/rsc/guido.qrc new file mode 100644 index 000000000..ddbc8893e --- /dev/null +++ b/guidoar-dev/guidocalculus/src/rsc/guido.qrc @@ -0,0 +1,11 @@ + + + addGuido.png + addFromFileGuido.png + removeItem.png + addText.png + addFromAnyFile.png + export.png + GuidoCommands.xml + + diff --git a/guidoar-dev/guidocalculus/src/rsc/guido2.svg b/guidoar-dev/guidocalculus/src/rsc/guido2.svg new file mode 100644 index 000000000..8cebb5d8e --- /dev/null +++ b/guidoar-dev/guidocalculus/src/rsc/guido2.svg @@ -0,0 +1,194 @@ + + + + + Created by FontForge 20110222 at Fri Dec 16 17:27:01 2011 + Exported to svg by Dominique Fober + Copyright (c) 1996-2001 Keith A. Hamel, 2009-2011 Grame. All rights reserved. + To be used with GUIDO Engine. + Version 3.3, Nov. 7 2011. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/guidoar-dev/guidocalculus/src/rsc/guido2.ttf b/guidoar-dev/guidocalculus/src/rsc/guido2.ttf new file mode 100644 index 000000000..82d6ba6d0 Binary files /dev/null and b/guidoar-dev/guidocalculus/src/rsc/guido2.ttf differ diff --git a/guidoar-dev/guidocalculus/src/rsc/guidoar.qrc b/guidoar-dev/guidocalculus/src/rsc/guidoar.qrc new file mode 100644 index 000000000..98e4415a7 --- /dev/null +++ b/guidoar-dev/guidocalculus/src/rsc/guidoar.qrc @@ -0,0 +1,11 @@ + + + activePalette.png + combiAfter.png + combiBefore.png + combiOverEnd.png + combiOverStart.png + combiUnderEnd.png + combiUnderStart.png + + diff --git a/guidoar-dev/guidocalculus/src/rsc/icon/guidocalculus.gmn b/guidoar-dev/guidocalculus/src/rsc/icon/guidocalculus.gmn new file mode 100644 index 000000000..65e537fa4 --- /dev/null +++ b/guidoar-dev/guidocalculus/src/rsc/icon/guidocalculus.gmn @@ -0,0 +1,4 @@ +[ +\clef<"c", dx=0hs, color="darkblue"> \noteFormat +{ c/1, \stemsOff \noteFormat d0/4 } +] diff --git a/guidoar-dev/guidocalculus/src/rsc/icon/guidocalculus.graffle/QuickLook/Preview.pdf b/guidoar-dev/guidocalculus/src/rsc/icon/guidocalculus.graffle/QuickLook/Preview.pdf new file mode 100644 index 000000000..4b08cfa44 Binary files /dev/null and b/guidoar-dev/guidocalculus/src/rsc/icon/guidocalculus.graffle/QuickLook/Preview.pdf differ diff --git a/guidoar-dev/guidocalculus/src/rsc/icon/guidocalculus.graffle/QuickLook/Thumbnail.tiff b/guidoar-dev/guidocalculus/src/rsc/icon/guidocalculus.graffle/QuickLook/Thumbnail.tiff new file mode 100644 index 000000000..6ed62fc13 Binary files /dev/null and b/guidoar-dev/guidocalculus/src/rsc/icon/guidocalculus.graffle/QuickLook/Thumbnail.tiff differ diff --git a/guidoar-dev/guidocalculus/src/rsc/icon/guidocalculus.graffle/data.plist b/guidoar-dev/guidocalculus/src/rsc/icon/guidocalculus.graffle/data.plist new file mode 100644 index 000000000..c9525a372 --- /dev/null +++ b/guidoar-dev/guidocalculus/src/rsc/icon/guidocalculus.graffle/data.plist @@ -0,0 +1,329 @@ + + + + + ActiveLayerIndex + 0 + ApplicationVersion + + com.omnigroup.OmniGraffle + 138.33.0.157554 + + AutoAdjust + + BackgroundGraphic + + Bounds + {{0, 0}, {559.2, 782.8}} + Class + SolidGraphic + ID + 2 + Style + + shadow + + Draws + NO + + stroke + + Draws + NO + + + + CanvasOrigin + {0, 0} + ColumnAlign + 1 + ColumnSpacing + 36 + CreationDate + 2012-03-06 22:58:14 +0100 + Creator + Dominique Fober + DisplayScale + 1 pt = 1 px + GraphDocumentVersion + 8 + GraphicsList + + + Bounds + {{283, 518.658}, {180, 88.2353}} + Class + ShapedGraphic + ID + 8 + ImageID + 4 + Shape + Rectangle + Style + + fill + + Draws + NO + + shadow + + Draws + NO + + stroke + + Draws + NO + + + + + Bounds + {{59, 202}, {300, 324.658}} + Class + ShapedGraphic + ID + 4 + ImageID + 2 + Shape + Rectangle + Style + + fill + + Draws + NO + + shadow + + Draws + NO + + stroke + + Draws + NO + + + + + Bounds + {{223, 194}, {300, 324.658}} + Class + ShapedGraphic + ID + 5 + ImageID + 3 + Shape + Rectangle + Style + + fill + + Draws + NO + + shadow + + Draws + NO + + stroke + + Draws + NO + + + + + Bounds + {{29, 112}, {512, 512}} + Class + ShapedGraphic + ID + 6 + Shape + Rectangle + Style + + fill + + FillType + 3 + GradientColor + + b + 0.464927 + g + 0.557994 + r + 0.571429 + + + stroke + + CornerRadius + 15 + + + + + GridInfo + + GuidesLocked + NO + GuidesVisible + YES + HPages + 1 + ImageCounter + 5 + ImageLinkBack + + + + + + ImageList + + image4.pdf + image3.pdf + image2.pdf + + KeepToScale + + Layers + + + Lock + NO + Name + Calque 1 + Print + YES + View + YES + + + LayoutInfo + + Animate + NO + circoMinDist + 18 + circoSeparation + 0.0 + layoutEngine + dot + neatoSeparation + 0.0 + twopiSeparation + 0.0 + + LinksVisible + NO + MagnetsVisible + NO + MasterSheets + + ModificationDate + 2012-03-06 23:10:43 +0100 + Modifier + Dominique Fober + NotesVisible + NO + Orientation + 2 + OriginVisible + NO + PageBreaks + YES + PrintInfo + + NSBottomMargin + + float + 41 + + NSLeftMargin + + float + 18 + + NSPaperSize + + coded + BAtzdHJlYW10eXBlZIHoA4QBQISEhAdOU1ZhbHVlAISECE5TT2JqZWN0AIWEASqEhAx7X05TU2l6ZT1mZn2Wg83MFESDM3NSRIY= + + NSRightMargin + + float + 18 + + NSTopMargin + + float + 18 + + + PrintOnePage + + ReadOnly + NO + RowAlign + 1 + RowSpacing + 36 + SheetTitle + Canevas 1 + SmartAlignmentGuidesActive + YES + SmartDistanceGuidesActive + YES + UniqueID + 1 + UseEntirePage + + VPages + 1 + WindowInfo + + CurrentSheet + 0 + ExpandedCanvases + + Frame + {{513, 110}, {897, 898}} + ListView + + OutlineWidth + 142 + RightSidebar + + ShowRuler + + Sidebar + + SidebarWidth + 120 + VisibleRegion + {{-94, 14}, {748, 744}} + Zoom + 1 + ZoomValues + + + Canevas 1 + 1 + 1 + + + + saveQuickLookFiles + YES + + diff --git a/guidoar-dev/guidocalculus/src/rsc/icon/guidocalculus.graffle/image2.pdf b/guidoar-dev/guidocalculus/src/rsc/icon/guidocalculus.graffle/image2.pdf new file mode 100644 index 000000000..e1e762542 Binary files /dev/null and b/guidoar-dev/guidocalculus/src/rsc/icon/guidocalculus.graffle/image2.pdf differ diff --git a/guidoar-dev/guidocalculus/src/rsc/icon/guidocalculus.graffle/image3.pdf b/guidoar-dev/guidocalculus/src/rsc/icon/guidocalculus.graffle/image3.pdf new file mode 100644 index 000000000..7b64844d1 Binary files /dev/null and b/guidoar-dev/guidocalculus/src/rsc/icon/guidocalculus.graffle/image3.pdf differ diff --git a/guidoar-dev/guidocalculus/src/rsc/icon/guidocalculus.graffle/image4.pdf b/guidoar-dev/guidocalculus/src/rsc/icon/guidocalculus.graffle/image4.pdf new file mode 100644 index 000000000..cd4c8364b Binary files /dev/null and b/guidoar-dev/guidocalculus/src/rsc/icon/guidocalculus.graffle/image4.pdf differ diff --git a/guidoar-dev/guidocalculus/src/rsc/icon1.ico b/guidoar-dev/guidocalculus/src/rsc/icon1.ico new file mode 100644 index 000000000..3b9ceccaf Binary files /dev/null and b/guidoar-dev/guidocalculus/src/rsc/icon1.ico differ diff --git a/guidoar-dev/guidocalculus/src/rsc/removeItem.png b/guidoar-dev/guidocalculus/src/rsc/removeItem.png new file mode 100644 index 000000000..c191511ce Binary files /dev/null and b/guidoar-dev/guidocalculus/src/rsc/removeItem.png differ diff --git a/guidoar-dev/guidocalculus/src/rsc/resource.h b/guidoar-dev/guidocalculus/src/rsc/resource.h new file mode 100644 index 000000000..44450425f --- /dev/null +++ b/guidoar-dev/guidocalculus/src/rsc/resource.h @@ -0,0 +1,16 @@ +//{{NO_DEPENDENCIES}} +// Microsoft Developer Studio generated include file. +// Used by GuidoSceneComposer.rc +// +#define IDI_ICON1 101 + +// Next default values for new objects +// +#ifdef APSTUDIO_INVOKED +#ifndef APSTUDIO_READONLY_SYMBOLS +#define _APS_NEXT_RESOURCE_VALUE 102 +#define _APS_NEXT_COMMAND_VALUE 40001 +#define _APS_NEXT_CONTROL_VALUE 1000 +#define _APS_NEXT_SYMED_VALUE 101 +#endif +#endif diff --git a/guidoar-dev/guidocalculus/src/shared.pri b/guidoar-dev/guidocalculus/src/shared.pri new file mode 100644 index 000000000..9f9f1b507 --- /dev/null +++ b/guidoar-dev/guidocalculus/src/shared.pri @@ -0,0 +1,28 @@ +SOURCES_DIR = src +RESOURCES_DIR = rsc + +win32:DebugBuild:CONFIG += console +TEMPLATE = app +QT += xml +win32:DebugBuild { + TARGET = $${APP_NAME}_debug +} else { + TARGET = $${APP_NAME} +} +DESTDIR = ../bin +MOC_DIR = ./tmpSrc +RCC_DIR = ./tmpSrc +UI_DIR = ./tmpSrc +win32:!win32-g++ { + TEMPLATE = vcapp +} + + +macx { + RC_FILE += $$RESOURCES_DIR/English.lproj/InfoPlist.strings + QMAKE_INFO_PLIST = $$RESOURCES_DIR/$${APP_NAME}Info.plist +} + +win32 { + RC_FILE = $$RESOURCES_DIR/$${APP_NAME}.rc +} diff --git a/guidoar-dev/lang/javascript/Makefile b/guidoar-dev/lang/javascript/Makefile new file mode 100644 index 000000000..17c1e7971 --- /dev/null +++ b/guidoar-dev/lang/javascript/Makefile @@ -0,0 +1,713 @@ +# +# GUIDOAr Javascript +# This makefile is intended to compile the GUIDO AR library as a javascript library +# It is based on emscript that must be available from the command line +# see http://kripken.github.io/emscripten-site/ for more info +# +# this makefile can run from any location, provide the 'srcdir' variable is correctly set +# +# The TOTAL_MEMORY is the maximum memory allocated by emscripten. This value is specific (100663296) to be compliant with the asm.js and prevent warning at execution. +# It can be increased if error occured. +# +# Compilation option -Oz is discouraged, it provoke undefined results and assertion errors at runtime. +# + +version := 1.60 + +srcdir := ../../src/ +folders := $(addprefix $(srcdir), guido guido/abstract interface lib operations parser visitors) +sources = $(wildcard $(addsuffix /*.cpp, $(folders))) +objects = $(patsubst $(srcdir)%.cpp, obj/%.o, $(sources)) obj/bindings.o obj/wrapper.o + +GCC = emcc +CXXFLAGS += $(addprefix -I, $(folders) src) -O3 -DEMCC + +library = libGuidoAR +target = $(library).js + + +############################################################## +# building the library +############################################################## +$(target) : $(objects) + emcc $(CXXFLAGS) -Wno-deprecated-register --bind --memory-init-file 0 $(objects) -o $(target) -s ALLOW_MEMORY_GROWTH=0 -s ASM_JS=1 -s TOTAL_MEMORY=100663296 -s DISABLE_EXCEPTION_CATCHING=1 -s ASSERTIONS=0 + +clean: + rm -f $(objects) $(target) + rm -rf obj + +depend : + makedepend -fMakefile -Y -- $(CXXFLAGS) -- $(sources) + +test: + @echo sources: $(sources) + @echo objects: $(objects) + +############################################################## +# rules for building the library +############################################################## +obj/%.o: $(srcdir)/%.cpp + @[ -d $(@D) ] || mkdir -p $(@D) + $(GCC) -c $(CXXFLAGS) $< -o $@ + +obj/%.o: src/%.cpp + $(GCC) -c $(CXXFLAGS) $< -o $@ + +obj/bindings.o: src/bindings.cpp + $(GCC) -c $(CXXFLAGS) --bind -std=c++11 $< -o $@ + +# DO NOT DELETE + +../../src/guido/guidoelement.o: ../../src/guido/guidoelement.h +../../src/guido/guidoelement.o: ../../src/interface/export.h +../../src/guido/guidoelement.o: ../../src/visitors/visitable.h +../../src/guido/guidoelement.o: ../../src/visitors/basevisitor.h +../../src/guido/guidoelement.o: ../../src/lib/ctree.h +../../src/guido/guidoelement.o: ../../src/lib/smartpointer.h +../../src/guido/guidoelement.o: ../../src/visitors/gmnvisitor.h +../../src/guido/guidoelement.o: ../../src/guido/abstract/ARTypes.h +../../src/guido/guidoelement.o: ../../src/guido/guidotags.h +../../src/guido/guidoelement.o: ../../src/lib/streambeautifuller.h +../../src/guido/guidoelement.o: ../../src/visitors/visitor.h +../../src/guido/guidoelement.o: ../../src/lib/tree_browser.h +../../src/guido/guidoelement.o: ../../src/lib/browser.h +../../src/guido/abstract/ARChord.o: ../../src/guido/abstract/ARChord.h +../../src/guido/abstract/ARChord.o: ../../src/interface/export.h +../../src/guido/abstract/ARChord.o: ../../src/guido/guidoelement.h +../../src/guido/abstract/ARChord.o: ../../src/visitors/visitable.h +../../src/guido/abstract/ARChord.o: ../../src/visitors/basevisitor.h +../../src/guido/abstract/ARChord.o: ../../src/lib/ctree.h +../../src/guido/abstract/ARChord.o: ../../src/lib/smartpointer.h +../../src/guido/abstract/ARChord.o: ../../src/interface/guidorational.h +../../src/guido/abstract/ARChord.o: ../../src/guido/abstract/ARNote.h +../../src/guido/abstract/ARChord.o: ../../src/guido/abstract/ARTypes.h +../../src/guido/abstract/ARChord.o: ../../src/guido/guidotags.h +../../src/guido/abstract/ARChord.o: ../../src/lib/functor.h +../../src/guido/abstract/ARChord.o: ../../src/lib/tree_browser.h +../../src/guido/abstract/ARChord.o: ../../src/lib/browser.h +../../src/guido/abstract/ARChord.o: ../../src/visitors/visitor.h +../../src/guido/abstract/ARFactory.o: ../../src/guido/guidotags.h +../../src/guido/abstract/ARFactory.o: ../../src/guido/abstract/ARFactory.h +../../src/guido/abstract/ARFactory.o: ../../src/interface/export.h +../../src/guido/abstract/ARFactory.o: ../../src/lib/functor.h +../../src/guido/abstract/ARFactory.o: ../../src/lib/singleton.h +../../src/guido/abstract/ARFactory.o: ../../src/guido/abstract/ARTypes.h +../../src/guido/abstract/ARFactory.o: ../../src/lib/smartpointer.h +../../src/guido/abstract/ARFactory.o: ../../src/guido/abstract/ARChord.h +../../src/guido/abstract/ARFactory.o: ../../src/guido/guidoelement.h +../../src/guido/abstract/ARFactory.o: ../../src/visitors/visitable.h +../../src/guido/abstract/ARFactory.o: ../../src/visitors/basevisitor.h +../../src/guido/abstract/ARFactory.o: ../../src/lib/ctree.h +../../src/guido/abstract/ARFactory.o: ../../src/interface/guidorational.h +../../src/guido/abstract/ARFactory.o: ../../src/guido/abstract/ARNote.h +../../src/guido/abstract/ARFactory.o: ../../src/guido/abstract/AROthers.h +../../src/guido/abstract/ARFactory.o: ../../src/guido/abstract/ARTag.h +../../src/guido/abstract/ARFactory.o: ../../src/visitors/visitor.h +../../src/guido/abstract/ARNote.o: ../../src/guido/abstract/ARNote.h +../../src/guido/abstract/ARNote.o: ../../src/guido/guidoelement.h +../../src/guido/abstract/ARNote.o: ../../src/interface/export.h +../../src/guido/abstract/ARNote.o: ../../src/visitors/visitable.h +../../src/guido/abstract/ARNote.o: ../../src/visitors/basevisitor.h +../../src/guido/abstract/ARNote.o: ../../src/lib/ctree.h +../../src/guido/abstract/ARNote.o: ../../src/lib/smartpointer.h +../../src/guido/abstract/ARNote.o: ../../src/interface/guidorational.h +../../src/guido/abstract/ARNote.o: ../../src/visitors/visitor.h +../../src/guido/abstract/AROthers.o: ../../src/guido/abstract/AROthers.h +../../src/guido/abstract/AROthers.o: ../../src/interface/export.h +../../src/guido/abstract/AROthers.o: ../../src/guido/guidoelement.h +../../src/guido/abstract/AROthers.o: ../../src/visitors/visitable.h +../../src/guido/abstract/AROthers.o: ../../src/visitors/basevisitor.h +../../src/guido/abstract/AROthers.o: ../../src/lib/ctree.h +../../src/guido/abstract/AROthers.o: ../../src/lib/smartpointer.h +../../src/guido/abstract/AROthers.o: ../../src/visitors/visitor.h +../../src/guido/abstract/ARTag.o: ../../src/guido/abstract/ARTag.h +../../src/guido/abstract/ARTag.o: ../../src/interface/export.h +../../src/guido/abstract/ARTag.o: ../../src/guido/guidoelement.h +../../src/guido/abstract/ARTag.o: ../../src/visitors/visitable.h +../../src/guido/abstract/ARTag.o: ../../src/visitors/basevisitor.h +../../src/guido/abstract/ARTag.o: ../../src/lib/ctree.h +../../src/guido/abstract/ARTag.o: ../../src/lib/smartpointer.h +../../src/guido/abstract/ARTag.o: ../../src/visitors/visitor.h +../../src/interface/libguidoar.o: ../../src/interface/libguidoar.h +../../src/interface/libguidoar.o: ../../src/interface/guidorational.h +../../src/interface/libguidoar.o: ../../src/interface/export.h +../../src/interface/libguidoar.o: ../../src/guido/abstract/AROthers.h +../../src/interface/libguidoar.o: ../../src/guido/guidoelement.h +../../src/interface/libguidoar.o: ../../src/visitors/visitable.h +../../src/interface/libguidoar.o: ../../src/visitors/basevisitor.h +../../src/interface/libguidoar.o: ../../src/lib/ctree.h +../../src/interface/libguidoar.o: ../../src/lib/smartpointer.h +../../src/interface/libguidoar.o: ../../src/operations/bottomOperation.h +../../src/interface/libguidoar.o: ../../src/visitors/clonevisitor.h +../../src/interface/libguidoar.o: ../../src/guido/abstract/ARTypes.h +../../src/interface/libguidoar.o: ../../src/guido/guidotags.h +../../src/interface/libguidoar.o: ../../src/visitors/visitor.h +../../src/interface/libguidoar.o: ../../src/operations/operation.h +../../src/interface/libguidoar.o: ../../src/lib/tree_browser.h +../../src/interface/libguidoar.o: ../../src/lib/browser.h +../../src/interface/libguidoar.o: ../../src/operations/durationOperation.h +../../src/interface/libguidoar.o: ../../src/operations/eheadOperation.h +../../src/interface/libguidoar.o: ../../src/operations/headOperation.h +../../src/interface/libguidoar.o: ../../src/visitors/durationvisitor.h +../../src/interface/libguidoar.o: ../../src/operations/etailOperation.h +../../src/interface/libguidoar.o: ../../src/operations/tailOperation.h +../../src/interface/libguidoar.o: ../../src/guido/abstract/ARTag.h +../../src/interface/libguidoar.o: ../../src/visitors/event2timevisitor.h +../../src/interface/libguidoar.o: ../../src/visitors/counteventsvisitor.h +../../src/interface/libguidoar.o: ../../src/parser/guidoparser.h +../../src/interface/libguidoar.o: ../../src/parser/gmnreader.h +../../src/interface/libguidoar.o: ../../src/operations/mirrorOperation.h +../../src/interface/libguidoar.o: ../../src/operations/parOperation.h +../../src/interface/libguidoar.o: ../../src/operations/seqOperation.h +../../src/interface/libguidoar.o: ../../src/operations/topOperation.h +../../src/interface/libguidoar.o: ../../src/operations/transposeOperation.h +../../src/interface/libguidoar.o: ../../src/lib/ringvector.h +../../src/interface/libguidoar.o: ../../src/operations/rythmApplyOperation.h +../../src/interface/libguidoar.o: ../../src/guido/abstract/ARNote.h +../../src/interface/libguidoar.o: ../../src/visitors/rythmvisitor.h +../../src/interface/libguidoar.o: ../../src/operations/pitchApplyOperation.h +../../src/interface/libguidoar.o: ../../src/guido/abstract/ARChord.h +../../src/interface/libguidoar.o: ../../src/visitors/pitchvisitor.h +../../src/interface/libguidoar.o: ../../src/visitors/unrolled_guido_browser.h +../../src/lib/rational.o: ../../src/interface/guidorational.h +../../src/lib/rational.o: ../../src/interface/export.h +../../src/lib/streambeautifuller.o: ../../src/lib/streambeautifuller.h +../../src/lib/streambeautifuller.o: ../../src/interface/export.h +../../src/operations/bottomOperation.o: ../../src/guido/abstract/ARFactory.h +../../src/operations/bottomOperation.o: ../../src/interface/export.h +../../src/operations/bottomOperation.o: ../../src/lib/functor.h +../../src/operations/bottomOperation.o: ../../src/lib/singleton.h +../../src/operations/bottomOperation.o: ../../src/guido/abstract/ARTypes.h +../../src/operations/bottomOperation.o: ../../src/lib/smartpointer.h +../../src/operations/bottomOperation.o: ../../src/guido/guidotags.h +../../src/operations/bottomOperation.o: ../../src/guido/abstract/AROthers.h +../../src/operations/bottomOperation.o: ../../src/guido/guidoelement.h +../../src/operations/bottomOperation.o: ../../src/visitors/visitable.h +../../src/operations/bottomOperation.o: ../../src/visitors/basevisitor.h +../../src/operations/bottomOperation.o: ../../src/lib/ctree.h +../../src/operations/bottomOperation.o: ../../src/guido/abstract/ARTag.h +../../src/operations/bottomOperation.o: ../../src/visitors/visitor.h +../../src/operations/bottomOperation.o: ../../src/operations/bottomOperation.h +../../src/operations/bottomOperation.o: ../../src/visitors/clonevisitor.h +../../src/operations/bottomOperation.o: ../../src/operations/operation.h +../../src/operations/bottomOperation.o: ../../src/lib/tree_browser.h +../../src/operations/bottomOperation.o: ../../src/lib/browser.h +../../src/operations/durationOperation.o: ../../src/guido/abstract/ARFactory.h +../../src/operations/durationOperation.o: ../../src/interface/export.h +../../src/operations/durationOperation.o: ../../src/lib/functor.h +../../src/operations/durationOperation.o: ../../src/lib/singleton.h +../../src/operations/durationOperation.o: ../../src/guido/abstract/ARTypes.h +../../src/operations/durationOperation.o: ../../src/lib/smartpointer.h +../../src/operations/durationOperation.o: ../../src/guido/guidotags.h +../../src/operations/durationOperation.o: ../../src/guido/abstract/AROthers.h +../../src/operations/durationOperation.o: ../../src/guido/guidoelement.h +../../src/operations/durationOperation.o: ../../src/visitors/visitable.h +../../src/operations/durationOperation.o: ../../src/visitors/basevisitor.h +../../src/operations/durationOperation.o: ../../src/lib/ctree.h +../../src/operations/durationOperation.o: ../../src/guido/abstract/ARTag.h +../../src/operations/durationOperation.o: ../../src/visitors/visitor.h +../../src/operations/durationOperation.o: ../../src/guido/abstract/ARNote.h +../../src/operations/durationOperation.o: ../../src/interface/guidorational.h +../../src/operations/durationOperation.o: ../../src/visitors/durationvisitor.h +../../src/operations/durationOperation.o: ../../src/lib/tree_browser.h +../../src/operations/durationOperation.o: ../../src/lib/browser.h +../../src/operations/durationOperation.o: ../../src/operations/durationOperation.h +../../src/operations/durationOperation.o: ../../src/visitors/clonevisitor.h +../../src/operations/durationOperation.o: ../../src/operations/operation.h +../../src/operations/eheadOperation.o: ../../src/guido/abstract/ARNote.h +../../src/operations/eheadOperation.o: ../../src/guido/guidoelement.h +../../src/operations/eheadOperation.o: ../../src/interface/export.h +../../src/operations/eheadOperation.o: ../../src/visitors/visitable.h +../../src/operations/eheadOperation.o: ../../src/visitors/basevisitor.h +../../src/operations/eheadOperation.o: ../../src/lib/ctree.h +../../src/operations/eheadOperation.o: ../../src/lib/smartpointer.h +../../src/operations/eheadOperation.o: ../../src/interface/guidorational.h +../../src/operations/eheadOperation.o: ../../src/guido/abstract/ARFactory.h +../../src/operations/eheadOperation.o: ../../src/lib/functor.h +../../src/operations/eheadOperation.o: ../../src/lib/singleton.h +../../src/operations/eheadOperation.o: ../../src/guido/abstract/ARTypes.h +../../src/operations/eheadOperation.o: ../../src/guido/guidotags.h +../../src/operations/eheadOperation.o: ../../src/guido/abstract/AROthers.h +../../src/operations/eheadOperation.o: ../../src/guido/abstract/ARTag.h +../../src/operations/eheadOperation.o: ../../src/visitors/visitor.h +../../src/operations/eheadOperation.o: ../../src/visitors/clonevisitor.h +../../src/operations/eheadOperation.o: ../../src/visitors/counteventsvisitor.h +../../src/operations/eheadOperation.o: ../../src/lib/tree_browser.h +../../src/operations/eheadOperation.o: ../../src/lib/browser.h +../../src/operations/eheadOperation.o: ../../src/operations/eheadOperation.h +../../src/operations/eheadOperation.o: ../../src/operations/headOperation.h +../../src/operations/eheadOperation.o: ../../src/visitors/durationvisitor.h +../../src/operations/eheadOperation.o: ../../src/operations/operation.h +../../src/operations/eheadOperation.o: ../../src/visitors/event2timevisitor.h +../../src/operations/etailOperation.o: ../../src/guido/abstract/ARNote.h +../../src/operations/etailOperation.o: ../../src/guido/guidoelement.h +../../src/operations/etailOperation.o: ../../src/interface/export.h +../../src/operations/etailOperation.o: ../../src/visitors/visitable.h +../../src/operations/etailOperation.o: ../../src/visitors/basevisitor.h +../../src/operations/etailOperation.o: ../../src/lib/ctree.h +../../src/operations/etailOperation.o: ../../src/lib/smartpointer.h +../../src/operations/etailOperation.o: ../../src/interface/guidorational.h +../../src/operations/etailOperation.o: ../../src/guido/abstract/ARFactory.h +../../src/operations/etailOperation.o: ../../src/lib/functor.h +../../src/operations/etailOperation.o: ../../src/lib/singleton.h +../../src/operations/etailOperation.o: ../../src/guido/abstract/ARTypes.h +../../src/operations/etailOperation.o: ../../src/guido/guidotags.h +../../src/operations/etailOperation.o: ../../src/guido/abstract/AROthers.h +../../src/operations/etailOperation.o: ../../src/guido/abstract/ARTag.h +../../src/operations/etailOperation.o: ../../src/visitors/visitor.h +../../src/operations/etailOperation.o: ../../src/visitors/clonevisitor.h +../../src/operations/etailOperation.o: ../../src/visitors/counteventsvisitor.h +../../src/operations/etailOperation.o: ../../src/lib/tree_browser.h +../../src/operations/etailOperation.o: ../../src/lib/browser.h +../../src/operations/etailOperation.o: ../../src/operations/etailOperation.h +../../src/operations/etailOperation.o: ../../src/operations/tailOperation.h +../../src/operations/etailOperation.o: ../../src/visitors/durationvisitor.h +../../src/operations/etailOperation.o: ../../src/operations/operation.h +../../src/operations/etailOperation.o: ../../src/visitors/event2timevisitor.h +../../src/operations/headOperation.o: ../../src/guido/abstract/ARNote.h +../../src/operations/headOperation.o: ../../src/guido/guidoelement.h +../../src/operations/headOperation.o: ../../src/interface/export.h +../../src/operations/headOperation.o: ../../src/visitors/visitable.h +../../src/operations/headOperation.o: ../../src/visitors/basevisitor.h +../../src/operations/headOperation.o: ../../src/lib/ctree.h +../../src/operations/headOperation.o: ../../src/lib/smartpointer.h +../../src/operations/headOperation.o: ../../src/interface/guidorational.h +../../src/operations/headOperation.o: ../../src/guido/abstract/ARFactory.h +../../src/operations/headOperation.o: ../../src/lib/functor.h +../../src/operations/headOperation.o: ../../src/lib/singleton.h +../../src/operations/headOperation.o: ../../src/guido/abstract/ARTypes.h +../../src/operations/headOperation.o: ../../src/guido/guidotags.h +../../src/operations/headOperation.o: ../../src/guido/abstract/ARChord.h +../../src/operations/headOperation.o: ../../src/guido/abstract/AROthers.h +../../src/operations/headOperation.o: ../../src/guido/abstract/ARTag.h +../../src/operations/headOperation.o: ../../src/visitors/visitor.h +../../src/operations/headOperation.o: ../../src/visitors/clonevisitor.h +../../src/operations/headOperation.o: ../../src/operations/headOperation.h +../../src/operations/headOperation.o: ../../src/visitors/durationvisitor.h +../../src/operations/headOperation.o: ../../src/lib/tree_browser.h +../../src/operations/headOperation.o: ../../src/lib/browser.h +../../src/operations/headOperation.o: ../../src/operations/operation.h +../../src/operations/headOperation.o: ../../src/operations/markers.h +../../src/operations/interleaveOperation.o: ../../src/visitors/clonevisitor.h +../../src/operations/interleaveOperation.o: ../../src/interface/export.h +../../src/operations/interleaveOperation.o: ../../src/guido/abstract/ARTypes.h +../../src/operations/interleaveOperation.o: ../../src/lib/smartpointer.h +../../src/operations/interleaveOperation.o: ../../src/guido/guidotags.h +../../src/operations/interleaveOperation.o: ../../src/visitors/visitor.h +../../src/operations/interleaveOperation.o: ../../src/visitors/basevisitor.h +../../src/operations/interleaveOperation.o: ../../src/visitors/durationvisitor.h +../../src/operations/interleaveOperation.o: ../../src/guido/guidoelement.h +../../src/operations/interleaveOperation.o: ../../src/visitors/visitable.h +../../src/operations/interleaveOperation.o: ../../src/lib/ctree.h +../../src/operations/interleaveOperation.o: ../../src/interface/guidorational.h +../../src/operations/interleaveOperation.o: ../../src/lib/tree_browser.h +../../src/operations/interleaveOperation.o: ../../src/lib/browser.h +../../src/operations/interleaveOperation.o: ../../src/operations/interleaveOperation.h +../../src/operations/interleaveOperation.o: ../../src/operations/operation.h +../../src/operations/interleaveOperation.o: ../../src/visitors/counteventsvisitor.h +../../src/operations/interleaveOperation.o: ../../src/guido/abstract/ARFactory.h +../../src/operations/interleaveOperation.o: ../../src/lib/functor.h +../../src/operations/interleaveOperation.o: ../../src/lib/singleton.h +../../src/operations/interleaveOperation.o: ../../src/guido/abstract/ARNote.h +../../src/operations/interleaveOperation.o: ../../src/guido/abstract/AROthers.h +../../src/operations/markers.o: ../../src/operations/markers.h +../../src/operations/markers.o: ../../src/guido/guidoelement.h +../../src/operations/markers.o: ../../src/interface/export.h +../../src/operations/markers.o: ../../src/visitors/visitable.h +../../src/operations/markers.o: ../../src/visitors/basevisitor.h +../../src/operations/markers.o: ../../src/lib/ctree.h +../../src/operations/markers.o: ../../src/lib/smartpointer.h +../../src/operations/markers.o: ../../src/guido/abstract/ARTag.h +../../src/operations/markers.o: ../../src/visitors/visitor.h +../../src/operations/markers.o: ../../src/guido/guidotags.h +../../src/operations/mirrorOperation.o: ../../src/guido/abstract/ARNote.h +../../src/operations/mirrorOperation.o: ../../src/guido/guidoelement.h +../../src/operations/mirrorOperation.o: ../../src/interface/export.h +../../src/operations/mirrorOperation.o: ../../src/visitors/visitable.h +../../src/operations/mirrorOperation.o: ../../src/visitors/basevisitor.h +../../src/operations/mirrorOperation.o: ../../src/lib/ctree.h +../../src/operations/mirrorOperation.o: ../../src/lib/smartpointer.h +../../src/operations/mirrorOperation.o: ../../src/interface/guidorational.h +../../src/operations/mirrorOperation.o: ../../src/guido/abstract/ARFactory.h +../../src/operations/mirrorOperation.o: ../../src/lib/functor.h +../../src/operations/mirrorOperation.o: ../../src/lib/singleton.h +../../src/operations/mirrorOperation.o: ../../src/guido/abstract/ARTypes.h +../../src/operations/mirrorOperation.o: ../../src/guido/guidotags.h +../../src/operations/mirrorOperation.o: ../../src/guido/abstract/AROthers.h +../../src/operations/mirrorOperation.o: ../../src/guido/abstract/ARTag.h +../../src/operations/mirrorOperation.o: ../../src/visitors/visitor.h +../../src/operations/mirrorOperation.o: ../../src/visitors/clonevisitor.h +../../src/operations/mirrorOperation.o: ../../src/visitors/firstpitchvisitor.h +../../src/operations/mirrorOperation.o: ../../src/lib/tree_browser.h +../../src/operations/mirrorOperation.o: ../../src/lib/browser.h +../../src/operations/mirrorOperation.o: ../../src/operations/mirrorOperation.h +../../src/operations/mirrorOperation.o: ../../src/operations/operation.h +../../src/operations/mirrorOperation.o: ../../src/operations/transposeOperation.h +../../src/operations/normalizeOperation.o: ../../src/guido/abstract/ARNote.h +../../src/operations/normalizeOperation.o: ../../src/guido/guidoelement.h +../../src/operations/normalizeOperation.o: ../../src/interface/export.h +../../src/operations/normalizeOperation.o: ../../src/visitors/visitable.h +../../src/operations/normalizeOperation.o: ../../src/visitors/basevisitor.h +../../src/operations/normalizeOperation.o: ../../src/lib/ctree.h +../../src/operations/normalizeOperation.o: ../../src/lib/smartpointer.h +../../src/operations/normalizeOperation.o: ../../src/interface/guidorational.h +../../src/operations/normalizeOperation.o: ../../src/guido/abstract/ARFactory.h +../../src/operations/normalizeOperation.o: ../../src/lib/functor.h +../../src/operations/normalizeOperation.o: ../../src/lib/singleton.h +../../src/operations/normalizeOperation.o: ../../src/guido/abstract/ARTypes.h +../../src/operations/normalizeOperation.o: ../../src/guido/guidotags.h +../../src/operations/normalizeOperation.o: ../../src/guido/abstract/AROthers.h +../../src/operations/normalizeOperation.o: ../../src/guido/abstract/ARTag.h +../../src/operations/normalizeOperation.o: ../../src/visitors/visitor.h +../../src/operations/normalizeOperation.o: ../../src/visitors/clonevisitor.h +../../src/operations/normalizeOperation.o: ../../src/operations/normalizeOperation.h +../../src/operations/normalizeOperation.o: ../../src/lib/tree_browser.h +../../src/operations/normalizeOperation.o: ../../src/lib/browser.h +../../src/operations/parOperation.o: ../../src/visitors/clonevisitor.h +../../src/operations/parOperation.o: ../../src/interface/export.h +../../src/operations/parOperation.o: ../../src/guido/abstract/ARTypes.h +../../src/operations/parOperation.o: ../../src/lib/smartpointer.h +../../src/operations/parOperation.o: ../../src/guido/guidotags.h +../../src/operations/parOperation.o: ../../src/visitors/visitor.h +../../src/operations/parOperation.o: ../../src/visitors/basevisitor.h +../../src/operations/parOperation.o: ../../src/visitors/durationvisitor.h +../../src/operations/parOperation.o: ../../src/guido/guidoelement.h +../../src/operations/parOperation.o: ../../src/visitors/visitable.h +../../src/operations/parOperation.o: ../../src/lib/ctree.h +../../src/operations/parOperation.o: ../../src/interface/guidorational.h +../../src/operations/parOperation.o: ../../src/lib/tree_browser.h +../../src/operations/parOperation.o: ../../src/lib/browser.h +../../src/operations/parOperation.o: ../../src/operations/parOperation.h +../../src/operations/parOperation.o: ../../src/operations/operation.h +../../src/operations/parOperation.o: ../../src/guido/abstract/ARFactory.h +../../src/operations/parOperation.o: ../../src/lib/functor.h +../../src/operations/parOperation.o: ../../src/lib/singleton.h +../../src/operations/parOperation.o: ../../src/guido/abstract/ARChord.h +../../src/operations/parOperation.o: ../../src/guido/abstract/ARNote.h +../../src/operations/parOperation.o: ../../src/guido/abstract/AROthers.h +../../src/operations/pitchApplyOperation.o: ../../src/operations/pitchApplyOperation.h +../../src/operations/pitchApplyOperation.o: ../../src/guido/abstract/ARChord.h +../../src/operations/pitchApplyOperation.o: ../../src/interface/export.h +../../src/operations/pitchApplyOperation.o: ../../src/guido/guidoelement.h +../../src/operations/pitchApplyOperation.o: ../../src/visitors/visitable.h +../../src/operations/pitchApplyOperation.o: ../../src/visitors/basevisitor.h +../../src/operations/pitchApplyOperation.o: ../../src/lib/ctree.h +../../src/operations/pitchApplyOperation.o: ../../src/lib/smartpointer.h +../../src/operations/pitchApplyOperation.o: ../../src/interface/guidorational.h +../../src/operations/pitchApplyOperation.o: ../../src/guido/abstract/ARNote.h +../../src/operations/pitchApplyOperation.o: ../../src/guido/abstract/AROthers.h +../../src/operations/pitchApplyOperation.o: ../../src/visitors/clonevisitor.h +../../src/operations/pitchApplyOperation.o: ../../src/guido/abstract/ARTypes.h +../../src/operations/pitchApplyOperation.o: ../../src/guido/guidotags.h +../../src/operations/pitchApplyOperation.o: ../../src/visitors/visitor.h +../../src/operations/pitchApplyOperation.o: ../../src/operations/operation.h +../../src/operations/pitchApplyOperation.o: ../../src/visitors/pitchvisitor.h +../../src/operations/pitchApplyOperation.o: ../../src/interface/libguidoar.h +../../src/operations/pitchApplyOperation.o: ../../src/lib/tree_browser.h +../../src/operations/pitchApplyOperation.o: ../../src/lib/browser.h +../../src/operations/pitchApplyOperation.o: ../../src/operations/transposeOperation.h +../../src/operations/rythmApplyOperation.o: ../../src/operations/rythmApplyOperation.h +../../src/operations/rythmApplyOperation.o: ../../src/guido/abstract/ARNote.h +../../src/operations/rythmApplyOperation.o: ../../src/guido/guidoelement.h +../../src/operations/rythmApplyOperation.o: ../../src/interface/export.h +../../src/operations/rythmApplyOperation.o: ../../src/visitors/visitable.h +../../src/operations/rythmApplyOperation.o: ../../src/visitors/basevisitor.h +../../src/operations/rythmApplyOperation.o: ../../src/lib/ctree.h +../../src/operations/rythmApplyOperation.o: ../../src/lib/smartpointer.h +../../src/operations/rythmApplyOperation.o: ../../src/interface/guidorational.h +../../src/operations/rythmApplyOperation.o: ../../src/guido/abstract/AROthers.h +../../src/operations/rythmApplyOperation.o: ../../src/visitors/clonevisitor.h +../../src/operations/rythmApplyOperation.o: ../../src/guido/abstract/ARTypes.h +../../src/operations/rythmApplyOperation.o: ../../src/guido/guidotags.h +../../src/operations/rythmApplyOperation.o: ../../src/visitors/visitor.h +../../src/operations/rythmApplyOperation.o: ../../src/operations/operation.h +../../src/operations/rythmApplyOperation.o: ../../src/visitors/rythmvisitor.h +../../src/operations/rythmApplyOperation.o: ../../src/lib/tree_browser.h +../../src/operations/rythmApplyOperation.o: ../../src/lib/browser.h +../../src/operations/seqOperation.o: ../../src/visitors/clonevisitor.h +../../src/operations/seqOperation.o: ../../src/interface/export.h +../../src/operations/seqOperation.o: ../../src/guido/abstract/ARTypes.h +../../src/operations/seqOperation.o: ../../src/lib/smartpointer.h +../../src/operations/seqOperation.o: ../../src/guido/guidotags.h +../../src/operations/seqOperation.o: ../../src/visitors/visitor.h +../../src/operations/seqOperation.o: ../../src/visitors/basevisitor.h +../../src/operations/seqOperation.o: ../../src/visitors/countvisitor.h +../../src/operations/seqOperation.o: ../../src/guido/guidoelement.h +../../src/operations/seqOperation.o: ../../src/visitors/visitable.h +../../src/operations/seqOperation.o: ../../src/lib/ctree.h +../../src/operations/seqOperation.o: ../../src/lib/tree_browser.h +../../src/operations/seqOperation.o: ../../src/lib/browser.h +../../src/operations/seqOperation.o: ../../src/operations/seqOperation.h +../../src/operations/seqOperation.o: ../../src/guido/abstract/ARTag.h +../../src/operations/seqOperation.o: ../../src/operations/operation.h +../../src/operations/seqOperation.o: ../../src/interface/guidorational.h +../../src/operations/seqOperation.o: ../../src/guido/abstract/ARFactory.h +../../src/operations/seqOperation.o: ../../src/lib/functor.h +../../src/operations/seqOperation.o: ../../src/lib/singleton.h +../../src/operations/seqOperation.o: ../../src/guido/abstract/ARChord.h +../../src/operations/seqOperation.o: ../../src/guido/abstract/ARNote.h +../../src/operations/seqOperation.o: ../../src/guido/abstract/AROthers.h +../../src/operations/seqOperation.o: ../../src/operations/markers.h +../../src/operations/tailOperation.o: ../../src/guido/abstract/ARChord.h +../../src/operations/tailOperation.o: ../../src/interface/export.h +../../src/operations/tailOperation.o: ../../src/guido/guidoelement.h +../../src/operations/tailOperation.o: ../../src/visitors/visitable.h +../../src/operations/tailOperation.o: ../../src/visitors/basevisitor.h +../../src/operations/tailOperation.o: ../../src/lib/ctree.h +../../src/operations/tailOperation.o: ../../src/lib/smartpointer.h +../../src/operations/tailOperation.o: ../../src/interface/guidorational.h +../../src/operations/tailOperation.o: ../../src/guido/abstract/ARNote.h +../../src/operations/tailOperation.o: ../../src/guido/abstract/AROthers.h +../../src/operations/tailOperation.o: ../../src/guido/abstract/ARTag.h +../../src/operations/tailOperation.o: ../../src/visitors/visitor.h +../../src/operations/tailOperation.o: ../../src/visitors/clonevisitor.h +../../src/operations/tailOperation.o: ../../src/guido/abstract/ARTypes.h +../../src/operations/tailOperation.o: ../../src/guido/guidotags.h +../../src/operations/tailOperation.o: ../../src/operations/markers.h +../../src/operations/tailOperation.o: ../../src/operations/tailOperation.h +../../src/operations/tailOperation.o: ../../src/visitors/durationvisitor.h +../../src/operations/tailOperation.o: ../../src/lib/tree_browser.h +../../src/operations/tailOperation.o: ../../src/lib/browser.h +../../src/operations/tailOperation.o: ../../src/operations/operation.h +../../src/operations/topOperation.o: ../../src/guido/abstract/AROthers.h +../../src/operations/topOperation.o: ../../src/interface/export.h +../../src/operations/topOperation.o: ../../src/guido/guidoelement.h +../../src/operations/topOperation.o: ../../src/visitors/visitable.h +../../src/operations/topOperation.o: ../../src/visitors/basevisitor.h +../../src/operations/topOperation.o: ../../src/lib/ctree.h +../../src/operations/topOperation.o: ../../src/lib/smartpointer.h +../../src/operations/topOperation.o: ../../src/guido/abstract/ARTag.h +../../src/operations/topOperation.o: ../../src/visitors/visitor.h +../../src/operations/topOperation.o: ../../src/operations/topOperation.h +../../src/operations/topOperation.o: ../../src/guido/abstract/ARTypes.h +../../src/operations/topOperation.o: ../../src/guido/guidotags.h +../../src/operations/topOperation.o: ../../src/visitors/clonevisitor.h +../../src/operations/topOperation.o: ../../src/operations/operation.h +../../src/operations/topOperation.o: ../../src/lib/tree_browser.h +../../src/operations/topOperation.o: ../../src/lib/browser.h +../../src/operations/transposeOperation.o: ../../src/guido/abstract/ARNote.h +../../src/operations/transposeOperation.o: ../../src/guido/guidoelement.h +../../src/operations/transposeOperation.o: ../../src/interface/export.h +../../src/operations/transposeOperation.o: ../../src/visitors/visitable.h +../../src/operations/transposeOperation.o: ../../src/visitors/basevisitor.h +../../src/operations/transposeOperation.o: ../../src/lib/ctree.h +../../src/operations/transposeOperation.o: ../../src/lib/smartpointer.h +../../src/operations/transposeOperation.o: ../../src/interface/guidorational.h +../../src/operations/transposeOperation.o: ../../src/guido/abstract/ARFactory.h +../../src/operations/transposeOperation.o: ../../src/lib/functor.h +../../src/operations/transposeOperation.o: ../../src/lib/singleton.h +../../src/operations/transposeOperation.o: ../../src/guido/abstract/ARTypes.h +../../src/operations/transposeOperation.o: ../../src/guido/guidotags.h +../../src/operations/transposeOperation.o: ../../src/guido/abstract/AROthers.h +../../src/operations/transposeOperation.o: ../../src/guido/abstract/ARTag.h +../../src/operations/transposeOperation.o: ../../src/visitors/visitor.h +../../src/operations/transposeOperation.o: ../../src/visitors/clonevisitor.h +../../src/operations/transposeOperation.o: ../../src/visitors/firstpitchvisitor.h +../../src/operations/transposeOperation.o: ../../src/lib/tree_browser.h +../../src/operations/transposeOperation.o: ../../src/lib/browser.h +../../src/operations/transposeOperation.o: ../../src/operations/transposeOperation.h +../../src/operations/transposeOperation.o: ../../src/operations/operation.h +../../src/parser/guidoparser.o: ../../src/parser/guidoparser.h +../../src/parser/guidoparser.o: ../../src/interface/export.h +../../src/parser/guidoparser.o: ../../src/parser/gmnreader.h +../../src/parser/guidoparser.o: ../../src/guido/abstract/ARTypes.h +../../src/parser/guidoparser.o: ../../src/lib/smartpointer.h +../../src/parser/guidoparser.o: ../../src/guido/guidotags.h +../../src/parser/guidoparser.o: ../../src/interface/guidorational.h +../../src/parser/guidoparser.o: ../../src/guido/guidoelement.h +../../src/parser/guidoparser.o: ../../src/visitors/visitable.h +../../src/parser/guidoparser.o: ../../src/visitors/basevisitor.h +../../src/parser/guidoparser.o: ../../src/lib/ctree.h +../../src/parser/guidoparser.o: ../../src/guido/abstract/ARFactory.h +../../src/parser/guidoparser.o: ../../src/lib/functor.h +../../src/parser/guidoparser.o: ../../src/lib/singleton.h +../../src/parser/guidoparser.o: ../../src/guido/abstract/ARChord.h +../../src/parser/guidoparser.o: ../../src/guido/abstract/ARNote.h +../../src/parser/guidoparser.o: ../../src/guido/abstract/AROthers.h +../../src/parser/guidoparser.o: ../../src/guido/abstract/ARTag.h +../../src/parser/guidoparser.o: ../../src/visitors/visitor.h +../../src/parser/parser.o: ../../src/parser/gmnreader.h +../../src/parser/parser.o: ../../src/guido/abstract/ARTypes.h +../../src/parser/parser.o: ../../src/lib/smartpointer.h +../../src/parser/parser.o: ../../src/interface/export.h +../../src/parser/parser.o: ../../src/guido/guidotags.h +../../src/parser/parser.o: ../../src/interface/guidorational.h +../../src/parser/parser.o: ../../src/parser/guidoparse.c++ +../../src/parser/parser.o: ../../src/guido/guidoelement.h +../../src/parser/parser.o: ../../src/visitors/visitable.h +../../src/parser/parser.o: ../../src/visitors/basevisitor.h +../../src/parser/parser.o: ../../src/lib/ctree.h +../../src/parser/parser.o: ../../src/parser/guidoparse.hpp +../../src/parser/parser.o: ../../src/parser/guidolex.c++ +../../src/parser/parser.o: ../../src/parser/unicode.c++ +../../src/visitors/clonevisitor.o: ../../src/guido/abstract/ARFactory.h +../../src/visitors/clonevisitor.o: ../../src/interface/export.h +../../src/visitors/clonevisitor.o: ../../src/lib/functor.h +../../src/visitors/clonevisitor.o: ../../src/lib/singleton.h +../../src/visitors/clonevisitor.o: ../../src/guido/abstract/ARTypes.h +../../src/visitors/clonevisitor.o: ../../src/lib/smartpointer.h +../../src/visitors/clonevisitor.o: ../../src/guido/guidotags.h +../../src/visitors/clonevisitor.o: ../../src/guido/abstract/ARChord.h +../../src/visitors/clonevisitor.o: ../../src/guido/guidoelement.h +../../src/visitors/clonevisitor.o: ../../src/visitors/visitable.h +../../src/visitors/clonevisitor.o: ../../src/visitors/basevisitor.h +../../src/visitors/clonevisitor.o: ../../src/lib/ctree.h +../../src/visitors/clonevisitor.o: ../../src/interface/guidorational.h +../../src/visitors/clonevisitor.o: ../../src/guido/abstract/ARNote.h +../../src/visitors/clonevisitor.o: ../../src/guido/abstract/AROthers.h +../../src/visitors/clonevisitor.o: ../../src/guido/abstract/ARTag.h +../../src/visitors/clonevisitor.o: ../../src/visitors/visitor.h +../../src/visitors/clonevisitor.o: ../../src/visitors/clonevisitor.h +../../src/visitors/clonevisitor.o: ../../src/lib/tree_browser.h +../../src/visitors/clonevisitor.o: ../../src/lib/browser.h +../../src/visitors/counteventsvisitor.o: ../../src/guido/abstract/ARChord.h +../../src/visitors/counteventsvisitor.o: ../../src/interface/export.h +../../src/visitors/counteventsvisitor.o: ../../src/guido/guidoelement.h +../../src/visitors/counteventsvisitor.o: ../../src/visitors/visitable.h +../../src/visitors/counteventsvisitor.o: ../../src/visitors/basevisitor.h +../../src/visitors/counteventsvisitor.o: ../../src/lib/ctree.h +../../src/visitors/counteventsvisitor.o: ../../src/lib/smartpointer.h +../../src/visitors/counteventsvisitor.o: ../../src/interface/guidorational.h +../../src/visitors/counteventsvisitor.o: ../../src/guido/abstract/ARNote.h +../../src/visitors/counteventsvisitor.o: ../../src/visitors/counteventsvisitor.h +../../src/visitors/counteventsvisitor.o: ../../src/guido/abstract/ARTypes.h +../../src/visitors/counteventsvisitor.o: ../../src/guido/guidotags.h +../../src/visitors/counteventsvisitor.o: ../../src/lib/tree_browser.h +../../src/visitors/counteventsvisitor.o: ../../src/lib/browser.h +../../src/visitors/counteventsvisitor.o: ../../src/visitors/visitor.h +../../src/visitors/durationvisitor.o: ../../src/guido/abstract/ARChord.h +../../src/visitors/durationvisitor.o: ../../src/interface/export.h +../../src/visitors/durationvisitor.o: ../../src/guido/guidoelement.h +../../src/visitors/durationvisitor.o: ../../src/visitors/visitable.h +../../src/visitors/durationvisitor.o: ../../src/visitors/basevisitor.h +../../src/visitors/durationvisitor.o: ../../src/lib/ctree.h +../../src/visitors/durationvisitor.o: ../../src/lib/smartpointer.h +../../src/visitors/durationvisitor.o: ../../src/interface/guidorational.h +../../src/visitors/durationvisitor.o: ../../src/guido/abstract/ARNote.h +../../src/visitors/durationvisitor.o: ../../src/guido/abstract/AROthers.h +../../src/visitors/durationvisitor.o: ../../src/visitors/durationvisitor.h +../../src/visitors/durationvisitor.o: ../../src/guido/abstract/ARTypes.h +../../src/visitors/durationvisitor.o: ../../src/guido/guidotags.h +../../src/visitors/durationvisitor.o: ../../src/lib/tree_browser.h +../../src/visitors/durationvisitor.o: ../../src/lib/browser.h +../../src/visitors/durationvisitor.o: ../../src/visitors/visitor.h +../../src/visitors/event2timevisitor.o: ../../src/guido/abstract/ARChord.h +../../src/visitors/event2timevisitor.o: ../../src/interface/export.h +../../src/visitors/event2timevisitor.o: ../../src/guido/guidoelement.h +../../src/visitors/event2timevisitor.o: ../../src/visitors/visitable.h +../../src/visitors/event2timevisitor.o: ../../src/visitors/basevisitor.h +../../src/visitors/event2timevisitor.o: ../../src/lib/ctree.h +../../src/visitors/event2timevisitor.o: ../../src/lib/smartpointer.h +../../src/visitors/event2timevisitor.o: ../../src/interface/guidorational.h +../../src/visitors/event2timevisitor.o: ../../src/guido/abstract/ARNote.h +../../src/visitors/event2timevisitor.o: ../../src/visitors/event2timevisitor.h +../../src/visitors/event2timevisitor.o: ../../src/visitors/durationvisitor.h +../../src/visitors/event2timevisitor.o: ../../src/guido/abstract/ARTypes.h +../../src/visitors/event2timevisitor.o: ../../src/guido/guidotags.h +../../src/visitors/event2timevisitor.o: ../../src/lib/tree_browser.h +../../src/visitors/event2timevisitor.o: ../../src/lib/browser.h +../../src/visitors/event2timevisitor.o: ../../src/visitors/visitor.h +../../src/visitors/event2timevisitor.o: ../../src/visitors/counteventsvisitor.h +../../src/visitors/firstpitchvisitor.o: ../../src/guido/abstract/ARNote.h +../../src/visitors/firstpitchvisitor.o: ../../src/guido/guidoelement.h +../../src/visitors/firstpitchvisitor.o: ../../src/interface/export.h +../../src/visitors/firstpitchvisitor.o: ../../src/visitors/visitable.h +../../src/visitors/firstpitchvisitor.o: ../../src/visitors/basevisitor.h +../../src/visitors/firstpitchvisitor.o: ../../src/lib/ctree.h +../../src/visitors/firstpitchvisitor.o: ../../src/lib/smartpointer.h +../../src/visitors/firstpitchvisitor.o: ../../src/interface/guidorational.h +../../src/visitors/firstpitchvisitor.o: ../../src/guido/abstract/ARFactory.h +../../src/visitors/firstpitchvisitor.o: ../../src/lib/functor.h +../../src/visitors/firstpitchvisitor.o: ../../src/lib/singleton.h +../../src/visitors/firstpitchvisitor.o: ../../src/guido/abstract/ARTypes.h +../../src/visitors/firstpitchvisitor.o: ../../src/guido/guidotags.h +../../src/visitors/firstpitchvisitor.o: ../../src/guido/abstract/AROthers.h +../../src/visitors/firstpitchvisitor.o: ../../src/guido/abstract/ARTag.h +../../src/visitors/firstpitchvisitor.o: ../../src/visitors/visitor.h +../../src/visitors/firstpitchvisitor.o: ../../src/visitors/clonevisitor.h +../../src/visitors/firstpitchvisitor.o: ../../src/visitors/firstpitchvisitor.h +../../src/visitors/firstpitchvisitor.o: ../../src/lib/tree_browser.h +../../src/visitors/firstpitchvisitor.o: ../../src/lib/browser.h +../../src/visitors/gmnvisitor.o: ../../src/visitors/gmnvisitor.h +../../src/visitors/gmnvisitor.o: ../../src/interface/export.h +../../src/visitors/gmnvisitor.o: ../../src/guido/abstract/ARTypes.h +../../src/visitors/gmnvisitor.o: ../../src/lib/smartpointer.h +../../src/visitors/gmnvisitor.o: ../../src/guido/guidotags.h +../../src/visitors/gmnvisitor.o: ../../src/lib/streambeautifuller.h +../../src/visitors/gmnvisitor.o: ../../src/visitors/visitor.h +../../src/visitors/gmnvisitor.o: ../../src/visitors/basevisitor.h +../../src/visitors/gmnvisitor.o: ../../src/guido/abstract/ARChord.h +../../src/visitors/gmnvisitor.o: ../../src/guido/guidoelement.h +../../src/visitors/gmnvisitor.o: ../../src/visitors/visitable.h +../../src/visitors/gmnvisitor.o: ../../src/lib/ctree.h +../../src/visitors/gmnvisitor.o: ../../src/interface/guidorational.h +../../src/visitors/gmnvisitor.o: ../../src/guido/abstract/ARNote.h +../../src/visitors/gmnvisitor.o: ../../src/guido/abstract/AROthers.h +../../src/visitors/gmnvisitor.o: ../../src/guido/abstract/ARTag.h +../../src/visitors/midicontextvisitor.o: ../../src/guido/abstract/ARChord.h +../../src/visitors/midicontextvisitor.o: ../../src/interface/export.h +../../src/visitors/midicontextvisitor.o: ../../src/guido/guidoelement.h +../../src/visitors/midicontextvisitor.o: ../../src/visitors/visitable.h +../../src/visitors/midicontextvisitor.o: ../../src/visitors/basevisitor.h +../../src/visitors/midicontextvisitor.o: ../../src/lib/ctree.h +../../src/visitors/midicontextvisitor.o: ../../src/lib/smartpointer.h +../../src/visitors/midicontextvisitor.o: ../../src/interface/guidorational.h +../../src/visitors/midicontextvisitor.o: ../../src/guido/abstract/ARNote.h +../../src/visitors/midicontextvisitor.o: ../../src/guido/abstract/AROthers.h +../../src/visitors/midicontextvisitor.o: ../../src/guido/abstract/ARTag.h +../../src/visitors/midicontextvisitor.o: ../../src/visitors/visitor.h +../../src/visitors/midicontextvisitor.o: ../../src/visitors/midicontextvisitor.h +../../src/visitors/midicontextvisitor.o: ../../src/guido/abstract/ARTypes.h +../../src/visitors/midicontextvisitor.o: ../../src/guido/guidotags.h +../../src/visitors/midicontextvisitor.o: ../../src/operations/transposeOperation.h +../../src/visitors/midicontextvisitor.o: ../../src/operations/operation.h +../../src/visitors/midicontextvisitor.o: ../../src/visitors/unrolled_guido_browser.h +../../src/visitors/midicontextvisitor.o: ../../src/lib/browser.h +../../src/visitors/pitchvisitor.o: ../../src/guido/abstract/ARChord.h +../../src/visitors/pitchvisitor.o: ../../src/interface/export.h +../../src/visitors/pitchvisitor.o: ../../src/guido/guidoelement.h +../../src/visitors/pitchvisitor.o: ../../src/visitors/visitable.h +../../src/visitors/pitchvisitor.o: ../../src/visitors/basevisitor.h +../../src/visitors/pitchvisitor.o: ../../src/lib/ctree.h +../../src/visitors/pitchvisitor.o: ../../src/lib/smartpointer.h +../../src/visitors/pitchvisitor.o: ../../src/interface/guidorational.h +../../src/visitors/pitchvisitor.o: ../../src/guido/abstract/ARNote.h +../../src/visitors/pitchvisitor.o: ../../src/guido/abstract/AROthers.h +../../src/visitors/pitchvisitor.o: ../../src/visitors/pitchvisitor.h +../../src/visitors/pitchvisitor.o: ../../src/guido/abstract/ARTypes.h +../../src/visitors/pitchvisitor.o: ../../src/guido/guidotags.h +../../src/visitors/pitchvisitor.o: ../../src/interface/libguidoar.h +../../src/visitors/pitchvisitor.o: ../../src/lib/tree_browser.h +../../src/visitors/pitchvisitor.o: ../../src/lib/browser.h +../../src/visitors/pitchvisitor.o: ../../src/visitors/visitor.h +../../src/visitors/rythmvisitor.o: ../../src/guido/abstract/ARChord.h +../../src/visitors/rythmvisitor.o: ../../src/interface/export.h +../../src/visitors/rythmvisitor.o: ../../src/guido/guidoelement.h +../../src/visitors/rythmvisitor.o: ../../src/visitors/visitable.h +../../src/visitors/rythmvisitor.o: ../../src/visitors/basevisitor.h +../../src/visitors/rythmvisitor.o: ../../src/lib/ctree.h +../../src/visitors/rythmvisitor.o: ../../src/lib/smartpointer.h +../../src/visitors/rythmvisitor.o: ../../src/interface/guidorational.h +../../src/visitors/rythmvisitor.o: ../../src/guido/abstract/ARNote.h +../../src/visitors/rythmvisitor.o: ../../src/guido/abstract/AROthers.h +../../src/visitors/rythmvisitor.o: ../../src/visitors/rythmvisitor.h +../../src/visitors/rythmvisitor.o: ../../src/guido/abstract/ARTypes.h +../../src/visitors/rythmvisitor.o: ../../src/guido/guidotags.h +../../src/visitors/rythmvisitor.o: ../../src/lib/tree_browser.h +../../src/visitors/rythmvisitor.o: ../../src/lib/browser.h +../../src/visitors/rythmvisitor.o: ../../src/visitors/visitor.h +../../src/visitors/unrolled_guido_browser.o: ../../src/guido/abstract/ARNote.h +../../src/visitors/unrolled_guido_browser.o: ../../src/guido/guidoelement.h +../../src/visitors/unrolled_guido_browser.o: ../../src/interface/export.h +../../src/visitors/unrolled_guido_browser.o: ../../src/visitors/visitable.h +../../src/visitors/unrolled_guido_browser.o: ../../src/visitors/basevisitor.h +../../src/visitors/unrolled_guido_browser.o: ../../src/lib/ctree.h +../../src/visitors/unrolled_guido_browser.o: ../../src/lib/smartpointer.h +../../src/visitors/unrolled_guido_browser.o: ../../src/interface/guidorational.h +../../src/visitors/unrolled_guido_browser.o: ../../src/guido/abstract/AROthers.h +../../src/visitors/unrolled_guido_browser.o: ../../src/guido/abstract/ARTag.h +../../src/visitors/unrolled_guido_browser.o: ../../src/visitors/visitor.h +../../src/visitors/unrolled_guido_browser.o: ../../src/visitors/unrolled_guido_browser.h +../../src/visitors/unrolled_guido_browser.o: ../../src/guido/abstract/ARTypes.h +../../src/visitors/unrolled_guido_browser.o: ../../src/guido/guidotags.h +../../src/visitors/unrolled_guido_browser.o: ../../src/lib/browser.h diff --git a/guidoar-dev/lang/javascript/libGuidoAR.js b/guidoar-dev/lang/javascript/libGuidoAR.js new file mode 100644 index 000000000..b610c3c04 --- /dev/null +++ b/guidoar-dev/lang/javascript/libGuidoAR.js @@ -0,0 +1,25 @@ +var Module;if(!Module)Module=(typeof Module!=="undefined"?Module:null)||{};var moduleOverrides={};for(var key in Module){if(Module.hasOwnProperty(key)){moduleOverrides[key]=Module[key]}}var ENVIRONMENT_IS_WEB=typeof window==="object";var ENVIRONMENT_IS_WORKER=typeof importScripts==="function";var ENVIRONMENT_IS_NODE=typeof process==="object"&&typeof require==="function"&&!ENVIRONMENT_IS_WEB&&!ENVIRONMENT_IS_WORKER;var ENVIRONMENT_IS_SHELL=!ENVIRONMENT_IS_WEB&&!ENVIRONMENT_IS_NODE&&!ENVIRONMENT_IS_WORKER;if(ENVIRONMENT_IS_NODE){if(!Module["print"])Module["print"]=function print(x){process["stdout"].write(x+"\n")};if(!Module["printErr"])Module["printErr"]=function printErr(x){process["stderr"].write(x+"\n")};var nodeFS=require("fs");var nodePath=require("path");Module["read"]=function read(filename,binary){filename=nodePath["normalize"](filename);var ret=nodeFS["readFileSync"](filename);if(!ret&&filename!=nodePath["resolve"](filename)){filename=path.join(__dirname,"..","src",filename);ret=nodeFS["readFileSync"](filename)}if(ret&&!binary)ret=ret.toString();return ret};Module["readBinary"]=function readBinary(filename){var ret=Module["read"](filename,true);if(!ret.buffer){ret=new Uint8Array(ret)}assert(ret.buffer);return ret};Module["load"]=function load(f){globalEval(read(f))};if(!Module["thisProgram"]){if(process["argv"].length>1){Module["thisProgram"]=process["argv"][1].replace(/\\/g,"/")}else{Module["thisProgram"]="unknown-program"}}Module["arguments"]=process["argv"].slice(2);if(typeof module!=="undefined"){module["exports"]=Module}process["on"]("uncaughtException",(function(ex){if(!(ex instanceof ExitStatus)){throw ex}}));Module["inspect"]=(function(){return"[Emscripten Module object]"})}else if(ENVIRONMENT_IS_SHELL){if(!Module["print"])Module["print"]=print;if(typeof printErr!="undefined")Module["printErr"]=printErr;if(typeof read!="undefined"){Module["read"]=read}else{Module["read"]=function read(){throw"no read() available (jsc?)"}}Module["readBinary"]=function readBinary(f){if(typeof readbuffer==="function"){return new Uint8Array(readbuffer(f))}var 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}}else if(ENVIRONMENT_IS_WEB||ENVIRONMENT_IS_WORKER){Module["read"]=function read(url){var xhr=new XMLHttpRequest;xhr.open("GET",url,false);xhr.send(null);return xhr.responseText};if(typeof arguments!="undefined"){Module["arguments"]=arguments}if(typeof console!=="undefined"){if(!Module["print"])Module["print"]=function print(x){console.log(x)};if(!Module["printErr"])Module["printErr"]=function printErr(x){console.log(x)}}else{var TRY_USE_DUMP=false;if(!Module["print"])Module["print"]=TRY_USE_DUMP&&typeof dump!=="undefined"?(function(x){dump(x)}):(function(x){})}if(ENVIRONMENT_IS_WORKER){Module["load"]=importScripts}if(typeof Module["setWindowTitle"]==="undefined"){Module["setWindowTitle"]=(function(title){document.title=title})}}else{throw"Unknown runtime environment. Where are we?"}function globalEval(x){eval.call(null,x)}if(!Module["load"]&&Module["read"]){Module["load"]=function load(f){globalEval(Module["read"](f))}}if(!Module["print"]){Module["print"]=(function(){})}if(!Module["printErr"]){Module["printErr"]=Module["print"]}if(!Module["arguments"]){Module["arguments"]=[]}if(!Module["thisProgram"]){Module["thisProgram"]="./this.program"}Module.print=Module["print"];Module.printErr=Module["printErr"];Module["preRun"]=[];Module["postRun"]=[];for(var key in moduleOverrides){if(moduleOverrides.hasOwnProperty(key)){Module[key]=moduleOverrides[key]}}var Runtime={setTempRet0:(function(value){tempRet0=value}),getTempRet0:(function(){return tempRet0}),stackSave:(function(){return STACKTOP}),stackRestore:(function(stackTop){STACKTOP=stackTop}),getNativeTypeSize:(function(type){switch(type){case"i1":case"i8":return 1;case"i16":return 2;case"i32":return 4;case"i64":return 8;case"float":return 4;case"double":return 8;default:{if(type[type.length-1]==="*"){return Runtime.QUANTUM_SIZE}else if(type[0]==="i"){var bits=parseInt(type.substr(1));assert(bits%8===0);return bits/8}else{return 0}}}}),getNativeFieldSize:(function(type){return Math.max(Runtime.getNativeTypeSize(type),Runtime.QUANTUM_SIZE)}),STACK_ALIGN:16,prepVararg:(function(ptr,type){if(type==="double"||type==="i64"){if(ptr&7){assert((ptr&7)===4);ptr+=4}}else{assert((ptr&3)===0)}return ptr}),getAlignSize:(function(type,size,vararg){if(!vararg&&(type=="i64"||type=="double"))return 8;if(!type)return Math.min(size,8);return Math.min(size||(type?Runtime.getNativeFieldSize(type):0),Runtime.QUANTUM_SIZE)}),dynCall:(function(sig,ptr,args){if(args&&args.length){if(!args.splice)args=Array.prototype.slice.call(args);args.splice(0,0,ptr);return Module["dynCall_"+sig].apply(null,args)}else{return Module["dynCall_"+sig].call(null,ptr)}}),functionPointers:[],addFunction:(function(func){for(var i=0;i=TOTAL_MEMORY){var success=enlargeMemory();if(!success){DYNAMICTOP=ret;return 0}}return ret}),alignMemory:(function(size,quantum){var ret=size=Math.ceil(size/(quantum?quantum:16))*(quantum?quantum:16);return ret}),makeBigInt:(function(low,high,unsigned){var ret=unsigned?+(low>>>0)+ +(high>>>0)*+4294967296:+(low>>>0)+ +(high|0)*+4294967296;return ret}),GLOBAL_BASE:8,QUANTUM_SIZE:4,__dummy__:0};Module["Runtime"]=Runtime;var __THREW__=0;var ABORT=false;var EXITSTATUS=0;var undef=0;var tempValue,tempInt,tempBigInt,tempInt2,tempBigInt2,tempPair,tempBigIntI,tempBigIntR,tempBigIntS,tempBigIntP,tempBigIntD,tempDouble,tempFloat;var tempI64,tempI64b;var tempRet0,tempRet1,tempRet2,tempRet3,tempRet4,tempRet5,tempRet6,tempRet7,tempRet8,tempRet9;function assert(condition,text){if(!condition){abort("Assertion failed: "+text)}}var globalScope=this;function getCFunc(ident){var func=Module["_"+ident];if(!func){try{func=eval("_"+ident)}catch(e){}}assert(func,"Cannot call unknown function "+ident+" (perhaps LLVM optimizations or closure removed it?)");return func}var cwrap,ccall;((function(){var JSfuncs={"stackSave":(function(){Runtime.stackSave()}),"stackRestore":(function(){Runtime.stackRestore()}),"arrayToC":(function(arr){var ret=Runtime.stackAlloc(arr.length);writeArrayToMemory(arr,ret);return ret}),"stringToC":(function(str){var ret=0;if(str!==null&&str!==undefined&&str!==0){ret=Runtime.stackAlloc((str.length<<2)+1);writeStringToMemory(str,ret)}return ret})};var toC={"string":JSfuncs["stringToC"],"array":JSfuncs["arrayToC"]};ccall=function ccallFunc(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)}}Module["setValue"]=setValue;function getValue(ptr,type,noSafe){type=type||"i8";if(type.charAt(type.length-1)==="*")type="i32";switch(type){case"i1":return HEAP8[ptr>>0];case"i8":return HEAP8[ptr>>0];case"i16":return HEAP16[ptr>>1];case"i32":return HEAP32[ptr>>2];case"i64":return HEAP32[ptr>>2];case"float":return HEAPF32[ptr>>2];case"double":return HEAPF64[ptr>>3];default:abort("invalid type for setValue: "+type)}return null}Module["getValue"]=getValue;var ALLOC_NORMAL=0;var ALLOC_STACK=1;var ALLOC_STATIC=2;var ALLOC_DYNAMIC=3;var ALLOC_NONE=4;Module["ALLOC_NORMAL"]=ALLOC_NORMAL;Module["ALLOC_STACK"]=ALLOC_STACK;Module["ALLOC_STATIC"]=ALLOC_STATIC;Module["ALLOC_DYNAMIC"]=ALLOC_DYNAMIC;Module["ALLOC_NONE"]=ALLOC_NONE;function allocate(slab,types,allocator,ptr){var zeroinit,size;if(typeof slab==="number"){zeroinit=true;size=slab}else{zeroinit=false;size=slab.length}var singleType=typeof types==="string"?types:null;var ret;if(allocator==ALLOC_NONE){ret=ptr}else{ret=[_malloc,Runtime.stackAlloc,Runtime.staticAlloc,Runtime.dynamicAlloc][allocator===undefined?ALLOC_STATIC:allocator](Math.max(size,singleType?1:types.length))}if(zeroinit){var ptr=ret,stop;assert((ret&3)==0);stop=ret+(size&~3);for(;ptr>2]=0}stop=ret+size;while(ptr>0]=0}return ret}if(singleType==="i8"){if(slab.subarray||slab.slice){HEAPU8.set(slab,ret)}else{HEAPU8.set(new Uint8Array(slab),ret)}return ret}var i=0,type,typeSize,previousType;while(i>0];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 Module["UTF8ToString"](ptr)}Module["Pointer_stringify"]=Pointer_stringify;function AsciiToString(ptr){var str="";while(1){var ch=HEAP8[ptr++>>0];if(!ch)return str;str+=String.fromCharCode(ch)}}Module["AsciiToString"]=AsciiToString;function stringToAscii(str,outPtr){return writeAsciiToMemory(str,outPtr,false)}Module["stringToAscii"]=stringToAscii;function UTF8ArrayToString(u8Array,idx){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)}}}Module["UTF8ArrayToString"]=UTF8ArrayToString;function UTF8ToString(ptr){return UTF8ArrayToString(HEAPU8,ptr)}Module["UTF8ToString"]=UTF8ToString;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}Module["stringToUTF8Array"]=stringToUTF8Array;function stringToUTF8(str,outPtr,maxBytesToWrite){return stringToUTF8Array(str,HEAPU8,outPtr,maxBytesToWrite)}Module["stringToUTF8"]=stringToUTF8;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}Module["lengthBytesUTF8"]=lengthBytesUTF8;function UTF16ToString(ptr){var i=0;var str="";while(1){var codeUnit=HEAP16[ptr+i*2>>1];if(codeUnit==0)return str;++i;str+=String.fromCharCode(codeUnit)}}Module["UTF16ToString"]=UTF16ToString;function stringToUTF16(str,outPtr,maxBytesToWrite){if(maxBytesToWrite===undefined){maxBytesToWrite=2147483647}if(maxBytesToWrite<2)return 0;maxBytesToWrite-=2;var startPtr=outPtr;var numCharsToWrite=maxBytesToWrite>1]=codeUnit;outPtr+=2}HEAP16[outPtr>>1]=0;return outPtr-startPtr}Module["stringToUTF16"]=stringToUTF16;function lengthBytesUTF16(str){return str.length*2}Module["lengthBytesUTF16"]=lengthBytesUTF16;function UTF32ToString(ptr){var i=0;var str="";while(1){var utf32=HEAP32[ptr+i*4>>2];if(utf32==0)return str;++i;if(utf32>=65536){var ch=utf32-65536;str+=String.fromCharCode(55296|ch>>10,56320|ch&1023)}else{str+=String.fromCharCode(utf32)}}}Module["UTF32ToString"]=UTF32ToString;function stringToUTF32(str,outPtr,maxBytesToWrite){if(maxBytesToWrite===undefined){maxBytesToWrite=2147483647}if(maxBytesToWrite<4)return 0;var startPtr=outPtr;var endPtr=startPtr+maxBytesToWrite-4;for(var i=0;i=55296&&codeUnit<=57343){var trailSurrogate=str.charCodeAt(++i);codeUnit=65536+((codeUnit&1023)<<10)|trailSurrogate&1023}HEAP32[outPtr>>2]=codeUnit;outPtr+=4;if(outPtr+4>endPtr)break}HEAP32[outPtr>>2]=0;return outPtr-startPtr}Module["stringToUTF32"]=stringToUTF32;function lengthBytesUTF32(str){var len=0;for(var i=0;i=55296&&codeUnit<=57343)++i;len+=4}return len}Module["lengthBytesUTF32"]=lengthBytesUTF32;function demangle(func){var hasLibcxxabi=!!Module["___cxa_demangle"];if(hasLibcxxabi){try{var buf=_malloc(func.length);writeStringToMemory(func.substr(1),buf);var status=_malloc(4);var ret=Module["___cxa_demangle"](buf,0,0,status);if(getValue(status,"i32")===0&&ret){return Pointer_stringify(ret)}}catch(e){}finally{if(buf)_free(buf);if(status)_free(status);if(ret)_free(ret)}}var i=3;var basicTypes={"v":"void","b":"bool","c":"char","s":"short","i":"int","l":"long","f":"float","d":"double","w":"wchar_t","a":"signed char","h":"unsigned char","t":"unsigned short","j":"unsigned int","m":"unsigned long","x":"long long","y":"unsigned long long","z":"..."};var subs=[];var first=true;function dump(x){if(x)Module.print(x);Module.print(func);var pre="";for(var a=0;a"}else{ret=name}paramLoop:while(i0){var c=func[i++];if(c in basicTypes){list.push(basicTypes[c])}else{switch(c){case"P":list.push(parse(true,1,true)[0]+"*");break;case"R":list.push(parse(true,1,true)[0]+"&");break;case"L":{i++;var end=func.indexOf("E",i);var size=end-i;list.push(func.substr(i,size));i+=size+2;break};case"A":{var size=parseInt(func.substr(i));i+=size.toString().length;if(func[i]!=="_")throw"?";i++;list.push(parse(true,1,true)[0]+" ["+size+"]");break};case"E":break paramLoop;default:ret+="?"+c;break paramLoop}}}if(!allowVoid&&list.length===1&&list[0]==="void")list=[];if(rawList){if(ret){list.push(ret+"?")}return list}else{return ret+flushList()}}var parsed=func;try{if(func=="Object._main"||func=="_main"){return"main()"}if(typeof func==="number")func=Pointer_stringify(func);if(func[0]!=="_")return func;if(func[1]!=="_")return func;if(func[2]!=="Z")return func;switch(func[3]){case"n":return"operator new()";case"d":return"operator delete()"}parsed=parse()}catch(e){parsed+="?"}if(parsed.indexOf("?")>=0&&!hasLibcxxabi){Runtime.warnOnce("warning: a problem occurred in builtin C++ name demangling; build with -s DEMANGLE_SUPPORT=1 to link in libcxxabi demangling")}return parsed}function demangleAll(text){return text.replace(/__Z[\w\d_]+/g,(function(x){var y=demangle(x);return x===y?x:x+" ["+y+"]"}))}function jsStackTrace(){var err=new Error;if(!err.stack){try{throw new Error(0)}catch(e){err=e}if(!err.stack){return"(no stack trace available)"}}return err.stack.toString()}function stackTrace(){return demangleAll(jsStackTrace())}Module["stackTrace"]=stackTrace;var PAGE_SIZE=4096;function alignMemoryPage(x){if(x%4096>0){x+=4096-x%4096}return x}var HEAP;var HEAP8,HEAPU8,HEAP16,HEAPU16,HEAP32,HEAPU32,HEAPF32,HEAPF64;var STATIC_BASE=0,STATICTOP=0,staticSealed=false;var STACK_BASE=0,STACKTOP=0,STACK_MAX=0;var DYNAMIC_BASE=0,DYNAMICTOP=0;function 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 adjusts the size at runtime but prevents some optimizations, (3) set Module.TOTAL_MEMORY to a higher value before the program runs, or if you want malloc to return NULL (0) instead of this abort, compile with -s ABORTING_MALLOC=0 ")}function enlargeMemory(){abortOnCannotGrowMemory()}var TOTAL_STACK=Module["TOTAL_STACK"]||5242880;var TOTAL_MEMORY=Module["TOTAL_MEMORY"]||100663296;var totalMemory=64*1024;while(totalMemory0){var callback=callbacks.shift();if(typeof callback=="function"){callback();continue}var func=callback.func;if(typeof func==="number"){if(callback.arg===undefined){Runtime.dynCall("v",func)}else{Runtime.dynCall("vi",func,[callback.arg])}}else{func(callback.arg===undefined?null:callback.arg)}}}var __ATPRERUN__=[];var __ATINIT__=[];var __ATMAIN__=[];var __ATEXIT__=[];var __ATPOSTRUN__=[];var runtimeInitialized=false;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)}Module["addOnPreRun"]=addOnPreRun;function addOnInit(cb){__ATINIT__.unshift(cb)}Module["addOnInit"]=addOnInit;function addOnPreMain(cb){__ATMAIN__.unshift(cb)}Module["addOnPreMain"]=addOnPreMain;function addOnExit(cb){__ATEXIT__.unshift(cb)}Module["addOnExit"]=addOnExit;function addOnPostRun(cb){__ATPOSTRUN__.unshift(cb)}Module["addOnPostRun"]=addOnPostRun;function intArrayFromString(stringy,dontAddNull,length){var len=length>0?length:lengthBytesUTF8(stringy)+1;var u8array=new Array(len);var numBytesWritten=stringToUTF8Array(stringy,u8array,0,u8array.length);if(dontAddNull)u8array.length=numBytesWritten;return u8array}Module["intArrayFromString"]=intArrayFromString;function intArrayToString(array){var ret=[];for(var i=0;i255){chr&=255}ret.push(String.fromCharCode(chr))}return ret.join("")}Module["intArrayToString"]=intArrayToString;function writeStringToMemory(string,buffer,dontAddNull){var array=intArrayFromString(string,dontAddNull);var i=0;while(i>0]=chr;i=i+1}}Module["writeStringToMemory"]=writeStringToMemory;function writeArrayToMemory(array,buffer){for(var i=0;i>0]=array[i]}}Module["writeArrayToMemory"]=writeArrayToMemory;function writeAsciiToMemory(str,buffer,dontAddNull){for(var i=0;i>0]=str.charCodeAt(i)}if(!dontAddNull)HEAP8[buffer>>0]=0}Module["writeAsciiToMemory"]=writeAsciiToMemory;function unSign(value,bits,ignore){if(value>=0){return value}return bits<=32?2*Math.abs(1<=half&&(bits<=32||value>half)){value=-2*half+value}return value}if(!Math["imul"]||Math["imul"](4294967295,5)!==-5)Math["imul"]=function imul(a,b){var ah=a>>>16;var al=a&65535;var bh=b>>>16;var bl=b&65535;return al*bl+(ah*bl+al*bh<<16)|0};Math.imul=Math["imul"];if(!Math["clz32"])Math["clz32"]=(function(x){x=x>>>0;for(var i=0;i<32;i++){if(x&1<<31-i)return i}return 32});Math.clz32=Math["clz32"];var Math_abs=Math.abs;var Math_cos=Math.cos;var Math_sin=Math.sin;var Math_tan=Math.tan;var Math_acos=Math.acos;var Math_asin=Math.asin;var Math_atan=Math.atan;var Math_atan2=Math.atan2;var Math_exp=Math.exp;var Math_log=Math.log;var Math_sqrt=Math.sqrt;var Math_ceil=Math.ceil;var Math_floor=Math.floor;var Math_pow=Math.pow;var Math_imul=Math.imul;var Math_fround=Math.fround;var Math_min=Math.min;var Math_clz32=Math.clz32;var runDependencies=0;var runDependencyWatcher=null;var dependenciesFulfilled=null;function getUniqueRunDependency(id){return id}function addRunDependency(id){runDependencies++;if(Module["monitorRunDependencies"]){Module["monitorRunDependencies"](runDependencies)}}Module["addRunDependency"]=addRunDependency;function removeRunDependency(id){runDependencies--;if(Module["monitorRunDependencies"]){Module["monitorRunDependencies"](runDependencies)}if(runDependencies==0){if(runDependencyWatcher!==null){clearInterval(runDependencyWatcher);runDependencyWatcher=null}if(dependenciesFulfilled){var callback=dependenciesFulfilled;dependenciesFulfilled=null;callback()}}}Module["removeRunDependency"]=removeRunDependency;Module["preloadedImages"]={};Module["preloadedAudios"]={};var memoryInitializer=null;var ASM_CONSTS=[];STATIC_BASE=8;STATICTOP=STATIC_BASE+89760;__ATINIT__.push({func:(function(){__GLOBAL__I_000101()})},{func:(function(){__GLOBAL__sub_I_ARNote_cpp()})},{func:(function(){__GLOBAL__sub_I_bindings_cpp()})},{func:(function(){__GLOBAL__sub_I_bind_cpp()})},{func:(function(){__GLOBAL__sub_I_iostream_cpp()})});allocate([0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,240,6,0,0,44,0,0,0,45,0,0,0,21,0,0,0,20,0,0,0,4,0,0,0,0,0,0,0,216,34,0,0,69,4,0,0,70,4,0,0,17,0,0,0,63,2,0,0,64,2,0,0,65,2,0,0,66,2,0,0,67,2,0,0,68,2,0,0,69,2,0,0,0,0,0,0,252,255,255,255,252,255,255,255,216,34,0,0,71,4,0,0,72,4,0,0,243,1,0,0,244,1,0,0,124,0,0,0,8,0,0,0,70,2,0,0,71,2,0,0,72,2,0,0,73,2,0,0,74,2,0,0,75,2,0,0,76,2,0,0,9,0,0,0,4,0,0,0,5,0,0,0,6,0,0,0,6,0,0,0,125,0,0,0,252,255,255,255,248,255,255,255,248,255,255,255,216,34,0,0,73,4,0,0,74,4,0,0,77,2,0,0,78,2,0,0,248,255,255,255,244,255,255,255,244,255,255,255,216,34,0,0,75,4,0,0,76,4,0,0,79,2,0,0,80,2,0,0,244,255,255,255,240,255,255,255,240,255,255,255,216,34,0,0,77,4,0,0,78,4,0,0,81,2,0,0,20,0,0,0,240,255,255,255,236,255,255,255,236,255,255,255,216,34,0,0,79,4,0,0,80,4,0,0,82,2,0,0,83,2,0,0,4,0,0,0,0,0,0,0,72,35,0,0,98,4,0,0,99,4,0,0,1,0,0,0,237,1,0,0,3,0,0,0,3,0,0,0,4,0,0,0,238,1,0,0,239,1,0,0,123,0,0,0,0,0,0,0,252,255,255,255,252,255,255,255,72,35,0,0,100,4,0,0,101,4,0,0,243,1,0,0,244,1,0,0,124,0,0,0,8,0,0,0,245,1,0,0,48,2,0,0,49,2,0,0,248,1,0,0,249,1,0,0,51,2,0,0,251,1,0,0,9,0,0,0,4,0,0,0,5,0,0,0,6,0,0,0,6,0,0,0,125,0,0,0,252,255,255,255,248,255,255,255,248,255,255,255,72,35,0,0,102,4,0,0,103,4,0,0,252,1,0,0,253,1,0,0,248,255,255,255,244,255,255,255,244,255,255,255,72,35,0,0,104,4,0,0,105,4,0,0,54,2,0,0,55,2,0,0,244,255,255,255,240,255,255,255,240,255,255,255,72,35,0,0,106,4,0,0,107,4,0,0,56,2,0,0,20,0,0,0,240,255,255,255,236,255,255,255,236,255,255,255,72,35,0,0,108,4,0,0,109,4,0,0,1,2,0,0,2,2,0,0,4,0,0,0,0,0,0,0,120,35,0,0,112,4,0,0,113,4,0,0,1,0,0,0,21,2,0,0,22,2,0,0,116,2,0,0,0,0,0,0,252,255,255,255,252,255,255,255,120,35,0,0,114,4,0,0,115,4,0,0,243,1,0,0,244,1,0,0,124,0,0,0,8,0,0,0,25,2,0,0,26,2,0,0,49,2,0,0,248,1,0,0,249,1,0,0,117,2,0,0,251,1,0,0,9,0,0,0,4,0,0,0,5,0,0,0,6,0,0,0,6,0,0,0,125,0,0,0,252,255,255,255,248,255,255,255,248,255,255,255,120,35,0,0,116,4,0,0,117,4,0,0,29,2,0,0,253,1,0,0,248,255,255,255,244,255,255,255,244,255,255,255,120,35,0,0,118,4,0,0,119,4,0,0,30,2,0,0,118,2,0,0,244,255,255,255,240,255,255,255,240,255,255,255,120,35,0,0,120,4,0,0,121,4,0,0,56,2,0,0,20,0,0,0,240,255,255,255,236,255,255,255,236,255,255,255,120,35,0,0,122,4,0,0,123,4,0,0,1,2,0,0,2,2,0,0,4,0,0,0,0,0,0,0,240,35,0,0,164,4,0,0,165,4,0,0,20,0,0,0,84,2,0,0,85,2,0,0,86,2,0,0,87,2,0,0,88,2,0,0,89,2,0,0,90,2,0,0,0,0,0,0,252,255,255,255,252,255,255,255,240,35,0,0,166,4,0,0,167,4,0,0,243,1,0,0,244,1,0,0,124,0,0,0,8,0,0,0,91,2,0,0,92,2,0,0,93,2,0,0,94,2,0,0,95,2,0,0,96,2,0,0,97,2,0,0,9,0,0,0,4,0,0,0,5,0,0,0,6,0,0,0,6,0,0,0,125,0,0,0,252,255,255,255,248,255,255,255,248,255,255,255,240,35,0,0,168,4,0,0,169,4,0,0,98,2,0,0,99,2,0,0,248,255,255,255,244,255,255,255,244,255,255,255,240,35,0,0,170,4,0,0,171,4,0,0,100,2,0,0,101,2,0,0,244,255,255,255,240,255,255,255,240,255,255,255,240,35,0,0,172,4,0,0,173,4,0,0,102,2,0,0,20,0,0,0,240,255,255,255,236,255,255,255,236,255,255,255,240,35,0,0,174,4,0,0,175,4,0,0,103,2,0,0,104,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,120,36,0,0,198,4,0,0,199,4,0,0,243,1,0,0,244,1,0,0,124,0,0,0,8,0,0,0,152,2,0,0,48,2,0,0,49,2,0,0,248,1,0,0,249,1,0,0,51,2,0,0,251,1,0,0,9,0,0,0,4,0,0,0,5,0,0,0,6,0,0,0,6,0,0,0,125,0,0,0,252,255,255,255,252,255,255,255,252,255,255,255,120,36,0,0,200,4,0,0,201,4,0,0,155,2,0,0,253,1,0,0,248,255,255,255,248,255,255,255,248,255,255,255,120,36,0,0,202,4,0,0,203,4,0,0,54,2,0,0,55,2,0,0,244,255,255,255,244,255,255,255,244,255,255,255,120,36,0,0,204,4,0,0,205,4,0,0,56,2,0,0,20,0,0,0,240,255,255,255,240,255,255,255,240,255,255,255,120,36,0,0,206,4,0,0,207,4,0,0,1,2,0,0,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,208,36,0,0,238,4,0,0,239,4,0,0,192,2,0,0,193,2,0,0,8,0,0,0,233,4,0,0,194,2,0,0,195,2,0,0,196,2,0,0,186,2,0,0,187,2,0,0,16,0,0,0,188,2,0,0,252,255,255,255,252,255,255,255,252,255,255,255,208,36,0,0,240,4,0,0,241,4,0,0,197,2,0,0,198,2,0,0,248,255,255,255,248,255,255,255,248,255,255,255,208,36,0,0,242,4,0,0,243,4,0,0,199,2,0,0,20,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,36,185,0,0,176,237,0,0,116,185,0,0,198,237,0,0,0,0,0,0,1,0,0,0,208,5,0,0,3,240,255,255,36,185,0,0,23,238,0,0,76,185,0,0,254,237,0,0,240,5,0,0,0,0,0,0,116,185,0,0,42,238,0,0,0,0,0,0,1,0,0,0,240,5,0,0,3,244,255,255,36,185,0,0,100,238,0,0,116,185,0,0,77,238,0,0,0,0,0,0,2,0,0,0,8,6,0,0,2,0,0,0,32,6,0,0,2,16,0,0,76,185,0,0,119,238,0,0,72,41,0,0,0,0,0,0,76,185,0,0,188,238,0,0,216,40,0,0,0,0,0,0,36,185,0,0,41,239,0,0,76,185,0,0,254,238,0,0,104,6,0,0,0,0,0,0,76,185,0,0,78,239,0,0,40,6,0,0,0,0,0,0,116,185,0,0,217,239,0,0,0,0,0,0,1,0,0,0,208,5,0,0,3,240,255,255,76,185,0,0,95,239,0,0,184,6,0,0,0,0,0,0,116,185,0,0,125,239,0,0,0,0,0,0,1,0,0,0,208,5,0,0,3,240,255,255,76,185,0,0,168,239,0,0,168,6,0,0,0,0,0,0,76,185,0,0,189,239,0,0,184,6,0,0,0,0,0,0,76,185,0,0,5,240,0,0,184,6,0,0,0,0,0,0,76,185,0,0,36,240,0,0,240,6,0,0,0,0,0,0,76,185,0,0,72,240,0,0,32,7,0,0,0,0,0,0,36,185,0,0,51,244,0,0,76,185,0,0,155,244,0,0,96,7,0,0,0,0,0,0,76,185,0,0,132,244,0,0,88,32,0,0,0,0,0,0,116,185,0,0,82,244,0,0,0,0,0,0,1,0,0,0,208,5,0,0,3,240,255,255,36,185,0,0,187,244,0,0,76,185,0,0,50,245,0,0,96,7,0,0,0,0,0,0,76,185,0,0,27,245,0,0,88,32,0,0,0,0,0,0,116,185,0,0,233,244,0,0,0,0,0,0,1,0,0,0,208,5,0,0,3,240,255,255,76,185,0,0,155,245,0,0,96,7,0,0,0,0,0,0,76,185,0,0,132,245,0,0,88,32,0,0,0,0,0,0,116,185,0,0,82,245,0,0,0,0,0,0,1,0,0,0,208,5,0,0,3,240,255,255,76,185,0,0,4,246,0,0,96,7,0,0,0,0,0,0,76,185,0,0,237,245,0,0,88,32,0,0,0,0,0,0,116,185,0,0,187,245,0,0,0,0,0,0,1,0,0,0,208,5,0,0,3,240,255,255,76,185,0,0,109,246,0,0,96,7,0,0,0,0,0,0,76,185,0,0,86,246,0,0,88,32,0,0,0,0,0,0,116,185,0,0,36,246,0,0,0,0,0,0,1,0,0,0,208,5,0,0,3,240,255,255,76,185,0,0,214,246,0,0,96,7,0,0,0,0,0,0,76,185,0,0,191,246,0,0,88,32,0,0,0,0,0,0,116,185,0,0,141,246,0,0,0,0,0,0,1,0,0,0,208,5,0,0,3,240,255,255,76,185,0,0,63,247,0,0,96,7,0,0,0,0,0,0,76,185,0,0,40,247,0,0,88,32,0,0,0,0,0,0,116,185,0,0,246,246,0,0,0,0,0,0,1,0,0,0,208,5,0,0,3,240,255,255,76,185,0,0,168,247,0,0,96,7,0,0,0,0,0,0,76,185,0,0,145,247,0,0,88,32,0,0,0,0,0,0,116,185,0,0,95,247,0,0,0,0,0,0,1,0,0,0,208,5,0,0,3,240,255,255,76,185,0,0,17,248,0,0,96,7,0,0,0,0,0,0,76,185,0,0,250,247,0,0,88,32,0,0,0,0,0,0,116,185,0,0,200,247,0,0,0,0,0,0,1,0,0,0,208,5,0,0,3,240,255,255,76,185,0,0,122,248,0,0,96,7,0,0,0,0,0,0,76,185,0,0,99,248,0,0,88,32,0,0,0,0,0,0,116,185,0,0,49,248,0,0,0,0,0,0,1,0,0,0,208,5,0,0,3,240,255,255,76,185,0,0,227,248,0,0,96,7,0,0,0,0,0,0,76,185,0,0,204,248,0,0,88,32,0,0,0,0,0,0,116,185,0,0,154,248,0,0,0,0,0,0,1,0,0,0,208,5,0,0,3,240,255,255,76,185,0,0,76,249,0,0,96,7,0,0,0,0,0,0,76,185,0,0,53,249,0,0,88,32,0,0,0,0,0,0,116,185,0,0,3,249,0,0,0,0,0,0,1,0,0,0,208,5,0,0,3,240,255,255,76,185,0,0,181,249,0,0,96,7,0,0,0,0,0,0,76,185,0,0,158,249,0,0,88,32,0,0,0,0,0,0,116,185,0,0,108,249,0,0,0,0,0,0,1,0,0,0,208,5,0,0,3,240,255,255,76,185,0,0,30,250,0,0,96,7,0,0,0,0,0,0,76,185,0,0,7,250,0,0,88,32,0,0,0,0,0,0,116,185,0,0,213,249,0,0,0,0,0,0,1,0,0,0,208,5,0,0,3,240,255,255,76,185,0,0,135,250,0,0,96,7,0,0,0,0,0,0,76,185,0,0,112,250,0,0,88,32,0,0,0,0,0,0,116,185,0,0,62,250,0,0,0,0,0,0,1,0,0,0,208,5,0,0,3,240,255,255,76,185,0,0,240,250,0,0,96,7,0,0,0,0,0,0,76,185,0,0,217,250,0,0,88,32,0,0,0,0,0,0,116,185,0,0,167,250,0,0,0,0,0,0,1,0,0,0,208,5,0,0,3,240,255,255,76,185,0,0,89,251,0,0,96,7,0,0,0,0,0,0,76,185,0,0,66,251,0,0,88,32,0,0,0,0,0,0,116,185,0,0,16,251,0,0,0,0,0,0,1,0,0,0,208,5,0,0,3,240,255,255,76,185,0,0,194,251,0,0,96,7,0,0,0,0,0,0,76,185,0,0,171,251,0,0,88,32,0,0,0,0,0,0,116,185,0,0,121,251,0,0,0,0,0,0,1,0,0,0,208,5,0,0,3,240,255,255,76,185,0,0,43,252,0,0,96,7,0,0,0,0,0,0,76,185,0,0,20,252,0,0,88,32,0,0,0,0,0,0,116,185,0,0,226,251,0,0,0,0,0,0,1,0,0,0,208,5,0,0,3,240,255,255,76,185,0,0,148,252,0,0,96,7,0,0,0,0,0,0,76,185,0,0,125,252,0,0,88,32,0,0,0,0,0,0,116,185,0,0,75,252,0,0,0,0,0,0,1,0,0,0,208,5,0,0,3,240,255,255,76,185,0,0,253,252,0,0,96,7,0,0,0,0,0,0,76,185,0,0,230,252,0,0,88,32,0,0,0,0,0,0,116,185,0,0,180,252,0,0,0,0,0,0,1,0,0,0,208,5,0,0,3,240,255,255,76,185,0,0,102,253,0,0,96,7,0,0,0,0,0,0,76,185,0,0,79,253,0,0,88,32,0,0,0,0,0,0,116,185,0,0,29,253,0,0,0,0,0,0,1,0,0,0,208,5,0,0,3,240,255,255,76,185,0,0,207,253,0,0,96,7,0,0,0,0,0,0,76,185,0,0,184,253,0,0,88,32,0,0,0,0,0,0,116,185,0,0,134,253,0,0,0,0,0,0,1,0,0,0,208,5,0,0,3,240,255,255,76,185,0,0,54,254,0,0,96,7,0,0,0,0,0,0,76,185,0,0,32,254,0,0,88,32,0,0,0,0,0,0,116,185,0,0,239,253,0,0,0,0,0,0,1,0,0,0,208,5,0,0,3,240,255,255,76,185,0,0,156,254,0,0,96,7,0,0,0,0,0,0,76,185,0,0,134,254,0,0,88,32,0,0,0,0,0,0,116,185,0,0,85,254,0,0,0,0,0,0,1,0,0,0,208,5,0,0,3,240,255,255,76,185,0,0,2,255,0,0,96,7,0,0,0,0,0,0,76,185,0,0,236,254,0,0,88,32,0,0,0,0,0,0,116,185,0,0,187,254,0,0,0,0,0,0,1,0,0,0,208,5,0,0,3,240,255,255,76,185,0,0,104,255,0,0,96,7,0,0,0,0,0,0,76,185,0,0,82,255,0,0,88,32,0,0,0,0,0,0,116,185,0,0,33,255,0,0,0,0,0,0,1,0,0,0,208,5,0,0,3,240,255,255,76,185,0,0,206,255,0,0,96,7,0,0,0,0,0,0,76,185,0,0,184,255,0,0,88,32,0,0,0,0,0,0,116,185,0,0,135,255,0,0,0,0,0,0,1,0,0,0,208,5,0,0,3,240,255,255,76,185,0,0,52,0,1,0,96,7,0,0,0,0,0,0,76,185,0,0,30,0,1,0,88,32,0,0,0,0,0,0,116,185,0,0,237,255,0,0,0,0,0,0,1,0,0,0,208,5,0,0,3,240,255,255,76,185,0,0,154,0,1,0,96,7,0,0,0,0,0,0,76,185,0,0,132,0,1,0,88,32,0,0,0,0,0,0,116,185,0,0,83,0,1,0,0,0,0,0,1,0,0,0,208,5,0,0,3,240,255,255,76,185,0,0,0,1,1,0,96,7,0,0,0,0,0,0,76,185,0,0,234,0,1,0,88,32,0,0,0,0,0,0,116,185,0,0,185,0,1,0,0,0,0,0,1,0,0,0,208,5,0,0,3,240,255,255,76,185,0,0,102,1,1,0,96,7,0,0,0,0,0,0,76,185,0,0,80,1,1,0,88,32,0,0,0,0,0,0,116,185,0,0,31,1,1,0,0,0,0,0,1,0,0,0,208,5,0,0,3,240,255,255,76,185,0,0,204,1,1,0,96,7,0,0,0,0,0,0,76,185,0,0,182,1,1,0,88,32,0,0,0,0,0,0,116,185,0,0,133,1,1,0,0,0,0,0,1,0,0,0,208,5,0,0,3,240,255,255,76,185,0,0,50,2,1,0,96,7,0,0,0,0,0,0,76,185,0,0,28,2,1,0,88,32,0,0,0,0,0,0,116,185,0,0,235,1,1,0,0,0,0,0,1,0,0,0,208,5,0,0,3,240,255,255,76,185,0,0,152,2,1,0,96,7,0,0,0,0,0,0,76,185,0,0,130,2,1,0,88,32,0,0,0,0,0,0,116,185,0,0,81,2,1,0,0,0,0,0,1,0,0,0,208,5,0,0,3,240,255,255,76,185,0,0,254,2,1,0,96,7,0,0,0,0,0,0,76,185,0,0,232,2,1,0,88,32,0,0,0,0,0,0,116,185,0,0,183,2,1,0,0,0,0,0,1,0,0,0,208,5,0,0,3,240,255,255,76,185,0,0,100,3,1,0,96,7,0,0,0,0,0,0,76,185,0,0,78,3,1,0,88,32,0,0,0,0,0,0,116,185,0,0,29,3,1,0,0,0,0,0,1,0,0,0,208,5,0,0,3,240,255,255,76,185,0,0,202,3,1,0,96,7,0,0,0,0,0,0,76,185,0,0,180,3,1,0,88,32,0,0,0,0,0,0,116,185,0,0,131,3,1,0,0,0,0,0,1,0,0,0,208,5,0,0,3,240,255,255,76,185,0,0,48,4,1,0,96,7,0,0,0,0,0,0,76,185,0,0,26,4,1,0,88,32,0,0,0,0,0,0,116,185,0,0,233,3,1,0,0,0,0,0,1,0,0,0,208,5,0,0,3,240,255,255,76,185,0,0,150,4,1,0,96,7,0,0,0,0,0,0,76,185,0,0,128,4,1,0,88,32,0,0,0,0,0,0,116,185,0,0,79,4,1,0,0,0,0,0,1,0,0,0,208,5,0,0,3,240,255,255,76,185,0,0,252,4,1,0,96,7,0,0,0,0,0,0,76,185,0,0,230,4,1,0,88,32,0,0,0,0,0,0,116,185,0,0,181,4,1,0,0,0,0,0,1,0,0,0,208,5,0,0,3,240,255,255,76,185,0,0,98,5,1,0,96,7,0,0,0,0,0,0,76,185,0,0,76,5,1,0,88,32,0,0,0,0,0,0,116,185,0,0,27,5,1,0,0,0,0,0,1,0,0,0,208,5,0,0,3,240,255,255,76,185,0,0,200,5,1,0,96,7,0,0,0,0,0,0,76,185,0,0,178,5,1,0,88,32,0,0,0,0,0,0,116,185,0,0,129,5,1,0,0,0,0,0,1,0,0,0,208,5,0,0,3,240,255,255,76,185,0,0,46,6,1,0,96,7,0,0,0,0,0,0,76,185,0,0,24,6,1,0,88,32,0,0,0,0,0,0,116,185,0,0,231,5,1,0,0,0,0,0,1,0,0,0,208,5,0,0,3,240,255,255,76,185,0,0,148,6,1,0,96,7,0,0,0,0,0,0,76,185,0,0,126,6,1,0,88,32,0,0,0,0,0,0,116,185,0,0,77,6,1,0,0,0,0,0,1,0,0,0,208,5,0,0,3,240,255,255,76,185,0,0,250,6,1,0,96,7,0,0,0,0,0,0,76,185,0,0,228,6,1,0,88,32,0,0,0,0,0,0,116,185,0,0,179,6,1,0,0,0,0,0,1,0,0,0,208,5,0,0,3,240,255,255,76,185,0,0,96,7,1,0,96,7,0,0,0,0,0,0,76,185,0,0,74,7,1,0,88,32,0,0,0,0,0,0,116,185,0,0,25,7,1,0,0,0,0,0,1,0,0,0,208,5,0,0,3,240,255,255,76,185,0,0,198,7,1,0,96,7,0,0,0,0,0,0,76,185,0,0,176,7,1,0,88,32,0,0,0,0,0,0,116,185,0,0,127,7,1,0,0,0,0,0,1,0,0,0,208,5,0,0,3,240,255,255,76,185,0,0,44,8,1,0,96,7,0,0,0,0,0,0,76,185,0,0,22,8,1,0,88,32,0,0,0,0,0,0,116,185,0,0,229,7,1,0,0,0,0,0,1,0,0,0,208,5,0,0,3,240,255,255,76,185,0,0,146,8,1,0,96,7,0,0,0,0,0,0,76,185,0,0,124,8,1,0,88,32,0,0,0,0,0,0,116,185,0,0,75,8,1,0,0,0,0,0,1,0,0,0,208,5,0,0,3,240,255,255,76,185,0,0,248,8,1,0,96,7,0,0,0,0,0,0,76,185,0,0,226,8,1,0,88,32,0,0,0,0,0,0,116,185,0,0,177,8,1,0,0,0,0,0,1,0,0,0,208,5,0,0,3,240,255,255,76,185,0,0,94,9,1,0,96,7,0,0,0,0,0,0,76,185,0,0,72,9,1,0,88,32,0,0,0,0,0,0,116,185,0,0,23,9,1,0,0,0,0,0,1,0,0,0,208,5,0,0,3,240,255,255,76,185,0,0,196,9,1,0,96,7,0,0,0,0,0,0,76,185,0,0,174,9,1,0,88,32,0,0,0,0,0,0,116,185,0,0,125,9,1,0,0,0,0,0,1,0,0,0,208,5,0,0,3,240,255,255,76,185,0,0,42,10,1,0,96,7,0,0,0,0,0,0,76,185,0,0,20,10,1,0,88,32,0,0,0,0,0,0,116,185,0,0,227,9,1,0,0,0,0,0,1,0,0,0,208,5,0,0,3,240,255,255,76,185,0,0,144,10,1,0,96,7,0,0,0,0,0,0,76,185,0,0,122,10,1,0,88,32,0,0,0,0,0,0,116,185,0,0,73,10,1,0,0,0,0,0,1,0,0,0,208,5,0,0,3,240,255,255,76,185,0,0,246,10,1,0,96,7,0,0,0,0,0,0,76,185,0,0,224,10,1,0,88,32,0,0,0,0,0,0,116,185,0,0,175,10,1,0,0,0,0,0,1,0,0,0,208,5,0,0,3,240,255,255,76,185,0,0,92,11,1,0,96,7,0,0,0,0,0,0,76,185,0,0,70,11,1,0,88,32,0,0,0,0,0,0,116,185,0,0,21,11,1,0,0,0,0,0,1,0,0,0,208,5,0,0,3,240,255,255,76,185,0,0,194,11,1,0,96,7,0,0,0,0,0,0,76,185,0,0,172,11,1,0,88,32,0,0,0,0,0,0,116,185,0,0,123,11,1,0,0,0,0,0,1,0,0,0,208,5,0,0,3,240,255,255,76,185,0,0,40,12,1,0,96,7,0,0,0,0,0,0,76,185,0,0,18,12,1,0,88,32,0,0,0,0,0,0,116,185,0,0,225,11,1,0,0,0,0,0,1,0,0,0,208,5,0,0,3,240,255,255,76,185,0,0,142,12,1,0,96,7,0,0,0,0,0,0,76,185,0,0,120,12,1,0,88,32,0,0,0,0,0,0,116,185,0,0,71,12,1,0,0,0,0,0,1,0,0,0,208,5,0,0,3,240,255,255,76,185,0,0,244,12,1,0,96,7,0,0,0,0,0,0,76,185,0,0,222,12,1,0,88,32,0,0,0,0,0,0,116,185,0,0,173,12,1,0,0,0,0,0,1,0,0,0,208,5,0,0,3,240,255,255,76,185,0,0,90,13,1,0,96,7,0,0,0,0,0,0,76,185,0,0,68,13,1,0,88,32,0,0,0,0,0,0,116,185,0,0,19,13,1,0,0,0,0,0,1,0,0,0,208,5,0,0,3,240,255,255,76,185,0,0,192,13,1,0,96,7,0,0,0,0,0,0,76,185,0,0,170,13,1,0,88,32,0,0,0,0,0,0,116,185,0,0,121,13,1,0,0,0,0,0,1,0,0,0,208,5,0,0,3,240,255,255,76,185,0,0,38,14,1,0,96,7,0,0,0,0,0,0,76,185,0,0,16,14,1,0,88,32,0,0,0,0,0,0,116,185,0,0,223,13,1,0,0,0,0,0,1,0,0,0,208,5,0,0,3,240,255,255,76,185,0,0,140,14,1,0,96,7,0,0,0,0,0,0,76,185,0,0,118,14,1,0,88,32,0,0,0,0,0,0,116,185,0,0,69,14,1,0,0,0,0,0,1,0,0,0,208,5,0,0,3,240,255,255,76,185,0,0,242,14,1,0,96,7,0,0,0,0,0,0,76,185,0,0,220,14,1,0,88,32,0,0,0,0,0,0,116,185,0,0,171,14,1,0,0,0,0,0,1,0,0,0,208,5,0,0,3,240,255,255,76,185,0,0,88,15,1,0,96,7,0,0,0,0,0,0,76,185,0,0,66,15,1,0,88,32,0,0,0,0,0,0,116,185,0,0,17,15,1,0,0,0,0,0,1,0,0,0,208,5,0,0,3,240,255,255,76,185,0,0,190,15,1,0,96,7,0,0,0,0,0,0,76,185,0,0,168,15,1,0,88,32,0,0,0,0,0,0,116,185,0,0,119,15,1,0,0,0,0,0,1,0,0,0,208,5,0,0,3,240,255,255,76,185,0,0,36,16,1,0,96,7,0,0,0,0,0,0,76,185,0,0,14,16,1,0,88,32,0,0,0,0,0,0,116,185,0,0,221,15,1,0,0,0,0,0,1,0,0,0,208,5,0,0,3,240,255,255,76,185,0,0,138,16,1,0,96,7,0,0,0,0,0,0,76,185,0,0,116,16,1,0,88,32,0,0,0,0,0,0,116,185,0,0,67,16,1,0,0,0,0,0,1,0,0,0,208,5,0,0,3,240,255,255,76,185,0,0,240,16,1,0,96,7,0,0,0,0,0,0,76,185,0,0,218,16,1,0,88,32,0,0,0,0,0,0,116,185,0,0,169,16,1,0,0,0,0,0,1,0,0,0,208,5,0,0,3,240,255,255,76,185,0,0,86,17,1,0,96,7,0,0,0,0,0,0,76,185,0,0,64,17,1,0,88,32,0,0,0,0,0,0,116,185,0,0,15,17,1,0,0,0,0,0,1,0,0,0,208,5,0,0,3,240,255,255,76,185,0,0,188,17,1,0,96,7,0,0,0,0,0,0,76,185,0,0,166,17,1,0,88,32,0,0,0,0,0,0,116,185,0,0,117,17,1,0,0,0,0,0,1,0,0,0,208,5,0,0,3,240,255,255,76,185,0,0,34,18,1,0,96,7,0,0,0,0,0,0,76,185,0,0,12,18,1,0,88,32,0,0,0,0,0,0,116,185,0,0,219,17,1,0,0,0,0,0,1,0,0,0,208,5,0,0,3,240,255,255,76,185,0,0,136,18,1,0,96,7,0,0,0,0,0,0,76,185,0,0,114,18,1,0,88,32,0,0,0,0,0,0,116,185,0,0,65,18,1,0,0,0,0,0,1,0,0,0,208,5,0,0,3,240,255,255,76,185,0,0,238,18,1,0,96,7,0,0,0,0,0,0,76,185,0,0,216,18,1,0,88,32,0,0,0,0,0,0,116,185,0,0,167,18,1,0,0,0,0,0,1,0,0,0,208,5,0,0,3,240,255,255,76,185,0,0,84,19,1,0,96,7,0,0,0,0,0,0,76,185,0,0,62,19,1,0,88,32,0,0,0,0,0,0,116,185,0,0,13,19,1,0,0,0,0,0,1,0,0,0,208,5,0,0,3,240,255,255,76,185,0,0,186,19,1,0,96,7,0,0,0,0,0,0,76,185,0,0,164,19,1,0,88,32,0,0,0,0,0,0,116,185,0,0,115,19,1,0,0,0,0,0,1,0,0,0,208,5,0,0,3,240,255,255,76,185,0,0,32,20,1,0,96,7,0,0,0,0,0,0,76,185,0,0,10,20,1,0,88,32,0,0,0,0,0,0,116,185,0,0,217,19,1,0,0,0,0,0,1,0,0,0,208,5,0,0,3,240,255,255,76,185,0,0,134,20,1,0,96,7,0,0,0,0,0,0,76,185,0,0,112,20,1,0,88,32,0,0,0,0,0,0,116,185,0,0,63,20,1,0,0,0,0,0,1,0,0,0,208,5,0,0,3,240,255,255,76,185,0,0,236,20,1,0,96,7,0,0,0,0,0,0,76,185,0,0,214,20,1,0,88,32,0,0,0,0,0,0,116,185,0,0,165,20,1,0,0,0,0,0,1,0,0,0,208,5,0,0,3,240,255,255,76,185,0,0,82,21,1,0,96,7,0,0,0,0,0,0,76,185,0,0,60,21,1,0,88,32,0,0,0,0,0,0,116,185,0,0,11,21,1,0,0,0,0,0,1,0,0,0,208,5,0,0,3,240,255,255,76,185,0,0,184,21,1,0,96,7,0,0,0,0,0,0,76,185,0,0,162,21,1,0,88,32,0,0,0,0,0,0,116,185,0,0,113,21,1,0,0,0,0,0,1,0,0,0,208,5,0,0,3,240,255,255,76,185,0,0,30,22,1,0,96,7,0,0,0,0,0,0,76,185,0,0,8,22,1,0,88,32,0,0,0,0,0,0,116,185,0,0,215,21,1,0,0,0,0,0,1,0,0,0,208,5,0,0,3,240,255,255,76,185,0,0,132,22,1,0,96,7,0,0,0,0,0,0,76,185,0,0,110,22,1,0,88,32,0,0,0,0,0,0,116,185,0,0,61,22,1,0,0,0,0,0,1,0,0,0,208,5,0,0,3,240,255,255,76,185,0,0,234,22,1,0,96,7,0,0,0,0,0,0,76,185,0,0,212,22,1,0,88,32,0,0,0,0,0,0,116,185,0,0,163,22,1,0,0,0,0,0,1,0,0,0,208,5,0,0,3,240,255,255,76,185,0,0,80,23,1,0,96,7,0,0,0,0,0,0,76,185,0,0,58,23,1,0,88,32,0,0,0,0,0,0,116,185,0,0,9,23,1,0,0,0,0,0,1,0,0,0,208,5,0,0,3,240,255,255,76,185,0,0,182,23,1,0,96,7,0,0,0,0,0,0,76,185,0,0,160,23,1,0,88,32,0,0,0,0,0,0,116,185,0,0,111,23,1,0,0,0,0,0,1,0,0,0,208,5,0,0,3,240,255,255,76,185,0,0,28,24,1,0,96,7,0,0,0,0,0,0,76,185,0,0,6,24,1,0,88,32,0,0,0,0,0,0,116,185,0,0,213,23,1,0,0,0,0,0,1,0,0,0,208,5,0,0,3,240,255,255,76,185,0,0,130,24,1,0,96,7,0,0,0,0,0,0,76,185,0,0,108,24,1,0,88,32,0,0,0,0,0,0,116,185,0,0,59,24,1,0,0,0,0,0,1,0,0,0,208,5,0,0,3,240,255,255,76,185,0,0,232,24,1,0,96,7,0,0,0,0,0,0,76,185,0,0,210,24,1,0,88,32,0,0,0,0,0,0,116,185,0,0,161,24,1,0,0,0,0,0,1,0,0,0,208,5,0,0,3,240,255,255,76,185,0,0,78,25,1,0,96,7,0,0,0,0,0,0,76,185,0,0,56,25,1,0,88,32,0,0,0,0,0,0,116,185,0,0,7,25,1,0,0,0,0,0,1,0,0,0,208,5,0,0,3,240,255,255,76,185,0,0,180,25,1,0,96,7,0,0,0,0,0,0,76,185,0,0,158,25,1,0,88,32,0,0,0,0,0,0,116,185,0,0,109,25,1,0,0,0,0,0,1,0,0,0,208,5,0,0,3,240,255,255,76,185,0,0,26,26,1,0,96,7,0,0,0,0,0,0,76,185,0,0,4,26,1,0,88,32,0,0,0,0,0,0,116,185,0,0,211,25,1,0,0,0,0,0,1,0,0,0,208,5,0,0,3,240,255,255,76,185,0,0,128,26,1,0,96,7,0,0,0,0,0,0,76,185,0,0,106,26,1,0,88,32,0,0,0,0,0,0,116,185,0,0,57,26,1,0,0,0,0,0,1,0,0,0,208,5,0,0,3,240,255,255,76,185,0,0,230,26,1,0,96,7,0,0,0,0,0,0,76,185,0,0,208,26,1,0,88,32,0,0,0,0,0,0,116,185,0,0,159,26,1,0,0,0,0,0,1,0,0,0,208,5,0,0,3,240,255,255,76,185,0,0,76,27,1,0,96,7,0,0,0,0,0,0,76,185,0,0,54,27,1,0,88,32,0,0,0,0,0,0,116,185,0,0,5,27,1,0,0,0,0,0,1,0,0,0,208,5,0,0,3,240,255,255,76,185,0,0,178,27,1,0,96,7,0,0,0,0,0,0,76,185,0,0,156,27,1,0,88,32,0,0,0,0,0,0,116,185,0,0,107,27,1,0,0,0,0,0,1,0,0,0,208,5,0,0,3,240,255,255,76,185,0,0,24,28,1,0,96,7,0,0,0,0,0,0,76,185,0,0,2,28,1,0,88,32,0,0,0,0,0,0,116,185,0,0,209,27,1,0,0,0,0,0,1,0,0,0,208,5,0,0,3,240,255,255,76,185,0,0,126,28,1,0,96,7,0,0,0,0,0,0,76,185,0,0,104,28,1,0,88,32,0,0,0,0,0,0,116,185,0,0,55,28,1,0,0,0,0,0,1,0,0,0,208,5,0,0,3,240,255,255,76,185,0,0,228,28,1,0,96,7,0,0,0,0,0,0,76,185,0,0,206,28,1,0,88,32,0,0,0,0,0,0,116,185,0,0,157,28,1,0,0,0,0,0,1,0,0,0,208,5,0,0,3,240,255,255,76,185,0,0,74,29,1,0,96,7,0,0,0,0,0,0,76,185,0,0,52,29,1,0,88,32,0,0,0,0,0,0,116,185,0,0,3,29,1,0,0,0,0,0,1,0,0,0,208,5,0,0,3,240,255,255,76,185,0,0,176,29,1,0,96,7,0,0,0,0,0,0,76,185,0,0,154,29,1,0,88,32,0,0,0,0,0,0,116,185,0,0,105,29,1,0,0,0,0,0,1,0,0,0,208,5,0,0,3,240,255,255,76,185,0,0,22,30,1,0,96,7,0,0,0,0,0,0,76,185,0,0,0,30,1,0,88,32,0,0,0,0,0,0,116,185,0,0,207,29,1,0,0,0,0,0,1,0,0,0,208,5,0,0,3,240,255,255,76,185,0,0,124,30,1,0,96,7,0,0,0,0,0,0,76,185,0,0,102,30,1,0,88,32,0,0,0,0,0,0,116,185,0,0,53,30,1,0,0,0,0,0,1,0,0,0,208,5,0,0,3,240,255,255,76,185,0,0,226,30,1,0,96,7,0,0,0,0,0,0,76,185,0,0,204,30,1,0,88,32,0,0,0,0,0,0,116,185,0,0,155,30,1,0,0,0,0,0,1,0,0,0,208,5,0,0,3,240,255,255,76,185,0,0,72,31,1,0,96,7,0,0,0,0,0,0,76,185,0,0,50,31,1,0,88,32,0,0,0,0,0,0,116,185,0,0,1,31,1,0,0,0,0,0,1,0,0,0,208,5,0,0,3,240,255,255,76,185,0,0,174,31,1,0,96,7,0,0,0,0,0,0,76,185,0,0,152,31,1,0,88,32,0,0,0,0,0,0,116,185,0,0,103,31,1,0,0,0,0,0,1,0,0,0,208,5,0,0,3,240,255,255,76,185,0,0,20,32,1,0,96,7,0,0,0,0,0,0,76,185,0,0,254,31,1,0,88,32,0,0,0,0,0,0,116,185,0,0,205,31,1,0,0,0,0,0,1,0,0,0,208,5,0,0,3,240,255,255,76,185,0,0,122,32,1,0,96,7,0,0,0,0,0,0,76,185,0,0,100,32,1,0,88,32,0,0,0,0,0,0,116,185,0,0,51,32,1,0,0,0,0,0,1,0,0,0,208,5,0,0,3,240,255,255,76,185,0,0,224,32,1,0,96,7,0,0,0,0,0,0,76,185,0,0,202,32,1,0,88,32,0,0,0,0,0,0,116,185,0,0,153,32,1,0,0,0,0,0,1,0,0,0,208,5,0,0,3,240,255,255,76,185,0,0,70,33,1,0,96,7,0,0,0,0,0,0,76,185,0,0,48,33,1,0,88,32,0,0,0,0,0,0,116,185,0,0,255,32,1,0,0,0,0,0,1,0,0,0,208,5,0,0,3,240,255,255,76,185,0,0,172,33,1,0,96,7,0,0,0,0,0,0,76,185,0,0,150,33,1,0,88,32,0,0,0,0,0,0,116,185,0,0,101,33,1,0,0,0,0,0,1,0,0,0,208,5,0,0,3,240,255,255,76,185,0,0,203,33,1,0,40,6,0,0,0,0,0,0,76,185,0,0,8,34,1,0,24,41,0,0,0,0,0,0,76,185,0,0,78,34,1,0,40,6,0,0,0,0,0,0,76,185,0,0,95,34,1,0,40,6,0,0,0,0,0,0,116,185,0,0,156,34,1,0,0,0,0,0,1,0,0,0,208,5,0,0,3,240,255,255,116,185,0,0,112,34,1,0,0,0,0,0,1,0,0,0,208,5,0,0,3,240,255,255,76,185,0,0,200,34,1,0,40,6,0,0,0,0,0,0,116,185,0,0,1,35,1,0,0,0,0,0,1,0,0,0,208,5,0,0,3,240,255,255,76,185,0,0,51,35,1,0,40,35,0,0,0,0,0,0,36,185,0,0,75,35,1,0,116,185,0,0,94,35,1,0,0,0,0,0,1,0,0,0,176,32,0,0,2,4,0,0,116,185,0,0,142,35,1,0,0,0,0,0,1,0,0,0,200,32,0,0,0,0,0,0,116,185,0,0,208,35,1,0,0,0,0,0,1,0,0,0,224,32,0,0,0,0,0,0,36,185,0,0,26,36,1,0,76,185,0,0,63,36,1,0,248,32,0,0,0,0,0,0,76,185,0,0,142,36,1,0,72,35,0,0,0,0,0,0,76,185,0,0,217,36,1,0,24,33,0,0,0,0,0,0,36,185,0,0,11,37,1,0,116,185,0,0,93,37,1,0,0,0,0,0,1,0,0,0,176,32,0,0,2,4,0,0,76,185,0,0,141,37,1,0,72,33,0,0,0,0,0,0,76,185,0,0,220,37,1,0,72,35,0,0,0,0,0,0,76,185,0,0,39,38,1,0,24,33,0,0,0,0,0,0,76,185,0,0,95,38,1,0,120,33,0,0,0,0,0,0,76,185,0,0,193,38,1,0,72,35,0,0,0,0,0,0,76,185,0,0,31,39,1,0,248,32,0,0,0,0,0,0,76,185,0,0,109,39,1,0,72,33,0,0,0,0,0,0,76,185,0,0,187,39,1,0,120,33,0,0,0,0,0,0,116,185,0,0,28,40,1,0,0,0,0,0,1,0,0,0,208,33,0,0,2,4,0,0,116,185,0,0,60,40,1,0,0,0,0,0,1,0,0,0,232,33,0,0,0,0,0,0,116,185,0,0,106,40,1,0,0,0,0,0,1,0,0,0,224,32,0,0,0,0,0,0,76,185,0,0,160,40,1,0,16,34,0,0,0,0,0,0,36,185,0,0,194,40,1,0,76,185,0,0,0,41,1,0,120,35,0,0,0,0,0,0,116,185,0,0,59,41,1,0,0,0,0,0,1,0,0,0,208,33,0,0,2,4,0,0,76,185,0,0,91,41,1,0,16,34,0,0,0,0,0,0,76,185,0,0,131,41,1,0,120,35,0,0,0,0,0,0,76,185,0,0,190,41,1,0,120,35,0,0,0,0,0,0,36,185,0,0,12,42,1,0,116,185,0,0,33,42,1,0,2,0,0,0,2,0,0,0,144,32,0,0,2,0,0,0,120,36,0,0,2,4,0,0,116,185,0,0,59,42,1,0,2,0,0,0,2,0,0,0,144,32,0,0,2,0,0,0,120,36,0,0,2,4,0,0,76,185,0,0,87,42,1,0,216,34,0,0,0,0,0,0,76,185,0,0,112,42,1,0,240,35,0,0,0,0,0,0,116,185,0,0,137,42,1,0,2,0,0,0,2,0,0,0,144,32,0,0,2,0,0,0,120,36,0,0,2,4,0,0,0,0,0,0,0,0,0,0,116,185,0,0,195,42,1,0,2,0,0,0,3,0,0,0,144,32,0,0,2,0,0,0,120,36,0,0,2,4,0,0,112,20,0,0,2,48,0,0,76,185,0,0,221,42,1,0,144,32,0,0,0,0,0,0,76,185,0,0,244,42,1,0,184,6,0,0,0,0,0,0,116,185,0,0,15,43,1,0,2,0,0,0,2,0,0,0,144,32,0,0,2,0,0,0,120,36,0,0,2,4,0,0,76,185,0,0,49,43,1,0,184,6,0,0,0,0,0,0,116,185,0,0,73,43,1,0,2,0,0,0,2,0,0,0,144,32,0,0,2,0,0,0,120,36,0,0,2,4,0,0,116,185,0,0,107,43,1,0,2,0,0,0,3,0,0,0,144,32,0,0,2,0,0,0,120,36,0,0,2,4,0,0,16,23,0,0,2,48,0,0,76,185,0,0,130,43,1,0,120,36,0,0,0,0,0,0,76,185,0,0,155,43,1,0,120,36,0,0,0,0,0,0,76,185,0,0,179,43,1,0,112,20,0,0,0,0,0,0,116,185,0,0,234,43,1,0,2,0,0,0,2,0,0,0,144,32,0,0,2,0,0,0,120,36,0,0,2,4,0,0,116,185,0,0,6,44,1,0,2,0,0,0,2,0,0,0,144,32,0,0,2,0,0,0,120,36,0,0,2,4,0,0,116,185,0,0,29,44,1,0,2,0,0,0,4,0,0,0,144,32,0,0,2,0,0,0,184,6,0,0,2,4,0,0,112,20,0,0,2,8,0,0,64,32,0,0,2,12,0,0,76,185,0,0,232,44,1,0,112,36,0,0,0,0,0,0,36,185,0,0,10,45,1,0,116,185,0,0,241,50,1,0,2,0,0,0,5,0,0,0,40,32,0,0,2,0,0,0,64,32,0,0,2,4,0,0,144,6,0,0,2,8,0,0,184,6,0,0,2,12,0,0,104,32,0,0,2,16,0,0,116,185,0,0,8,51,1,0,2,0,0,0,2,0,0,0,144,6,0,0,2,0,0,0,184,6,0,0,2,4,0,0,116,185,0,0,37,51,1,0,2,0,0,0,3,0,0,0,64,32,0,0,2,0,0,0,144,6,0,0,2,4,0,0,184,6,0,0,2,8,0,0,76,185,0,0,63,51,1,0,208,36,0,0,0,0,0,0,116,185,0,0,91,51,1,0,2,0,0,0,3,0,0,0,112,6,0,0,2,0,0,0,144,6,0,0,2,12,0,0,184,6,0,0,2,16,0,0,116,185,0,0,119,51,1,0,2,0,0,0,8,0,0,0,104,32,0,0,2,0,0,0,216,29,0,0,2,4,0,0,40,17,0,0,2,8,0,0,240,16,0,0,2,12,0,0,184,6,0,0,2,16,0,0,40,32,0,0,2,20,0,0,144,6,0,0,2,24,0,0,64,32,0,0,2,28,0,0,76,185,0,0,173,51,1,0,144,37,0,0,0,0,0,0,36,185,0,0,229,51,1,0,116,185,0,0,62,52,1,0,2,0,0,0,3,0,0,0,64,32,0,0,2,0,0,0,144,6,0,0,2,4,0,0,184,6,0,0,2,8,0,0,116,185,0,0,85,52,1,0,2,0,0,0,3,0,0,0,64,32,0,0,2,0,0,0,144,6,0,0,2,4,0,0,184,6,0,0,2,8,0,0,116,185,0,0,118,52,1,0,2,0,0,0,17,0,0,0,128,38,0,0,2,0,0,0,40,17,0,0,2,4,0,0,240,16,0,0,2,8,0,0,32,26,0,0,2,12,0,0,232,25,0,0,2,16,0,0,176,25,0,0,2,20,0,0,120,25,0,0,2,24,0,0,64,25,0,0,2,28,0,0,216,15,0,0,2,32,0,0,168,27,0,0,2,36,0,0,160,22,0,0,2,40,0,0,216,8,0,0,2,44,0,0,160,8,0,0,2,48,0,0,104,8,0,0,2,52,0,0,64,32,0,0,2,56,0,0,184,6,0,0,2,60,0,0,216,5,0,0,2,64,0,0,36,185,0,0,233,52,1,0,36,185,0,0,6,56,1,0,8,185,0,0,246,55,1,0,116,185,0,0,145,55,1,0,0,0,0,0,1,0,0,0,200,38,0,0,0,0,0,0,36,185,0,0,135,55,1,0,8,185,0,0,114,55,1,0,8,185,0,0,89,55,1,0,36,185,0,0,208,55,1,0,116,185,0,0,241,60,1,0,0,0,0,0,1,0,0,0,200,38,0,0,0,0,0,0,116,185,0,0,178,60,1,0,0,0,0,0,1,0,0,0,200,38,0,0,0,0,0,0,36,185,0,0,159,60,1,0,36,185,0,0,128,60,1,0,36,185,0,0,97,60,1,0,36,185,0,0,66,60,1,0,36,185,0,0,35,60,1,0,36,185,0,0,4,60,1,0,36,185,0,0,229,59,1,0,36,185,0,0,198,59,1,0,36,185,0,0,167,59,1,0,36,185,0,0,136,59,1,0,36,185,0,0,105,59,1,0,36,185,0,0,74,59,1,0,36,185,0,0,43,59,1,0,76,185,0,0,48,61,1,0,120,39,0,0,0,0,0,0,36,185,0,0,61,61,1,0,36,185,0,0,74,61,1,0,76,185,0,0,87,61,1,0,128,39,0,0,0,0,0,0,76,185,0,0,120,61,1,0,136,39,0,0,0,0,0,0,76,185,0,0,190,61,1,0,136,39,0,0,0,0,0,0,76,185,0,0,154,61,1,0,168,39,0,0,0,0,0,0,76,185,0,0,224,61,1,0,136,39,0,0,0,0,0,0,236,184,0,0,8,62,1,0,236,184,0,0,129,44,1,0,236,184,0,0,145,44,1,0,236,184,0,0,131,44,1,0,236,184,0,0,110,44,1,0,236,184,0,0,10,62,1],"i8",ALLOC_NONE,Runtime.GLOBAL_BASE);allocate([236,184,0,0,191,243,0,0,236,184,0,0,12,62,1,0,236,184,0,0,14,62,1,0,236,184,0,0,90,91,1,0,236,184,0,0,16,62,1,0,236,184,0,0,190,44,1,0,236,184,0,0,163,44,1,0,76,185,0,0,18,62,1,0,136,39,0,0,0,0,0,0,76,185,0,0,51,62,1,0,152,39,0,0,0,0,0,0,76,185,0,0,88,62,1,0,152,39,0,0,0,0,0,0,76,185,0,0,171,83,1,0,224,40,0,0,0,0,0,0,76,185,0,0,234,83,1,0,224,40,0,0,0,0,0,0,76,185,0,0,2,84,1,0,216,40,0,0,0,0,0,0,76,185,0,0,27,84,1,0,216,40,0,0,0,0,0,0,36,185,0,0,51,84,1,0,76,185,0,0,69,84,1,0,176,40,0,0,0,0,0,0,76,185,0,0,111,84,1,0,176,40,0,0,0,0,0,0,36,185,0,0,153,84,1,0,36,185,0,0,202,84,1,0,116,185,0,0,251,84,1,0,0,0,0,0,1,0,0,0,184,40,0,0,3,244,255,255,116,185,0,0,42,85,1,0,0,0,0,0,1,0,0,0,200,40,0,0,3,244,255,255,116,185,0,0,89,85,1,0,0,0,0,0,1,0,0,0,184,40,0,0,3,244,255,255,116,185,0,0,136,85,1,0,0,0,0,0,1,0,0,0,200,40,0,0,3,244,255,255,116,185,0,0,183,85,1,0,3,0,0,0,2,0,0,0,232,40,0,0,2,0,0,0,24,41,0,0,2,8,0,0,76,185,0,0,8,86,1,0,88,48,0,0,0,0,0,0,116,185,0,0,30,86,1,0,0,0,0,0,2,0,0,0,104,41,0,0,2,0,0,0,136,47,0,0,2,0,0,0,116,185,0,0,48,86,1,0,0,0,0,0,2,0,0,0,104,41,0,0,2,0,0,0,144,47,0,0,2,0,0,0,116,185,0,0,82,86,1,0,0,0,0,0,2,0,0,0,104,41,0,0,2,0,0,0,144,47,0,0,2,0,0,0,116,185,0,0,117,86,1,0,0,0,0,0,2,0,0,0,104,41,0,0,2,0,0,0,144,47,0,0,2,0,0,0,76,185,0,0,152,86,1,0,216,41,0,0,0,0,0,0,76,185,0,0,186,86,1,0,216,41,0,0,0,0,0,0,116,185,0,0,221,86,1,0,0,0,0,0,2,0,0,0,104,41,0,0,2,0,0,0,144,47,0,0,2,0,0,0,76,185,0,0,255,86,1,0,104,41,0,0,0,0,0,0,76,185,0,0,21,87,1,0,104,41,0,0,0,0,0,0,76,185,0,0,41,87,1,0,104,41,0,0,0,0,0,0,116,185,0,0,61,87,1,0,0,0,0,0,2,0,0,0,104,41,0,0,2,0,0,0,136,47,0,0,2,0,0,0,76,185,0,0,79,87,1,0,104,41,0,0,0,0,0,0,76,185,0,0,100,87,1,0,104,41,0,0,0,0,0,0,116,185,0,0,121,87,1,0,0,0,0,0,2,0,0,0,104,41,0,0,2,0,0,0,152,47,0,0,0,0,0,0,116,185,0,0,189,87,1,0,0,0,0,0,2,0,0,0,104,41,0,0,2,0,0,0,176,47,0,0,0,0,0,0,116,185,0,0,1,88,1,0,0,0,0,0,2,0,0,0,104,41,0,0,2,0,0,0,200,47,0,0,0,0,0,0,116,185,0,0,69,88,1,0,0,0,0,0,2,0,0,0,104,41,0,0,2,0,0,0,224,47,0,0,0,0,0,0,116,185,0,0,137,88,1,0,0,0,0,0,3,0,0,0,104,41,0,0,2,0,0,0,248,47,0,0,2,0,0,0,0,48,0,0,0,8,0,0,116,185,0,0,206,88,1,0,0,0,0,0,3,0,0,0,104,41,0,0,2,0,0,0,248,47,0,0,2,0,0,0,8,48,0,0,0,8,0,0,116,185,0,0,19,89,1,0,0,0,0,0,2,0,0,0,104,41,0,0,2,0,0,0,16,48,0,0,0,8,0,0,116,185,0,0,88,89,1,0,0,0,0,0,2,0,0,0,104,41,0,0,2,0,0,0,16,48,0,0,0,8,0,0,116,185,0,0,157,89,1,0,0,0,0,0,2,0,0,0,104,41,0,0,2,0,0,0,24,48,0,0,2,0,0,0,116,185,0,0,185,89,1,0,0,0,0,0,2,0,0,0,104,41,0,0,2,0,0,0,24,48,0,0,2,0,0,0,116,185,0,0,213,89,1,0,0,0,0,0,2,0,0,0,104,41,0,0,2,0,0,0,24,48,0,0,2,0,0,0,116,185,0,0,241,89,1,0,0,0,0,0,2,0,0,0,104,41,0,0,2,0,0,0,24,48,0,0,2,0,0,0,116,185,0,0,13,90,1,0,0,0,0,0,2,0,0,0,104,41,0,0,2,0,0,0,32,48,0,0,0,0,0,0,116,185,0,0,83,90,1,0,0,0,0,0,2,0,0,0,104,41,0,0,2,0,0,0,40,48,0,0,0,0,0,0,116,185,0,0,153,90,1,0,0,0,0,0,2,0,0,0,104,41,0,0,2,0,0,0,48,48,0,0,0,0,0,0,116,185,0,0,223,90,1,0,0,0,0,0,2,0,0,0,104,41,0,0,2,0,0,0,56,48,0,0,0,0,0,0,116,185,0,0,37,91,1,0,0,0,0,0,2,0,0,0,104,41,0,0,2,0,0,0,64,48,0,0,2,0,0,0,116,185,0,0,58,91,1,0,0,0,0,0,2,0,0,0,104,41,0,0,2,0,0,0,64,48,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,36,185,0,0,113,94,1,0,36,185,0,0,90,94,1,0,116,185,0,0,68,94,1,0,0,0,0,0,1,0,0,0,80,48,0,0,0,0,0,0,116,185,0,0,21,94,1,0,0,0,0,0,1,0,0,0,80,48,0,0,0,0,0,0,116,185,0,0,255,93,1,0,0,0,0,0,1,0,0,0,72,48,0,0,0,0,0,0,116,185,0,0,208,93,1,0,0,0,0,0,1,0,0,0,72,48,0,0,0,0,0,0,36,185,0,0,189,93,1,0,36,185,0,0,155,93,1,0,36,185,0,0,121,93,1,0,36,185,0,0,100,93,1,0,36,185,0,0,79,93,1,0,36,185,0,0,54,93,1,0,36,185,0,0,29,93,1,0,36,185,0,0,4,93,1,0,36,185,0,0,235,92,1,0,36,185,0,0,211,92,1,0,36,185,0,0,230,93,1,0,36,185,0,0,43,94,1,0,36,185,0,0,134,94,1,0,0,0,0,0,248,5,0,0,1,0,0,0,2,0,0,0,1,0,0,0,2,0,0,0,48,0,0,0,0,0,0,0,40,6,0,0,1,0,0,0,2,0,0,0,1,0,0,0,2,0,0,0,3,0,0,0,4,0,0,0,5,0,0,0,3,0,0,0,3,0,0,0,4,0,0,0,5,0,0,0,4,0,0,0,5,0,0,0,240,255,255,255,40,6,0,0,6,0,0,0,7,0,0,0,6,0,0,0,7,0,0,0,208,255,255,255,208,255,255,255,40,6,0,0,8,0,0,0,9,0,0,0,132,48,0,0,4,129,0,0,44,129,0,0,220,48,0,0,64,0,0,0,0,0,0,0,72,6,0,0,10,0,0,0,11,0,0,0,56,0,0,0,248,255,255,255,72,6,0,0,12,0,0,0,13,0,0,0,192,255,255,255,192,255,255,255,72,6,0,0,14,0,0,0,15,0,0,0,0,49,0,0,100,49,0,0,160,49,0,0,180,49,0,0,72,127,0,0,92,127,0,0,140,49,0,0,120,49,0,0,40,49,0,0,20,49,0,0,64,0,0,0,0,0,0,0,72,41,0,0,16,0,0,0,17,0,0,0,56,0,0,0,248,255,255,255,72,41,0,0,18,0,0,0,19,0,0,0,192,255,255,255,192,255,255,255,72,41,0,0,20,0,0,0,21,0,0,0,64,0,0,0,0,0,0,0,232,40,0,0,22,0,0,0,23,0,0,0,192,255,255,255,192,255,255,255,232,40,0,0,24,0,0,0,25,0,0,0,0,0,0,0,88,6,0,0,26,0,0,0,27,0,0,0,8,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,3,0,0,0,4,0,0,0,2,0,0,0,5,0,0,0,6,0,0,0,6,0,0,0,3,0,0,0,7,0,0,0,0,0,0,0,240,5,0,0,28,0,0,0,29,0,0,0,16,0,0,0,0,0,0,0,8,6,0,0,1,0,0,0,2,0,0,0,1,0,0,0,2,0,0,0,3,0,0,0,30,0,0,0,31,0,0,0,240,255,255,255,240,255,255,255,8,6,0,0,32,0,0,0,33,0,0,0,0,0,0,0,112,6,0,0,34,0,0,0,35,0,0,0,9,0,0,0,10,0,0,0,11,0,0,0,12,0,0,0,7,0,0,0,13,0,0,0,48,0,0,0,0,0,0,0,128,6,0,0,1,0,0,0,2,0,0,0,1,0,0,0,2,0,0,0,3,0,0,0,36,0,0,0,37,0,0,0,3,0,0,0,14,0,0,0,15,0,0,0,5,0,0,0,4,0,0,0,5,0,0,0,16,0,0,0,2,0,0,0,1,0,0,0,240,255,255,255,128,6,0,0,38,0,0,0,39,0,0,0,17,0,0,0,18,0,0,0,208,255,255,255,208,255,255,255,128,6,0,0,40,0,0,0,41,0,0,0,124,50,0,0,176,128,0,0,4,129,0,0,44,129,0,0,240,128,0,0,224,50,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,7,0,0,42,0,0,0,43,0,0,0,19,0,0,0,20,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,224,6,0,0,46,0,0,0,47,0,0,0,22,0,0,0,20,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,168,6,0,0,48,0,0,0,49,0,0,0,23,0,0,0,20,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,208,6,0,0,50,0,0,0,51,0,0,0,24,0,0,0,20,0,0,0,2,0,0,0,0,0,0,0,16,7,0,0,52,0,0,0,53,0,0,0,0,0,0,0,176,31,0,0,54,0,0,0,55,0,0,0,8,0,0,0,0,0,0,0,120,31,0,0,54,0,0,0,56,0,0,0,9,0,0,0,0,0,0,0,64,31,0,0,54,0,0,0,57,0,0,0,10,0,0,0,0,0,0,0,8,31,0,0,54,0,0,0,58,0,0,0,11,0,0,0,0,0,0,0,208,30,0,0,54,0,0,0,59,0,0,0,12,0,0,0,0,0,0,0,152,30,0,0,54,0,0,0,60,0,0,0,13,0,0,0,0,0,0,0,96,30,0,0,54,0,0,0,61,0,0,0,14,0,0,0,0,0,0,0,40,30,0,0,54,0,0,0,62,0,0,0,15,0,0,0,0,0,0,0,240,29,0,0,54,0,0,0,63,0,0,0,16,0,0,0,0,0,0,0,184,29,0,0,54,0,0,0,64,0,0,0,17,0,0,0,0,0,0,0,128,29,0,0,54,0,0,0,65,0,0,0,18,0,0,0,0,0,0,0,72,29,0,0,54,0,0,0,66,0,0,0,19,0,0,0,0,0,0,0,16,29,0,0,54,0,0,0,67,0,0,0,20,0,0,0,0,0,0,0,216,28,0,0,54,0,0,0,68,0,0,0,21,0,0,0,0,0,0,0,160,28,0,0,54,0,0,0,69,0,0,0,22,0,0,0,0,0,0,0,104,28,0,0,54,0,0,0,70,0,0,0,23,0,0,0,0,0,0,0,48,28,0,0,54,0,0,0,71,0,0,0,24,0,0,0,0,0,0,0,248,27,0,0,54,0,0,0,72,0,0,0,25,0,0,0,0,0,0,0,192,27,0,0,54,0,0,0,73,0,0,0,26,0,0,0,0,0,0,0,136,27,0,0,54,0,0,0,74,0,0,0,27,0,0,0,0,0,0,0,80,27,0,0,54,0,0,0,75,0,0,0,28,0,0,0,0,0,0,0,24,27,0,0,54,0,0,0,76,0,0,0,29,0,0,0,0,0,0,0,224,26,0,0,54,0,0,0,77,0,0,0,30,0,0,0,0,0,0,0,168,26,0,0,54,0,0,0,78,0,0,0,31,0,0,0,0,0,0,0,112,26,0,0,54,0,0,0,79,0,0,0,32,0,0,0,0,0,0,0,56,26,0,0,54,0,0,0,80,0,0,0,33,0,0,0,0,0,0,0,0,26,0,0,54,0,0,0,81,0,0,0,34,0,0,0,0,0,0,0,200,25,0,0,54,0,0,0,82,0,0,0,35,0,0,0,0,0,0,0,144,25,0,0,54,0,0,0,83,0,0,0,36,0,0,0,0,0,0,0,88,25,0,0,54,0,0,0,84,0,0,0,37,0,0,0,0,0,0,0,32,25,0,0,54,0,0,0,85,0,0,0,38,0,0,0,0,0,0,0,232,24,0,0,54,0,0,0,86,0,0,0,39,0,0,0,0,0,0,0,176,24,0,0,54,0,0,0,87,0,0,0,40,0,0,0,0,0,0,0,120,24,0,0,54,0,0,0,88,0,0,0,41,0,0,0,0,0,0,0,64,24,0,0,54,0,0,0,89,0,0,0,42,0,0,0,0,0,0,0,8,24,0,0,54,0,0,0,90,0,0,0,43,0,0,0,0,0,0,0,208,23,0,0,54,0,0,0,91,0,0,0,44,0,0,0,0,0,0,0,152,23,0,0,54,0,0,0,92,0,0,0,45,0,0,0,0,0,0,0,96,23,0,0,54,0,0,0,93,0,0,0,46,0,0,0,0,0,0,0,40,23,0,0,54,0,0,0,94,0,0,0,47,0,0,0,0,0,0,0,240,22,0,0,54,0,0,0,95,0,0,0,48,0,0,0,0,0,0,0,184,22,0,0,54,0,0,0,96,0,0,0,49,0,0,0,0,0,0,0,128,22,0,0,54,0,0,0,97,0,0,0,50,0,0,0,0,0,0,0,72,22,0,0,54,0,0,0,98,0,0,0,51,0,0,0,0,0,0,0,16,22,0,0,54,0,0,0,99,0,0,0,52,0,0,0,0,0,0,0,216,21,0,0,54,0,0,0,100,0,0,0,53,0,0,0,0,0,0,0,160,21,0,0,54,0,0,0,101,0,0,0,54,0,0,0,0,0,0,0,104,21,0,0,54,0,0,0,102,0,0,0,55,0,0,0,0,0,0,0,48,21,0,0,54,0,0,0,103,0,0,0,56,0,0,0,0,0,0,0,248,20,0,0,54,0,0,0,104,0,0,0,57,0,0,0,0,0,0,0,192,20,0,0,54,0,0,0,105,0,0,0,58,0,0,0,0,0,0,0,136,20,0,0,54,0,0,0,106,0,0,0,59,0,0,0,0,0,0,0,80,20,0,0,54,0,0,0,107,0,0,0,60,0,0,0,0,0,0,0,24,20,0,0,54,0,0,0,108,0,0,0,61,0,0,0,0,0,0,0,224,19,0,0,54,0,0,0,109,0,0,0,62,0,0,0,0,0,0,0,168,19,0,0,54,0,0,0,110,0,0,0,63,0,0,0,0,0,0,0,112,19,0,0,54,0,0,0,111,0,0,0,64,0,0,0,0,0,0,0,56,19,0,0,54,0,0,0,112,0,0,0,65,0,0,0,0,0,0,0,0,19,0,0,54,0,0,0,113,0,0,0,66,0,0,0,0,0,0,0,200,18,0,0,54,0,0,0,114,0,0,0,67,0,0,0,0,0,0,0,144,18,0,0,54,0,0,0,115,0,0,0,68,0,0,0,0,0,0,0,88,18,0,0,54,0,0,0,116,0,0,0,69,0,0,0,0,0,0,0,32,18,0,0,54,0,0,0,117,0,0,0,70,0,0,0,0,0,0,0,232,17,0,0,54,0,0,0,118,0,0,0,71,0,0,0,0,0,0,0,176,17,0,0,54,0,0,0,119,0,0,0,72,0,0,0,0,0,0,0,120,17,0,0,54,0,0,0,120,0,0,0,73,0,0,0,0,0,0,0,64,17,0,0,54,0,0,0,121,0,0,0,74,0,0,0,0,0,0,0,8,17,0,0,54,0,0,0,122,0,0,0,75,0,0,0,0,0,0,0,208,16,0,0,54,0,0,0,123,0,0,0,76,0,0,0,0,0,0,0,152,16,0,0,54,0,0,0,124,0,0,0,77,0,0,0,0,0,0,0,96,16,0,0,54,0,0,0,125,0,0,0,78,0,0,0,0,0,0,0,40,16,0,0,54,0,0,0,126,0,0,0,79,0,0,0,0,0,0,0,240,15,0,0,54,0,0,0,127,0,0,0,80,0,0,0,0,0,0,0,184,15,0,0,54,0,0,0,128,0,0,0,81,0,0,0,0,0,0,0,128,15,0,0,54,0,0,0,129,0,0,0,82,0,0,0,0,0,0,0,72,15,0,0,54,0,0,0,130,0,0,0,83,0,0,0,0,0,0,0,16,15,0,0,54,0,0,0,131,0,0,0,84,0,0,0,0,0,0,0,216,14,0,0,54,0,0,0,132,0,0,0,85,0,0,0,0,0,0,0,160,14,0,0,54,0,0,0,133,0,0,0,86,0,0,0,0,0,0,0,104,14,0,0,54,0,0,0,134,0,0,0,87,0,0,0,0,0,0,0,48,14,0,0,54,0,0,0,135,0,0,0,88,0,0,0,0,0,0,0,248,13,0,0,54,0,0,0,136,0,0,0,89,0,0,0,0,0,0,0,192,13,0,0,54,0,0,0,137,0,0,0,90,0,0,0,0,0,0,0,136,13,0,0,54,0,0,0,138,0,0,0,91,0,0,0,0,0,0,0,80,13,0,0,54,0,0,0,139,0,0,0,92,0,0,0,0,0,0,0,24,13,0,0,54,0,0,0,140,0,0,0,93,0,0,0,0,0,0,0,224,12,0,0,54,0,0,0,141,0,0,0,94,0,0,0,0,0,0,0,168,12,0,0,54,0,0,0,142,0,0,0,95,0,0,0,0,0,0,0,112,12,0,0,54,0,0,0,143,0,0,0,96,0,0,0,0,0,0,0,56,12,0,0,54,0,0,0,144,0,0,0,97,0,0,0,0,0,0,0,0,12,0,0,54,0,0,0,145,0,0,0,98,0,0,0,0,0,0,0,200,11,0,0,54,0,0,0,146,0,0,0,99,0,0,0,0,0,0,0,144,11,0,0,54,0,0,0,147,0,0,0,100,0,0,0,0,0,0,0,88,11,0,0,54,0,0,0,148,0,0,0,101,0,0,0,0,0,0,0,32,11,0,0,54,0,0,0,149,0,0,0,102,0,0,0,0,0,0,0,232,10,0,0,54,0,0,0,150,0,0,0,103,0,0,0,0,0,0,0,176,10,0,0,54,0,0,0,151,0,0,0,104,0,0,0,0,0,0,0,120,10,0,0,54,0,0,0,152,0,0,0,105,0,0,0,0,0,0,0,64,10,0,0,54,0,0,0,153,0,0,0,106,0,0,0,0,0,0,0,8,10,0,0,54,0,0,0,154,0,0,0,107,0,0,0,0,0,0,0,208,9,0,0,54,0,0,0,155,0,0,0,108,0,0,0,0,0,0,0,152,9,0,0,54,0,0,0,156,0,0,0,109,0,0,0,0,0,0,0,96,9,0,0,54,0,0,0,157,0,0,0,110,0,0,0,0,0,0,0,40,9,0,0,54,0,0,0,158,0,0,0,111,0,0,0,0,0,0,0,240,8,0,0,54,0,0,0,159,0,0,0,112,0,0,0,0,0,0,0,184,8,0,0,54,0,0,0,160,0,0,0,113,0,0,0,0,0,0,0,128,8,0,0,54,0,0,0,161,0,0,0,114,0,0,0,0,0,0,0,72,8,0,0,54,0,0,0,162,0,0,0,115,0,0,0,0,0,0,0,16,8,0,0,54,0,0,0,163,0,0,0,116,0,0,0,0,0,0,0,216,7,0,0,54,0,0,0,164,0,0,0,117,0,0,0,0,0,0,0,160,7,0,0,54,0,0,0,165,0,0,0,118,0,0,0,0,0,0,0,104,7,0,0,54,0,0,0,166,0,0,0,119,0,0,0,0,0,0,0,40,7,0,0,54,0,0,0,167,0,0,0,120,0,0,0,56,0,0,0,0,0,0,0,56,7,0,0,1,0,0,0,2,0,0,0,1,0,0,0,2,0,0,0,3,0,0,0,168,0,0,0,169,0,0,0,3,0,0,0,25,0,0,0,26,0,0,0,5,0,0,0,4,0,0,0,5,0,0,0,121,0,0,0,122,0,0,0,240,255,255,255,56,7,0,0,170,0,0,0,171,0,0,0,27,0,0,0,28,0,0,0,200,255,255,255,200,255,255,255,56,7,0,0,172,0,0,0,173,0,0,0,120,60,0,0,204,125,0,0,204,129,0,0,32,130,0,0,72,130,0,0,12,130,0,0,20,126,0,0,216,60,0,0,56,0,0,0,0,0,0,0,120,7,0,0,1,0,0,0,2,0,0,0,1,0,0,0,2,0,0,0,3,0,0,0,174,0,0,0,175,0,0,0,3,0,0,0,29,0,0,0,30,0,0,0,5,0,0,0,4,0,0,0,5,0,0,0,121,0,0,0,122,0,0,0,240,255,255,255,120,7,0,0,176,0,0,0,177,0,0,0,31,0,0,0,32,0,0,0,200,255,255,255,200,255,255,255,120,7,0,0,178,0,0,0,179,0,0,0,12,61,0,0,204,125,0,0,204,129,0,0,32,130,0,0,72,130,0,0,12,130,0,0,20,126,0,0,108,61,0,0,56,0,0,0,0,0,0,0,176,7,0,0,1,0,0,0,2,0,0,0,1,0,0,0,2,0,0,0,3,0,0,0,180,0,0,0,181,0,0,0,3,0,0,0,33,0,0,0,34,0,0,0,5,0,0,0,4,0,0,0,5,0,0,0,121,0,0,0,122,0,0,0,240,255,255,255,176,7,0,0,182,0,0,0,183,0,0,0,35,0,0,0,36,0,0,0,200,255,255,255,200,255,255,255,176,7,0,0,184,0,0,0,185,0,0,0,160,61,0,0,204,125,0,0,204,129,0,0,32,130,0,0,72,130,0,0,12,130,0,0,20,126,0,0,0,62,0,0,56,0,0,0,0,0,0,0,232,7,0,0,1,0,0,0,2,0,0,0,1,0,0,0,2,0,0,0,3,0,0,0,186,0,0,0,187,0,0,0,3,0,0,0,37,0,0,0,38,0,0,0,5,0,0,0,4,0,0,0,5,0,0,0,121,0,0,0,122,0,0,0,240,255,255,255,232,7,0,0,188,0,0,0,189,0,0,0,39,0,0,0,40,0,0,0,200,255,255,255,200,255,255,255,232,7,0,0,190,0,0,0,191,0,0,0,52,62,0,0,204,125,0,0,204,129,0,0,32,130,0,0,72,130,0,0,12,130,0,0,20,126,0,0,148,62,0,0,56,0,0,0,0,0,0,0,32,8,0,0,1,0,0,0,2,0,0,0,1,0,0,0,2,0,0,0,3,0,0,0,192,0,0,0,193,0,0,0,3,0,0,0,41,0,0,0,42,0,0,0,5,0,0,0,4,0,0,0,5,0,0,0,121,0,0,0,122,0,0,0,240,255,255,255,32,8,0,0,194,0,0,0,195,0,0,0,43,0,0,0,44,0,0,0,200,255,255,255,200,255,255,255,32,8,0,0,196,0,0,0,197,0,0,0,200,62,0,0,204,125,0,0,204,129,0,0,32,130,0,0,72,130,0,0,12,130,0,0,20,126,0,0,40,63,0,0,56,0,0,0,0,0,0,0,88,8,0,0,1,0,0,0,2,0,0,0,1,0,0,0,2,0,0,0,3,0,0,0,198,0,0,0,199,0,0,0,3,0,0,0,45,0,0,0,46,0,0,0,5,0,0,0,4,0,0,0,5,0,0,0,121,0,0,0,122,0,0,0,240,255,255,255,88,8,0,0,200,0,0,0,201,0,0,0,47,0,0,0,48,0,0,0,200,255,255,255,200,255,255,255,88,8,0,0,202,0,0,0,203,0,0,0,92,63,0,0,204,125,0,0,204,129,0,0,32,130,0,0,72,130,0,0,12,130,0,0,20,126,0,0,188,63,0,0,56,0,0,0,0,0,0,0,144,8,0,0,1,0,0,0,2,0,0,0,1,0,0,0,2,0,0,0,3,0,0,0,204,0,0,0,205,0,0,0,3,0,0,0,49,0,0,0,50,0,0,0,5,0,0,0,4,0,0,0,5,0,0,0,121,0,0,0,122,0,0,0,240,255,255,255,144,8,0,0,206,0,0,0,207,0,0,0,51,0,0,0,52,0,0,0,200,255,255,255,200,255,255,255,144,8,0,0,208,0,0,0,209,0,0,0,240,63,0,0,204,125,0,0,204,129,0,0,32,130,0,0,72,130,0,0,12,130,0,0,20,126,0,0,80,64,0,0,56,0,0,0,0,0,0,0,200,8,0,0,1,0,0,0,2,0,0,0,1,0,0,0,2,0,0,0,3,0,0,0,210,0,0,0,211,0,0,0,3,0,0,0,53,0,0,0,54,0,0,0,5,0,0,0,4,0,0,0,5,0,0,0,121,0,0,0,122,0,0,0,240,255,255,255,200,8,0,0,212,0,0,0,213,0,0,0,55,0,0,0,56,0,0,0,200,255,255,255,200,255,255,255,200,8,0,0,214,0,0,0,215,0,0,0,132,64,0,0,204,125,0,0,204,129,0,0,32,130,0,0,72,130,0,0,12,130,0,0,20,126,0,0,228,64,0,0,56,0,0,0,0,0,0,0,0,9,0,0,1,0,0,0,2,0,0,0,1,0,0,0,2,0,0,0,3,0,0,0,216,0,0,0,217,0,0,0,3,0,0,0,57,0,0,0,58,0,0,0,5,0,0,0,4,0,0,0,5,0,0,0,121,0,0,0,122,0,0,0,240,255,255,255,0,9,0,0,218,0,0,0,219,0,0,0,59,0,0,0,60,0,0,0,200,255,255,255,200,255,255,255,0,9,0,0,220,0,0,0,221,0,0,0,24,65,0,0,204,125,0,0,204,129,0,0,32,130,0,0,72,130,0,0,12,130,0,0,20,126,0,0,120,65,0,0,56,0,0,0,0,0,0,0,56,9,0,0,1,0,0,0,2,0,0,0,1,0,0,0,2,0,0,0,3,0,0,0,222,0,0,0,223,0,0,0,3,0,0,0,61,0,0,0,62,0,0,0,5,0,0,0,4,0,0,0,5,0,0,0,121,0,0,0,122,0,0,0,240,255,255,255,56,9,0,0,224,0,0,0,225,0,0,0,63,0,0,0,64,0,0,0,200,255,255,255,200,255,255,255,56,9,0,0,226,0,0,0,227,0,0,0,172,65,0,0,204,125,0,0,204,129,0,0,32,130,0,0,72,130,0,0,12,130,0,0,20,126,0,0,12,66,0,0,56,0,0,0,0,0,0,0,112,9,0,0,1,0,0,0,2,0,0,0,1,0,0,0,2,0,0,0,3,0,0,0,228,0,0,0,229,0,0,0,3,0,0,0,65,0,0,0,66,0,0,0,5,0,0,0,4,0,0,0,5,0,0,0,121,0,0,0,122,0,0,0,240,255,255,255,112,9,0,0,230,0,0,0,231,0,0,0,67,0,0,0,68,0,0,0,200,255,255,255,200,255,255,255,112,9,0,0,232,0,0,0,233,0,0,0,64,66,0,0,204,125,0,0,204,129,0,0,32,130,0,0,72,130,0,0,12,130,0,0,20,126,0,0,160,66,0,0,56,0,0,0,0,0,0,0,168,9,0,0,1,0,0,0,2,0,0,0,1,0,0,0,2,0,0,0,3,0,0,0,234,0,0,0,235,0,0,0,3,0,0,0,69,0,0,0,70,0,0,0,5,0,0,0,4,0,0,0,5,0,0,0,121,0,0,0,122,0,0,0,240,255,255,255,168,9,0,0,236,0,0,0,237,0,0,0,71,0,0,0,72,0,0,0,200,255,255,255,200,255,255,255,168,9,0,0,238,0,0,0,239,0,0,0,212,66,0,0,204,125,0,0,204,129,0,0,32,130,0,0,72,130,0,0,12,130,0,0,20,126,0,0,52,67,0,0,56,0,0,0,0,0,0,0,224,9,0,0,1,0,0,0,2,0,0,0,1,0,0,0,2,0,0,0,3,0,0,0,240,0,0,0,241,0,0,0,3,0,0,0,73,0,0,0,74,0,0,0,5,0,0,0,4,0,0,0,5,0,0,0,121,0,0,0,122,0,0,0,240,255,255,255,224,9,0,0,242,0,0,0,243,0,0,0,75,0,0,0,76,0,0,0,200,255,255,255,200,255,255,255,224,9,0,0,244,0,0,0,245,0,0,0,104,67,0,0,204,125,0,0,204,129,0,0,32,130,0,0,72,130,0,0,12,130,0,0,20,126,0,0,200,67,0,0,56,0,0,0,0,0,0,0,24,10,0,0,1,0,0,0,2,0,0,0,1,0,0,0,2,0,0,0,3,0,0,0,246,0,0,0,247,0,0,0,3,0,0,0,77,0,0,0,78,0,0,0,5,0,0,0,4,0,0,0,5,0,0,0,121,0,0,0,122,0,0,0,240,255,255,255,24,10,0,0,248,0,0,0,249,0,0,0,79,0,0,0,80,0,0,0,200,255,255,255,200,255,255,255,24,10,0,0,250,0,0,0,251,0,0,0,252,67,0,0,204,125,0,0,204,129,0,0,32,130,0,0,72,130,0,0,12,130,0,0,20,126,0,0,92,68,0,0,56,0,0,0,0,0,0,0,80,10,0,0,1,0,0,0,2,0,0,0,1,0,0,0,2,0,0,0,3,0,0,0,252,0,0,0,253,0,0,0,3,0,0,0,81,0,0,0,82,0,0,0,5,0,0,0,4,0,0,0,5,0,0,0,121,0,0,0,122,0,0,0,240,255,255,255,80,10,0,0,254,0,0,0,255,0,0,0,83,0,0,0,84,0,0,0,200,255,255,255,200,255,255,255,80,10,0,0,0,1,0,0,1,1,0,0,144,68,0,0,204,125,0,0,204,129,0,0,32,130,0,0,72,130,0,0,12,130,0,0,20,126,0,0,240,68,0,0,56,0,0,0,0,0,0,0,136,10,0,0,1,0,0,0,2,0,0,0,1,0,0,0,2,0,0,0,3,0,0,0,2,1,0,0,3,1,0,0,3,0,0,0,85,0,0,0,86,0,0,0,5,0,0,0,4,0,0,0,5,0,0,0,121,0,0,0,122,0,0,0,240,255,255,255,136,10,0,0,4,1,0,0,5,1,0,0,87,0,0,0,88,0,0,0,200,255,255,255,200,255,255,255,136,10,0,0,6,1,0,0,7,1,0,0,36,69,0,0,204,125,0,0,204,129,0,0,32,130,0,0,72,130,0,0,12,130,0,0,20,126,0,0,132,69,0,0,56,0,0,0,0,0,0,0,192,10,0,0,1,0,0,0,2,0,0,0,1,0,0,0,2,0,0,0,3,0,0,0,8,1,0,0,9,1,0,0,3,0,0,0,89,0,0,0,90,0,0,0,5,0,0,0,4,0,0,0,5,0,0,0,121,0,0,0,122,0,0,0,240,255,255,255,192,10,0,0,10,1,0,0,11,1,0,0,91,0,0,0,92,0,0,0,200,255,255,255,200,255,255,255,192,10,0,0,12,1,0,0,13,1,0,0,184,69,0,0,204,125,0,0,204,129,0,0,32,130,0,0,72,130,0,0,12,130,0,0,20,126,0,0,24,70,0,0,56,0,0,0,0,0,0,0,248,10,0,0,1,0,0,0,2,0,0,0,1,0,0,0,2,0,0,0,3,0,0,0,14,1,0,0,15,1,0,0,3,0,0,0,93,0,0,0,94,0,0,0,5,0,0,0,4,0,0,0,5,0,0,0,121,0,0,0,122,0,0,0,240,255,255,255,248,10,0,0,16,1,0,0,17,1,0,0,95,0,0,0,96,0,0,0,200,255,255,255,200,255,255,255,248,10,0,0,18,1,0,0,19,1,0,0,76,70,0,0,204,125,0,0,204,129,0,0,32,130,0,0,72,130,0,0,12,130,0,0,20,126,0,0,172,70,0,0,56,0,0,0,0,0,0,0,48,11,0,0,1,0,0,0,2,0,0,0,1,0,0,0,2,0,0,0,3,0,0,0,20,1,0,0,21,1,0,0,3,0,0,0,97,0,0,0,98,0,0,0,5,0,0,0,4,0,0,0,5,0,0,0,121,0,0,0,122,0,0,0,240,255,255,255,48,11,0,0,22,1,0,0,23,1,0,0,99,0,0,0,100,0,0,0,200,255,255,255,200,255,255,255,48,11,0,0,24,1,0,0,25,1,0,0,224,70,0,0,204,125,0,0,204,129,0,0,32,130,0,0,72,130,0,0,12,130,0,0,20,126,0,0,64,71,0,0,56,0,0,0,0,0,0,0,104,11,0,0,1,0,0,0,2,0,0,0,1,0,0,0,2,0,0,0,3,0,0,0,26,1,0,0,27,1,0,0,3,0,0,0,101,0,0,0,102,0,0,0,5,0,0,0,4,0,0,0,5,0,0,0,121,0,0,0,122,0,0,0,240,255,255,255,104,11,0,0,28,1,0,0,29,1,0,0,103,0,0,0,104,0,0,0,200,255,255,255,200,255,255,255,104,11,0,0,30,1,0,0,31,1,0,0,116,71,0,0,204,125,0,0,204,129,0,0,32,130,0,0,72,130,0,0,12,130,0,0,20,126,0,0,212,71,0,0,56,0,0,0,0,0,0,0,160,11,0,0,1,0,0,0,2,0,0,0,1,0,0,0,2,0,0,0,3,0,0,0,32,1,0,0,33,1,0,0,3,0,0,0,105,0,0,0,106,0,0,0,5,0,0,0,4,0,0,0,5,0,0,0,121,0,0,0,122,0,0,0,240,255,255,255,160,11,0,0,34,1,0,0,35,1,0,0,107,0,0,0,108,0,0,0,200,255,255,255,200,255,255,255,160,11,0,0,36,1,0,0,37,1,0,0,8,72,0,0,204,125,0,0,204,129,0,0,32,130,0,0,72,130,0,0,12,130,0,0,20,126,0,0,104,72,0,0,56,0,0,0,0,0,0,0,216,11,0,0,1,0,0,0,2,0,0,0,1,0,0,0,2,0,0,0,3,0,0,0,38,1,0,0,39,1,0,0,3,0,0,0,109,0,0,0,110,0,0,0,5,0,0,0,4,0,0,0,5,0,0,0,121,0,0,0,122,0,0,0,240,255,255,255,216,11,0,0,40,1,0,0,41,1,0,0,111,0,0,0,112,0,0,0,200,255,255,255,200,255,255,255,216,11,0,0,42,1,0,0,43,1,0,0,156,72,0,0,204,125,0,0,204,129,0,0,32,130,0,0,72,130,0,0,12,130,0,0,20,126,0,0,252,72,0,0,56,0,0,0,0,0,0,0,16,12,0,0,1,0,0,0,2,0,0,0,1,0,0,0,2,0,0,0,3,0,0,0,44,1,0,0,45,1,0,0,3,0,0,0,113,0,0,0,114,0,0,0,5,0,0,0,4,0,0,0,5,0,0,0,121,0,0,0,122,0,0,0,240,255,255,255,16,12,0,0,46,1,0,0,47,1,0,0,115,0,0,0,116,0,0,0,200,255,255,255,200,255,255,255,16,12,0,0,48,1,0,0,49,1,0,0,48,73,0,0,204,125,0,0,204,129,0,0,32,130,0,0,72,130,0,0,12,130,0,0,20,126,0,0,144,73,0,0,56,0,0,0,0,0,0,0,72,12,0,0,1,0,0,0,2,0,0,0,1,0,0,0,2,0,0,0,3,0,0,0,50,1,0,0,51,1,0,0,3,0,0,0,117,0,0,0,118,0,0,0,5,0,0,0,4,0,0,0,5,0,0,0,121,0,0,0,122,0,0,0,240,255,255,255,72,12,0,0,52,1,0,0,53,1,0,0,119,0,0,0,120,0,0,0,200,255,255,255,200,255,255,255,72,12,0,0,54,1,0,0,55,1,0,0,196,73,0,0,204,125,0,0,204,129,0,0,32,130,0,0,72,130,0,0,12,130,0,0,20,126,0,0,36,74,0,0,56,0,0,0,0,0,0,0,128,12,0,0,1,0,0,0,2,0,0,0,1,0,0,0,2,0,0,0,3,0,0,0,56,1,0,0,57,1,0,0,3,0,0,0,121,0,0,0,122,0,0,0,5,0,0,0,4,0,0,0,5,0,0,0,121,0,0,0,122,0,0,0,240,255,255,255,128,12,0,0,58,1,0,0,59,1,0,0,123,0,0,0,124,0,0,0,200,255,255,255,200,255,255,255,128,12,0,0,60,1,0,0,61,1,0,0,88,74,0,0,204,125,0,0,204,129,0,0,32,130,0,0,72,130,0,0,12,130,0,0,20,126,0,0,184,74,0,0,56,0,0,0,0,0,0,0,184,12,0,0,1,0,0,0,2,0,0,0,1,0,0,0,2,0,0,0,3,0,0,0,62,1,0,0,63,1,0,0,3,0,0,0,125,0,0,0,126,0,0,0,5,0,0,0,4,0,0,0,5,0,0,0,121,0,0,0,122,0,0,0,240,255,255,255,184,12,0,0,64,1,0,0,65,1,0,0,127,0,0,0,128,0,0,0,200,255,255,255,200,255,255,255,184,12,0,0,66,1,0,0,67,1,0,0,236,74,0,0,204,125,0,0,204,129,0,0,32,130,0,0,72,130,0,0,12,130,0,0,20,126,0,0,76,75,0,0,56,0,0,0,0,0,0,0,240,12,0,0,1,0,0,0,2,0,0,0,1,0,0,0,2,0,0,0,3,0,0,0,68,1,0,0,69,1,0,0,3,0,0,0,129,0,0,0,130,0,0,0,5,0,0,0,4,0,0,0,5,0,0,0,121,0,0,0,122,0,0,0,240,255,255,255,240,12,0,0,70,1,0,0,71,1,0,0,131,0,0,0,132,0,0,0,200,255,255,255,200,255,255,255,240,12,0,0,72,1,0,0,73,1,0,0,128,75,0,0,204,125,0,0,204,129,0,0,32,130,0,0,72,130,0,0,12,130,0,0,20,126,0,0,224,75,0,0,56,0,0,0,0,0,0,0,40,13,0,0,1,0,0,0,2,0,0,0,1,0,0,0,2,0,0,0,3,0,0,0,74,1,0,0,75,1,0,0,3,0,0,0,133,0,0,0,134,0,0,0,5,0,0,0,4,0,0,0,5,0,0,0,121,0,0,0,122,0,0,0,240,255,255,255,40,13,0,0,76,1,0,0,77,1,0,0,135,0,0,0,136,0,0,0,200,255,255,255,200,255,255,255,40,13,0,0,78,1,0,0,79,1,0,0,20,76,0,0,204,125,0,0,204,129,0,0,32,130,0,0,72,130,0,0,12,130,0,0,20,126,0,0,116,76,0,0,56,0,0,0,0,0,0,0,96,13,0,0,1,0,0,0,2,0,0,0,1,0,0,0,2,0,0,0,3,0,0,0,80,1,0,0,81,1,0,0,3,0,0,0,137,0,0,0,138,0,0,0,5,0,0,0,4,0,0,0,5,0,0,0,121,0,0,0,122,0,0,0,240,255,255,255,96,13,0,0,82,1,0,0,83,1,0,0,139,0,0,0,140,0,0,0,200,255,255,255,200,255,255,255,96,13,0,0,84,1,0,0,85,1,0,0,168,76,0,0,204,125,0,0,204,129,0,0,32,130,0,0,72,130,0,0,12,130,0,0,20,126,0,0,8,77,0,0,56,0,0,0,0,0,0,0,152,13,0,0,1,0,0,0,2,0,0,0,1,0,0,0,2,0,0,0,3,0,0,0,86,1,0,0,87,1,0,0,3,0,0,0,141,0,0,0,142,0,0,0,5,0,0,0,4,0,0,0,5,0,0,0,121,0,0,0,122,0,0,0,240,255,255,255,152,13,0,0,88,1,0,0,89,1,0,0,143,0,0,0,144,0,0,0,200,255,255,255,200,255,255,255,152,13,0,0,90,1,0,0,91,1,0,0,60,77,0,0,204,125,0,0,204,129,0,0,32,130,0,0,72,130,0,0,12,130,0,0,20,126,0,0,156,77,0,0,56,0,0,0,0,0,0,0,208,13,0,0,1,0,0,0,2,0,0,0,1,0,0,0,2,0,0,0,3,0,0,0,92,1,0,0,93,1,0,0,3,0,0,0,145,0,0,0,146,0,0,0,5,0,0,0,4,0,0,0,5,0,0,0,121,0,0,0,122,0,0,0,240,255,255,255,208,13,0,0,94,1,0,0,95,1,0,0,147,0,0,0,148,0,0,0,200,255,255,255,200,255,255,255,208,13,0,0,96,1,0,0,97,1,0,0,208,77,0,0,204,125,0,0,204,129,0,0,32,130,0,0,72,130,0,0,12,130,0,0,20,126,0,0,48,78,0,0,56,0,0,0,0,0,0,0,8,14,0,0,1,0,0,0,2,0,0,0,1,0,0,0,2,0,0,0,3,0,0,0,98,1,0,0,99,1,0,0,3,0,0,0,149,0,0,0,150,0,0,0,5,0,0,0,4,0,0,0,5,0,0,0,121,0,0,0,122,0,0,0,240,255,255,255,8,14,0,0,100,1,0,0,101,1,0,0,151,0,0,0,152,0,0,0,200,255,255,255,200,255,255,255,8,14,0,0,102,1,0,0,103,1,0,0,100,78,0,0,204,125,0,0,204,129,0,0,32,130,0,0,72,130,0,0,12,130,0,0,20,126,0,0,196,78,0,0,56,0,0,0,0,0,0,0,64,14,0,0,1,0,0,0,2,0,0,0,1,0,0,0,2,0,0,0,3,0,0,0,104,1,0,0,105,1,0,0,3,0,0,0,153,0,0,0,154,0,0,0,5,0,0,0,4,0,0,0,5,0,0,0,121,0,0,0,122,0,0,0,240,255,255,255,64,14,0,0,106,1,0,0,107,1,0,0,155,0,0,0,156,0,0,0,200,255,255,255,200,255,255,255,64,14,0,0,108,1,0,0,109,1,0,0,248,78,0,0,204,125,0,0,204,129,0,0,32,130,0,0,72,130,0,0,12,130,0,0,20,126,0,0,88,79,0,0,56,0,0,0,0,0,0,0,120,14,0,0,1,0,0,0,2,0,0,0,1,0,0,0,2,0,0,0,3,0,0,0,110,1,0,0,111,1,0,0,3,0,0,0,157,0,0,0,158,0,0,0,5,0,0,0,4,0,0,0,5,0,0,0,121,0,0,0,122,0,0,0,240,255,255,255,120,14,0,0,112,1,0,0,113,1,0,0,159,0,0,0,160,0,0,0,200,255,255,255,200,255,255,255,120,14,0,0,114,1,0,0,115,1,0,0,140,79,0,0,204,125,0,0,204,129,0,0,32,130,0,0,72,130],"i8",ALLOC_NONE,Runtime.GLOBAL_BASE+10240);allocate([12,130,0,0,20,126,0,0,236,79,0,0,56,0,0,0,0,0,0,0,176,14,0,0,1,0,0,0,2,0,0,0,1,0,0,0,2,0,0,0,3,0,0,0,116,1,0,0,117,1,0,0,3,0,0,0,161,0,0,0,162,0,0,0,5,0,0,0,4,0,0,0,5,0,0,0,121,0,0,0,122,0,0,0,240,255,255,255,176,14,0,0,118,1,0,0,119,1,0,0,163,0,0,0,164,0,0,0,200,255,255,255,200,255,255,255,176,14,0,0,120,1,0,0,121,1,0,0,32,80,0,0,204,125,0,0,204,129,0,0,32,130,0,0,72,130,0,0,12,130,0,0,20,126,0,0,128,80,0,0,56,0,0,0,0,0,0,0,232,14,0,0,1,0,0,0,2,0,0,0,1,0,0,0,2,0,0,0,3,0,0,0,122,1,0,0,123,1,0,0,3,0,0,0,165,0,0,0,166,0,0,0,5,0,0,0,4,0,0,0,5,0,0,0,121,0,0,0,122,0,0,0,240,255,255,255,232,14,0,0,124,1,0,0,125,1,0,0,167,0,0,0,168,0,0,0,200,255,255,255,200,255,255,255,232,14,0,0,126,1,0,0,127,1,0,0,180,80,0,0,204,125,0,0,204,129,0,0,32,130,0,0,72,130,0,0,12,130,0,0,20,126,0,0,20,81,0,0,56,0,0,0,0,0,0,0,32,15,0,0,1,0,0,0,2,0,0,0,1,0,0,0,2,0,0,0,3,0,0,0,128,1,0,0,129,1,0,0,3,0,0,0,169,0,0,0,170,0,0,0,5,0,0,0,4,0,0,0,5,0,0,0,121,0,0,0,122,0,0,0,240,255,255,255,32,15,0,0,130,1,0,0,131,1,0,0,171,0,0,0,172,0,0,0,200,255,255,255,200,255,255,255,32,15,0,0,132,1,0,0,133,1,0,0,72,81,0,0,204,125,0,0,204,129,0,0,32,130,0,0,72,130,0,0,12,130,0,0,20,126,0,0,168,81,0,0,56,0,0,0,0,0,0,0,88,15,0,0,1,0,0,0,2,0,0,0,1,0,0,0,2,0,0,0,3,0,0,0,134,1,0,0,135,1,0,0,3,0,0,0,173,0,0,0,174,0,0,0,5,0,0,0,4,0,0,0,5,0,0,0,121,0,0,0,122,0,0,0,240,255,255,255,88,15,0,0,136,1,0,0,137,1,0,0,175,0,0,0,176,0,0,0,200,255,255,255,200,255,255,255,88,15,0,0,138,1,0,0,139,1,0,0,220,81,0,0,204,125,0,0,204,129,0,0,32,130,0,0,72,130,0,0,12,130,0,0,20,126,0,0,60,82,0,0,56,0,0,0,0,0,0,0,144,15,0,0,1,0,0,0,2,0,0,0,1,0,0,0,2,0,0,0,3,0,0,0,140,1,0,0,141,1,0,0,3,0,0,0,177,0,0,0,178,0,0,0,5,0,0,0,4,0,0,0,5,0,0,0,121,0,0,0,122,0,0,0,240,255,255,255,144,15,0,0,142,1,0,0,143,1,0,0,179,0,0,0,180,0,0,0,200,255,255,255,200,255,255,255,144,15,0,0,144,1,0,0,145,1,0,0,112,82,0,0,204,125,0,0,204,129,0,0,32,130,0,0,72,130,0,0,12,130,0,0,20,126,0,0,208,82,0,0,56,0,0,0,0,0,0,0,200,15,0,0,1,0,0,0,2,0,0,0,1,0,0,0,2,0,0,0,3,0,0,0,146,1,0,0,147,1,0,0,3,0,0,0,181,0,0,0,182,0,0,0,5,0,0,0,4,0,0,0,5,0,0,0,121,0,0,0,122,0,0,0,240,255,255,255,200,15,0,0,148,1,0,0,149,1,0,0,183,0,0,0,184,0,0,0,200,255,255,255,200,255,255,255,200,15,0,0,150,1,0,0,151,1,0,0,4,83,0,0,204,125,0,0,204,129,0,0,32,130,0,0,72,130,0,0,12,130,0,0,20,126,0,0,100,83,0,0,56,0,0,0,0,0,0,0,0,16,0,0,1,0,0,0,2,0,0,0,1,0,0,0,2,0,0,0,3,0,0,0,152,1,0,0,153,1,0,0,3,0,0,0,185,0,0,0,186,0,0,0,5,0,0,0,4,0,0,0,5,0,0,0,121,0,0,0,122,0,0,0,240,255,255,255,0,16,0,0,154,1,0,0,155,1,0,0,187,0,0,0,188,0,0,0,200,255,255,255,200,255,255,255,0,16,0,0,156,1,0,0,157,1,0,0,152,83,0,0,204,125,0,0,204,129,0,0,32,130,0,0,72,130,0,0,12,130,0,0,20,126,0,0,248,83,0,0,56,0,0,0,0,0,0,0,56,16,0,0,1,0,0,0,2,0,0,0,1,0,0,0,2,0,0,0,3,0,0,0,158,1,0,0,159,1,0,0,3,0,0,0,189,0,0,0,190,0,0,0,5,0,0,0,4,0,0,0,5,0,0,0,121,0,0,0,122,0,0,0,240,255,255,255,56,16,0,0,160,1,0,0,161,1,0,0,191,0,0,0,192,0,0,0,200,255,255,255,200,255,255,255,56,16,0,0,162,1,0,0,163,1,0,0,44,84,0,0,204,125,0,0,204,129,0,0,32,130,0,0,72,130,0,0,12,130,0,0,20,126,0,0,140,84,0,0,56,0,0,0,0,0,0,0,112,16,0,0,1,0,0,0,2,0,0,0,1,0,0,0,2,0,0,0,3,0,0,0,164,1,0,0,165,1,0,0,3,0,0,0,193,0,0,0,194,0,0,0,5,0,0,0,4,0,0,0,5,0,0,0,121,0,0,0,122,0,0,0,240,255,255,255,112,16,0,0,166,1,0,0,167,1,0,0,195,0,0,0,196,0,0,0,200,255,255,255,200,255,255,255,112,16,0,0,168,1,0,0,169,1,0,0,192,84,0,0,204,125,0,0,204,129,0,0,32,130,0,0,72,130,0,0,12,130,0,0,20,126,0,0,32,85,0,0,56,0,0,0,0,0,0,0,168,16,0,0,1,0,0,0,2,0,0,0,1,0,0,0,2,0,0,0,3,0,0,0,170,1,0,0,171,1,0,0,3,0,0,0,197,0,0,0,198,0,0,0,5,0,0,0,4,0,0,0,5,0,0,0,121,0,0,0,122,0,0,0,240,255,255,255,168,16,0,0,172,1,0,0,173,1,0,0,199,0,0,0,200,0,0,0,200,255,255,255,200,255,255,255,168,16,0,0,174,1,0,0,175,1,0,0,84,85,0,0,204,125,0,0,204,129,0,0,32,130,0,0,72,130,0,0,12,130,0,0,20,126,0,0,180,85,0,0,56,0,0,0,0,0,0,0,224,16,0,0,1,0,0,0,2,0,0,0,1,0,0,0,2,0,0,0,3,0,0,0,176,1,0,0,177,1,0,0,3,0,0,0,201,0,0,0,202,0,0,0,5,0,0,0,4,0,0,0,5,0,0,0,121,0,0,0,122,0,0,0,240,255,255,255,224,16,0,0,178,1,0,0,179,1,0,0,203,0,0,0,204,0,0,0,200,255,255,255,200,255,255,255,224,16,0,0,180,1,0,0,181,1,0,0,232,85,0,0,204,125,0,0,204,129,0,0,32,130,0,0,72,130,0,0,12,130,0,0,20,126,0,0,72,86,0,0,56,0,0,0,0,0,0,0,24,17,0,0,1,0,0,0,2,0,0,0,1,0,0,0,2,0,0,0,3,0,0,0,182,1,0,0,183,1,0,0,3,0,0,0,205,0,0,0,206,0,0,0,5,0,0,0,4,0,0,0,5,0,0,0,121,0,0,0,122,0,0,0,240,255,255,255,24,17,0,0,184,1,0,0,185,1,0,0,207,0,0,0,208,0,0,0,200,255,255,255,200,255,255,255,24,17,0,0,186,1,0,0,187,1,0,0,124,86,0,0,204,125,0,0,204,129,0,0,32,130,0,0,72,130,0,0,12,130,0,0,20,126,0,0,220,86,0,0,56,0,0,0,0,0,0,0,80,17,0,0,1,0,0,0,2,0,0,0,1,0,0,0,2,0,0,0,3,0,0,0,188,1,0,0,189,1,0,0,3,0,0,0,209,0,0,0,210,0,0,0,5,0,0,0,4,0,0,0,5,0,0,0,121,0,0,0,122,0,0,0,240,255,255,255,80,17,0,0,190,1,0,0,191,1,0,0,211,0,0,0,212,0,0,0,200,255,255,255,200,255,255,255,80,17,0,0,192,1,0,0,193,1,0,0,16,87,0,0,204,125,0,0,204,129,0,0,32,130,0,0,72,130,0,0,12,130,0,0,20,126,0,0,112,87,0,0,56,0,0,0,0,0,0,0,136,17,0,0,1,0,0,0,2,0,0,0,1,0,0,0,2,0,0,0,3,0,0,0,194,1,0,0,195,1,0,0,3,0,0,0,213,0,0,0,214,0,0,0,5,0,0,0,4,0,0,0,5,0,0,0,121,0,0,0,122,0,0,0,240,255,255,255,136,17,0,0,196,1,0,0,197,1,0,0,215,0,0,0,216,0,0,0,200,255,255,255,200,255,255,255,136,17,0,0,198,1,0,0,199,1,0,0,164,87,0,0,204,125,0,0,204,129,0,0,32,130,0,0,72,130,0,0,12,130,0,0,20,126,0,0,4,88,0,0,56,0,0,0,0,0,0,0,192,17,0,0,1,0,0,0,2,0,0,0,1,0,0,0,2,0,0,0,3,0,0,0,200,1,0,0,201,1,0,0,3,0,0,0,217,0,0,0,218,0,0,0,5,0,0,0,4,0,0,0,5,0,0,0,121,0,0,0,122,0,0,0,240,255,255,255,192,17,0,0,202,1,0,0,203,1,0,0,219,0,0,0,220,0,0,0,200,255,255,255,200,255,255,255,192,17,0,0,204,1,0,0,205,1,0,0,56,88,0,0,204,125,0,0,204,129,0,0,32,130,0,0,72,130,0,0,12,130,0,0,20,126,0,0,152,88,0,0,56,0,0,0,0,0,0,0,248,17,0,0,1,0,0,0,2,0,0,0,1,0,0,0,2,0,0,0,3,0,0,0,206,1,0,0,207,1,0,0,3,0,0,0,221,0,0,0,222,0,0,0,5,0,0,0,4,0,0,0,5,0,0,0,121,0,0,0,122,0,0,0,240,255,255,255,248,17,0,0,208,1,0,0,209,1,0,0,223,0,0,0,224,0,0,0,200,255,255,255,200,255,255,255,248,17,0,0,210,1,0,0,211,1,0,0,204,88,0,0,204,125,0,0,204,129,0,0,32,130,0,0,72,130,0,0,12,130,0,0,20,126,0,0,44,89,0,0,56,0,0,0,0,0,0,0,48,18,0,0,1,0,0,0,2,0,0,0,1,0,0,0,2,0,0,0,3,0,0,0,212,1,0,0,213,1,0,0,3,0,0,0,225,0,0,0,226,0,0,0,5,0,0,0,4,0,0,0,5,0,0,0,121,0,0,0,122,0,0,0,240,255,255,255,48,18,0,0,214,1,0,0,215,1,0,0,227,0,0,0,228,0,0,0,200,255,255,255,200,255,255,255,48,18,0,0,216,1,0,0,217,1,0,0,96,89,0,0,204,125,0,0,204,129,0,0,32,130,0,0,72,130,0,0,12,130,0,0,20,126,0,0,192,89,0,0,56,0,0,0,0,0,0,0,104,18,0,0,1,0,0,0,2,0,0,0,1,0,0,0,2,0,0,0,3,0,0,0,218,1,0,0,219,1,0,0,3,0,0,0,229,0,0,0,230,0,0,0,5,0,0,0,4,0,0,0,5,0,0,0,121,0,0,0,122,0,0,0,240,255,255,255,104,18,0,0,220,1,0,0,221,1,0,0,231,0,0,0,232,0,0,0,200,255,255,255,200,255,255,255,104,18,0,0,222,1,0,0,223,1,0,0,244,89,0,0,204,125,0,0,204,129,0,0,32,130,0,0,72,130,0,0,12,130,0,0,20,126,0,0,84,90,0,0,56,0,0,0,0,0,0,0,160,18,0,0,1,0,0,0,2,0,0,0,1,0,0,0,2,0,0,0,3,0,0,0,224,1,0,0,225,1,0,0,3,0,0,0,233,0,0,0,234,0,0,0,5,0,0,0,4,0,0,0,5,0,0,0,121,0,0,0,122,0,0,0,240,255,255,255,160,18,0,0,226,1,0,0,227,1,0,0,235,0,0,0,236,0,0,0,200,255,255,255,200,255,255,255,160,18,0,0,228,1,0,0,229,1,0,0,136,90,0,0,204,125,0,0,204,129,0,0,32,130,0,0,72,130,0,0,12,130,0,0,20,126,0,0,232,90,0,0,56,0,0,0,0,0,0,0,216,18,0,0,1,0,0,0,2,0,0,0,1,0,0,0,2,0,0,0,3,0,0,0,230,1,0,0,231,1,0,0,3,0,0,0,237,0,0,0,238,0,0,0,5,0,0,0,4,0,0,0,5,0,0,0,121,0,0,0,122,0,0,0,240,255,255,255,216,18,0,0,232,1,0,0,233,1,0,0,239,0,0,0,240,0,0,0,200,255,255,255,200,255,255,255,216,18,0,0,234,1,0,0,235,1,0,0,28,91,0,0,204,125,0,0,204,129,0,0,32,130,0,0,72,130,0,0,12,130,0,0,20,126,0,0,124,91,0,0,56,0,0,0,0,0,0,0,16,19,0,0,1,0,0,0,2,0,0,0,1,0,0,0,2,0,0,0,3,0,0,0,236,1,0,0,237,1,0,0,3,0,0,0,241,0,0,0,242,0,0,0,5,0,0,0,4,0,0,0,5,0,0,0,121,0,0,0,122,0,0,0,240,255,255,255,16,19,0,0,238,1,0,0,239,1,0,0,243,0,0,0,244,0,0,0,200,255,255,255,200,255,255,255,16,19,0,0,240,1,0,0,241,1,0,0,176,91,0,0,204,125,0,0,204,129,0,0,32,130,0,0,72,130,0,0,12,130,0,0,20,126,0,0,16,92,0,0,56,0,0,0,0,0,0,0,72,19,0,0,1,0,0,0,2,0,0,0,1,0,0,0,2,0,0,0,3,0,0,0,242,1,0,0,243,1,0,0,3,0,0,0,245,0,0,0,246,0,0,0,5,0,0,0,4,0,0,0,5,0,0,0,121,0,0,0,122,0,0,0,240,255,255,255,72,19,0,0,244,1,0,0,245,1,0,0,247,0,0,0,248,0,0,0,200,255,255,255,200,255,255,255,72,19,0,0,246,1,0,0,247,1,0,0,68,92,0,0,204,125,0,0,204,129,0,0,32,130,0,0,72,130,0,0,12,130,0,0,20,126,0,0,164,92,0,0,56,0,0,0,0,0,0,0,128,19,0,0,1,0,0,0,2,0,0,0,1,0,0,0,2,0,0,0,3,0,0,0,248,1,0,0,249,1,0,0,3,0,0,0,249,0,0,0,250,0,0,0,5,0,0,0,4,0,0,0,5,0,0,0,121,0,0,0,122,0,0,0,240,255,255,255,128,19,0,0,250,1,0,0,251,1,0,0,251,0,0,0,252,0,0,0,200,255,255,255,200,255,255,255,128,19,0,0,252,1,0,0,253,1,0,0,216,92,0,0,204,125,0,0,204,129,0,0,32,130,0,0,72,130,0,0,12,130,0,0,20,126,0,0,56,93,0,0,56,0,0,0,0,0,0,0,184,19,0,0,1,0,0,0,2,0,0,0,1,0,0,0,2,0,0,0,3,0,0,0,254,1,0,0,255,1,0,0,3,0,0,0,253,0,0,0,254,0,0,0,5,0,0,0,4,0,0,0,5,0,0,0,121,0,0,0,122,0,0,0,240,255,255,255,184,19,0,0,0,2,0,0,1,2,0,0,255,0,0,0,0,1,0,0,200,255,255,255,200,255,255,255,184,19,0,0,2,2,0,0,3,2,0,0,108,93,0,0,204,125,0,0,204,129,0,0,32,130,0,0,72,130,0,0,12,130,0,0,20,126,0,0,204,93,0,0,56,0,0,0,0,0,0,0,240,19,0,0,1,0,0,0,2,0,0,0,1,0,0,0,2,0,0,0,3,0,0,0,4,2,0,0,5,2,0,0,3,0,0,0,1,1,0,0,2,1,0,0,5,0,0,0,4,0,0,0,5,0,0,0,121,0,0,0,122,0,0,0,240,255,255,255,240,19,0,0,6,2,0,0,7,2,0,0,3,1,0,0,4,1,0,0,200,255,255,255,200,255,255,255,240,19,0,0,8,2,0,0,9,2,0,0,0,94,0,0,204,125,0,0,204,129,0,0,32,130,0,0,72,130,0,0,12,130,0,0,20,126,0,0,96,94,0,0,56,0,0,0,0,0,0,0,40,20,0,0,1,0,0,0,2,0,0,0,1,0,0,0,2,0,0,0,3,0,0,0,10,2,0,0,11,2,0,0,3,0,0,0,5,1,0,0,6,1,0,0,5,0,0,0,4,0,0,0,5,0,0,0,121,0,0,0,122,0,0,0,240,255,255,255,40,20,0,0,12,2,0,0,13,2,0,0,7,1,0,0,8,1,0,0,200,255,255,255,200,255,255,255,40,20,0,0,14,2,0,0,15,2,0,0,148,94,0,0,204,125,0,0,204,129,0,0,32,130,0,0,72,130,0,0,12,130,0,0,20,126,0,0,244,94,0,0,56,0,0,0,0,0,0,0,96,20,0,0,1,0,0,0,2,0,0,0,1,0,0,0,2,0,0,0,3,0,0,0,16,2,0,0,17,2,0,0,3,0,0,0,9,1,0,0,10,1,0,0,5,0,0,0,4,0,0,0,5,0,0,0,121,0,0,0,122,0,0,0,240,255,255,255,96,20,0,0,18,2,0,0,19,2,0,0,11,1,0,0,12,1,0,0,200,255,255,255,200,255,255,255,96,20,0,0,20,2,0,0,21,2,0,0,40,95,0,0,204,125,0,0,204,129,0,0,32,130,0,0,72,130,0,0,12,130,0,0,20,126,0,0,136,95,0,0,56,0,0,0,0,0,0,0,152,20,0,0,1,0,0,0,2,0,0,0,1,0,0,0,2,0,0,0,3,0,0,0,22,2,0,0,23,2,0,0,3,0,0,0,13,1,0,0,14,1,0,0,5,0,0,0,4,0,0,0,5,0,0,0,121,0,0,0,122,0,0,0,240,255,255,255,152,20,0,0,24,2,0,0,25,2,0,0,15,1,0,0,16,1,0,0,200,255,255,255,200,255,255,255,152,20,0,0,26,2,0,0,27,2,0,0,188,95,0,0,204,125,0,0,204,129,0,0,32,130,0,0,72,130,0,0,12,130,0,0,20,126,0,0,28,96,0,0,56,0,0,0,0,0,0,0,208,20,0,0,1,0,0,0,2,0,0,0,1,0,0,0,2,0,0,0,3,0,0,0,28,2,0,0,29,2,0,0,3,0,0,0,17,1,0,0,18,1,0,0,5,0,0,0,4,0,0,0,5,0,0,0,121,0,0,0,122,0,0,0,240,255,255,255,208,20,0,0,30,2,0,0,31,2,0,0,19,1,0,0,20,1,0,0,200,255,255,255,200,255,255,255,208,20,0,0,32,2,0,0,33,2,0,0,80,96,0,0,204,125,0,0,204,129,0,0,32,130,0,0,72,130,0,0,12,130,0,0,20,126,0,0,176,96,0,0,56,0,0,0,0,0,0,0,8,21,0,0,1,0,0,0,2,0,0,0,1,0,0,0,2,0,0,0,3,0,0,0,34,2,0,0,35,2,0,0,3,0,0,0,21,1,0,0,22,1,0,0,5,0,0,0,4,0,0,0,5,0,0,0,121,0,0,0,122,0,0,0,240,255,255,255,8,21,0,0,36,2,0,0,37,2,0,0,23,1,0,0,24,1,0,0,200,255,255,255,200,255,255,255,8,21,0,0,38,2,0,0,39,2,0,0,228,96,0,0,204,125,0,0,204,129,0,0,32,130,0,0,72,130,0,0,12,130,0,0,20,126,0,0,68,97,0,0,56,0,0,0,0,0,0,0,64,21,0,0,1,0,0,0,2,0,0,0,1,0,0,0,2,0,0,0,3,0,0,0,40,2,0,0,41,2,0,0,3,0,0,0,25,1,0,0,26,1,0,0,5,0,0,0,4,0,0,0,5,0,0,0,121,0,0,0,122,0,0,0,240,255,255,255,64,21,0,0,42,2,0,0,43,2,0,0,27,1,0,0,28,1,0,0,200,255,255,255,200,255,255,255,64,21,0,0,44,2,0,0,45,2,0,0,120,97,0,0,204,125,0,0,204,129,0,0,32,130,0,0,72,130,0,0,12,130,0,0,20,126,0,0,216,97,0,0,56,0,0,0,0,0,0,0,120,21,0,0,1,0,0,0,2,0,0,0,1,0,0,0,2,0,0,0,3,0,0,0,46,2,0,0,47,2,0,0,3,0,0,0,29,1,0,0,30,1,0,0,5,0,0,0,4,0,0,0,5,0,0,0,121,0,0,0,122,0,0,0,240,255,255,255,120,21,0,0,48,2,0,0,49,2,0,0,31,1,0,0,32,1,0,0,200,255,255,255,200,255,255,255,120,21,0,0,50,2,0,0,51,2,0,0,12,98,0,0,204,125,0,0,204,129,0,0,32,130,0,0,72,130,0,0,12,130,0,0,20,126,0,0,108,98,0,0,56,0,0,0,0,0,0,0,176,21,0,0,1,0,0,0,2,0,0,0,1,0,0,0,2,0,0,0,3,0,0,0,52,2,0,0,53,2,0,0,3,0,0,0,33,1,0,0,34,1,0,0,5,0,0,0,4,0,0,0,5,0,0,0,121,0,0,0,122,0,0,0,240,255,255,255,176,21,0,0,54,2,0,0,55,2,0,0,35,1,0,0,36,1,0,0,200,255,255,255,200,255,255,255,176,21,0,0,56,2,0,0,57,2,0,0,160,98,0,0,204,125,0,0,204,129,0,0,32,130,0,0,72,130,0,0,12,130,0,0,20,126,0,0,0,99,0,0,56,0,0,0,0,0,0,0,232,21,0,0,1,0,0,0,2,0,0,0,1,0,0,0,2,0,0,0,3,0,0,0,58,2,0,0,59,2,0,0,3,0,0,0,37,1,0,0,38,1,0,0,5,0,0,0,4,0,0,0,5,0,0,0,121,0,0,0,122,0,0,0,240,255,255,255,232,21,0,0,60,2,0,0,61,2,0,0,39,1,0,0,40,1,0,0,200,255,255,255,200,255,255,255,232,21,0,0,62,2,0,0,63,2,0,0,52,99,0,0,204,125,0,0,204,129,0,0,32,130,0,0,72,130,0,0,12,130,0,0,20,126,0,0,148,99,0,0,56,0,0,0,0,0,0,0,32,22,0,0,1,0,0,0,2,0,0,0,1,0,0,0,2,0,0,0,3,0,0,0,64,2,0,0,65,2,0,0,3,0,0,0,41,1,0,0,42,1,0,0,5,0,0,0,4,0,0,0,5,0,0,0,121,0,0,0,122,0,0,0,240,255,255,255,32,22,0,0,66,2,0,0,67,2,0,0,43,1,0,0,44,1,0,0,200,255,255,255,200,255,255,255,32,22,0,0,68,2,0,0,69,2,0,0,200,99,0,0,204,125,0,0,204,129,0,0,32,130,0,0,72,130,0,0,12,130,0,0,20,126,0,0,40,100,0,0,56,0,0,0,0,0,0,0,88,22,0,0,1,0,0,0,2,0,0,0,1,0,0,0,2,0,0,0,3,0,0,0,70,2,0,0,71,2,0,0,3,0,0,0,45,1,0,0,46,1,0,0,5,0,0,0,4,0,0,0,5,0,0,0,121,0,0,0,122,0,0,0,240,255,255,255,88,22,0,0,72,2,0,0,73,2,0,0,47,1,0,0,48,1,0,0,200,255,255,255,200,255,255,255,88,22,0,0,74,2,0,0,75,2,0,0,92,100,0,0,204,125,0,0,204,129,0,0,32,130,0,0,72,130,0,0,12,130,0,0,20,126,0,0,188,100,0,0,56,0,0,0,0,0,0,0,144,22,0,0,1,0,0,0,2,0,0,0,1,0,0,0,2,0,0,0,3,0,0,0,76,2,0,0,77,2,0,0,3,0,0,0,49,1,0,0,50,1,0,0,5,0,0,0,4,0,0,0,5,0,0,0,121,0,0,0,122,0,0,0,240,255,255,255,144,22,0,0,78,2,0,0,79,2,0,0,51,1,0,0,52,1,0,0,200,255,255,255,200,255,255,255,144,22,0,0,80,2,0,0,81,2,0,0,240,100,0,0,204,125,0,0,204,129,0,0,32,130,0,0,72,130,0,0,12,130,0,0,20,126,0,0,80,101,0,0,56,0,0,0,0,0,0,0,200,22,0,0,1,0,0,0,2,0,0,0,1,0,0,0,2,0,0,0,3,0,0,0,82,2,0,0,83,2,0,0,3,0,0,0,53,1,0,0,54,1,0,0,5,0,0,0,4,0,0,0,5,0,0,0,121,0,0,0,122,0,0,0,240,255,255,255,200,22,0,0,84,2,0,0,85,2,0,0,55,1,0,0,56,1,0,0,200,255,255,255,200,255,255,255,200,22,0,0,86,2,0,0,87,2,0,0,132,101,0,0,204,125,0,0,204,129,0,0,32,130,0,0,72,130,0,0,12,130,0,0,20,126,0,0,228,101,0,0,56,0,0,0,0,0,0,0,0,23,0,0,1,0,0,0,2,0,0,0,1,0,0,0,2,0,0,0,3,0,0,0,88,2,0,0,89,2,0,0,3,0,0,0,57,1,0,0,58,1,0,0,5,0,0,0,4,0,0,0,5,0,0,0,121,0,0,0,122,0,0,0,240,255,255,255,0,23,0,0,90,2,0,0,91,2,0,0,59,1,0,0,60,1,0,0,200,255,255,255,200,255,255,255,0,23,0,0,92,2,0,0,93,2,0,0,24,102,0,0,204,125,0,0,204,129,0,0,32,130,0,0,72,130,0,0,12,130,0,0,20,126,0,0,120,102,0,0,56,0,0,0,0,0,0,0,56,23,0,0,1,0,0,0,2,0,0,0,1,0,0,0,2,0,0,0,3,0,0,0,94,2,0,0,95,2,0,0,3,0,0,0,61,1,0,0,62,1,0,0,5,0,0,0,4,0,0,0,5,0,0,0,121,0,0,0,122,0,0,0,240,255,255,255,56,23,0,0,96,2,0,0,97,2,0,0,63,1,0,0,64,1,0,0,200,255,255,255,200,255,255,255,56,23,0,0,98,2,0,0,99,2,0,0,172,102,0,0,204,125,0,0,204,129,0,0,32,130,0,0,72,130,0,0,12,130,0,0,20,126,0,0,12,103,0,0,56,0,0,0,0,0,0,0,112,23,0,0,1,0,0,0,2,0,0,0,1,0,0,0,2,0,0,0,3,0,0,0,100,2,0,0,101,2,0,0,3,0,0,0,65,1,0,0,66,1,0,0,5,0,0,0,4,0,0,0,5,0,0,0,121,0,0,0,122,0,0,0,240,255,255,255,112,23,0,0,102,2,0,0,103,2,0,0,67,1,0,0,68,1,0,0,200,255,255,255,200,255,255,255,112,23,0,0,104,2,0,0,105,2,0,0,64,103,0,0,204,125,0,0,204,129,0,0,32,130,0,0,72,130,0,0,12,130,0,0,20,126,0,0,160,103,0,0,56,0,0,0,0,0,0,0,168,23,0,0,1,0,0,0,2,0,0,0,1,0,0,0,2,0,0,0,3,0,0,0,106,2,0,0,107,2,0,0,3,0,0,0,69,1,0,0,70,1,0,0,5,0,0,0,4,0,0,0,5,0,0,0,121,0,0,0,122,0,0,0,240,255,255,255,168,23,0,0,108,2,0,0,109,2,0,0,71,1,0,0,72,1,0,0,200,255,255,255,200,255,255,255,168,23,0,0,110,2,0,0,111,2,0,0,212,103,0,0,204,125,0,0,204,129,0,0,32,130,0,0,72,130,0,0,12,130,0,0,20,126,0,0,52,104,0,0,56,0,0,0,0,0,0,0,224,23,0,0,1,0,0,0,2,0,0,0,1,0,0,0,2,0,0,0,3,0,0,0,112,2,0,0,113,2,0,0,3,0,0,0,73,1,0,0,74,1,0,0,5,0,0,0,4,0,0,0,5,0,0,0,121,0,0,0,122,0,0,0,240,255,255,255,224,23,0,0,114,2,0,0,115,2,0,0,75,1,0,0,76,1,0,0,200,255,255,255,200,255,255,255,224,23,0,0,116,2,0,0,117,2,0,0,104,104,0,0,204,125,0,0,204,129,0,0,32,130,0,0,72,130,0,0,12,130,0,0,20,126,0,0,200,104,0,0,56,0,0,0,0,0,0,0,24,24,0,0,1,0,0,0,2,0,0,0,1,0,0,0,2,0,0,0,3,0,0,0,118,2,0,0,119,2,0,0,3,0,0,0,77,1,0,0,78,1,0,0,5,0,0,0,4,0,0,0,5,0,0,0,121,0,0,0,122,0,0,0,240,255,255,255,24,24,0,0,120,2,0,0,121,2,0,0,79,1,0,0,80,1,0,0,200,255,255,255,200,255,255,255,24,24,0,0,122,2,0,0,123,2,0,0,252,104,0,0,204,125,0,0,204,129,0,0,32,130,0,0,72,130,0,0,12,130,0,0,20,126,0,0,92,105,0,0,56,0,0,0,0,0,0,0,80,24,0,0,1,0,0,0,2,0,0,0,1,0,0,0,2,0,0,0,3,0,0,0,124,2,0,0,125,2,0,0,3,0,0,0,81,1,0,0,82,1,0,0,5,0,0,0,4,0,0,0,5,0,0,0,121,0,0,0,122,0,0,0,240,255,255,255,80,24,0,0,126,2,0,0,127,2,0,0,83,1,0,0,84,1,0,0,200,255,255,255,200,255,255,255,80,24,0,0,128,2,0,0,129,2,0,0,144,105,0,0,204,125,0,0,204,129,0,0,32,130,0,0,72,130,0,0,12,130,0,0,20,126,0,0,240,105,0,0,56,0,0,0,0,0,0,0,136,24,0,0,1,0,0,0,2,0,0,0,1,0,0,0,2,0,0,0,3,0,0,0,130,2,0,0,131,2,0,0,3,0,0,0,85,1,0,0,86,1,0,0,5,0,0,0,4,0,0,0,5,0,0,0,121,0,0,0,122,0,0,0,240,255,255,255,136,24,0,0,132,2,0,0,133,2,0,0,87,1,0,0,88,1,0,0,200,255,255,255,200,255,255,255,136,24,0,0,134,2,0,0,135,2,0,0,36,106,0,0,204,125,0,0,204,129,0,0,32,130,0,0,72,130,0,0,12,130,0,0,20,126,0,0,132,106,0,0,56,0,0,0,0,0,0,0,192,24,0,0,1,0,0,0,2,0,0,0,1,0,0,0,2,0,0,0,3,0,0,0,136,2,0,0,137,2,0,0,3,0,0,0,89,1,0,0,90,1,0,0,5,0,0,0,4,0,0,0,5,0,0,0,121,0,0,0,122,0,0,0,240,255,255,255,192,24,0,0,138,2,0,0,139,2,0,0,91,1,0,0,92,1,0,0,200,255,255,255,200,255,255,255,192,24,0,0,140,2,0,0,141,2,0,0,184,106,0,0,204,125,0,0,204,129,0,0,32,130,0,0,72,130,0,0,12,130,0,0,20,126,0,0,24,107,0,0,56,0,0,0,0,0,0,0,248,24,0,0,1,0,0,0,2,0,0,0,1,0,0,0,2,0,0,0,3,0,0,0,142,2,0,0,143,2,0,0,3,0,0,0,93,1,0,0,94,1,0,0,5,0,0,0,4,0,0,0,5,0,0,0,121,0,0,0,122,0,0,0,240,255,255,255,248,24,0,0,144,2,0,0,145,2,0,0,95,1,0,0,96,1,0,0,200,255,255,255,200,255,255,255,248,24,0,0,146,2,0,0,147,2,0,0,76,107,0,0,204,125,0,0,204,129,0,0,32,130,0,0,72,130,0,0,12,130,0,0,20,126,0,0,172,107,0,0,56,0,0,0,0,0,0,0,48,25,0,0,1,0,0,0,2,0,0,0,1,0,0,0,2,0,0,0,3,0,0,0,148,2,0,0,149,2,0,0,3,0,0,0,97,1,0,0,98,1,0,0,5,0,0,0,4,0,0,0,5,0,0,0,121,0,0,0,122,0,0,0,240,255,255,255,48,25,0,0,150,2,0,0,151,2,0,0,99,1,0,0,100,1,0,0,200,255,255,255,200,255,255,255,48,25,0,0,152,2,0,0,153,2,0,0,224,107,0,0,204,125,0,0,204,129,0,0,32,130,0,0,72,130,0,0,12,130,0,0,20,126,0,0,64,108,0,0,56,0,0,0,0,0,0,0,104,25,0,0,1,0,0,0,2,0,0,0,1,0,0,0,2,0,0,0,3,0,0,0,154,2,0,0,155,2,0,0,3,0,0,0,101,1,0,0,102,1,0,0,5,0,0,0,4,0,0,0,5,0,0,0,121,0,0,0,122,0,0,0,240,255,255,255,104,25,0,0,156,2,0,0,157,2,0,0,103,1,0,0,104,1,0,0,200,255,255,255,200,255,255,255,104,25,0,0,158,2,0,0,159,2,0,0,116,108,0,0,204,125,0,0,204,129,0,0,32,130,0,0,72,130,0,0,12,130,0,0,20,126,0,0,212,108,0,0,56,0,0,0,0,0,0,0,160,25,0,0,1,0,0,0,2,0,0,0,1,0,0,0,2,0,0,0,3,0,0,0,160,2,0,0,161,2,0,0,3,0,0,0,105,1,0,0,106,1,0,0,5,0,0,0,4,0,0,0,5,0,0,0,121,0,0,0,122,0,0,0,240,255,255,255,160,25,0,0,162,2,0,0,163,2,0,0,107,1,0,0,108,1,0,0,200,255,255,255,200,255,255,255,160,25,0,0,164,2,0,0,165,2,0,0,8,109,0,0,204,125,0,0,204,129,0,0,32,130,0,0,72,130,0,0,12,130,0,0,20,126,0,0,104,109,0,0,56,0,0,0,0,0,0,0,216,25,0,0,1,0,0,0,2,0,0,0,1,0,0,0,2,0,0,0,3,0,0,0,166,2,0,0,167,2,0,0,3,0,0,0,109,1,0,0,110,1,0,0,5,0,0,0,4,0,0,0,5,0,0,0,121,0,0,0,122,0,0,0,240,255,255,255,216,25,0,0,168,2,0,0,169,2,0,0,111,1,0,0,112,1,0,0,200,255,255,255,200,255,255,255,216,25,0,0,170,2,0,0,171,2,0,0,156,109,0,0,204,125,0,0,204,129,0,0,32,130,0,0,72,130,0,0,12,130,0,0,20,126,0,0,252,109,0,0,56,0,0,0,0,0,0,0,16,26,0,0,1,0,0,0,2,0,0,0,1,0,0,0,2,0,0,0,3,0,0,0,172,2,0,0,173,2,0,0,3,0,0,0,113,1,0,0,114,1,0,0,5,0,0,0,4,0,0,0,5,0,0,0,121,0,0,0,122,0,0,0,240,255,255,255,16,26,0,0,174,2,0,0,175,2,0,0,115,1,0,0,116,1,0,0,200,255,255,255,200,255,255,255,16,26,0,0,176,2,0,0,177,2,0,0,48,110,0,0,204,125,0,0,204,129,0,0,32,130,0,0,72,130,0,0,12,130,0,0,20,126,0,0,144,110,0,0,56,0,0,0,0,0,0,0,72,26,0,0,1,0,0,0,2,0,0,0,1,0,0,0,2,0,0,0,3,0,0,0,178,2,0,0,179,2,0,0,3,0,0,0,117,1,0,0,118,1,0,0,5,0,0,0,4,0,0,0,5,0,0,0,121,0,0,0,122,0,0,0,240,255,255,255,72,26,0,0,180,2,0,0,181,2,0,0,119,1,0,0,120,1,0,0,200,255,255,255,200,255,255,255,72,26,0,0,182,2,0,0,183,2,0,0,196,110,0,0,204,125,0,0,204,129,0,0,32,130,0,0,72,130,0,0,12,130,0,0,20,126,0,0,36,111,0,0,56,0,0,0,0,0,0,0,128,26,0,0,1,0,0,0,2,0,0,0,1,0,0,0,2,0,0,0,3,0,0,0,184,2,0,0,185,2,0,0,3,0,0,0,121,1,0,0,122,1,0,0,5,0,0,0,4,0,0,0,5,0,0,0,121,0,0,0,122,0,0,0,240,255,255,255,128,26,0,0,186,2,0,0,187,2,0,0,123,1,0,0,124,1,0,0,200,255,255,255,200,255,255,255,128,26,0,0,188,2,0,0,189,2,0,0,88,111,0,0,204,125,0,0,204,129,0,0,32,130,0,0,72,130,0,0,12,130,0,0,20,126,0,0,184,111,0,0,56,0,0,0,0,0,0,0,184,26,0,0,1,0,0,0,2,0,0,0,1,0,0,0,2,0,0,0,3,0,0,0,190,2,0,0,191,2,0,0,3,0,0,0,125,1,0,0,126,1,0,0,5,0,0,0,4,0,0,0,5,0,0,0,121,0,0,0,122,0,0,0,240,255,255,255,184,26,0,0,192,2,0,0,193,2,0,0,127,1,0,0,128,1,0,0,200,255,255,255,200,255,255,255,184,26,0,0,194,2,0,0,195,2,0,0,236,111,0,0,204,125,0,0,204,129,0,0,32,130,0,0,72,130,0,0,12,130,0,0,20,126,0,0,76,112,0,0,56,0,0,0,0,0,0,0,240,26,0,0,1,0,0,0,2,0,0,0,1,0,0,0,2,0,0,0,3,0,0,0,196,2,0,0,197,2,0,0,3,0,0,0,129,1,0,0,130,1,0,0,5,0,0,0,4,0,0,0,5,0,0,0,121,0,0,0,122,0,0,0,240,255,255,255,240,26,0,0,198,2,0,0,199,2,0,0,131,1,0,0,132,1,0,0,200,255,255,255,200,255,255,255,240,26,0,0,200,2,0,0,201,2,0,0,128,112,0,0,204,125,0,0,204,129,0,0,32,130,0,0,72,130,0,0,12,130,0,0,20,126,0,0,224,112,0,0,56,0,0,0,0,0,0,0,40,27,0,0,1,0,0,0,2,0,0,0,1,0,0,0,2,0,0,0,3,0,0,0,202,2,0,0,203,2,0,0,3,0,0,0,133,1,0,0,134,1,0,0,5,0,0,0,4,0,0,0,5,0,0,0,121,0,0,0,122,0,0,0,240,255,255,255,40,27,0,0,204,2,0,0,205,2,0,0,135,1,0,0,136,1,0,0,200,255,255,255,200,255,255,255,40,27,0,0,206,2,0,0,207,2,0,0,20,113,0,0,204,125,0,0,204,129,0,0,32,130,0,0,72,130,0,0,12,130,0,0,20,126,0,0,116,113,0,0,56,0,0,0,0,0,0,0,96,27,0,0,1,0,0,0,2,0,0,0,1,0,0,0,2,0,0,0,3,0,0,0,208,2,0,0,209,2,0,0,3,0,0,0,137,1,0,0,138,1,0,0,5,0,0,0,4,0,0,0,5,0,0,0,121,0,0,0,122,0,0,0,240,255,255,255,96,27,0,0,210,2,0,0,211,2,0,0,139,1,0,0,140,1,0,0,200,255,255,255,200,255,255,255,96,27,0,0,212,2,0,0,213,2,0,0,168,113,0,0,204,125,0,0,204,129,0,0,32,130,0,0,72,130,0,0,12,130,0,0,20,126,0,0,8,114,0,0,56,0,0,0,0,0,0,0,152,27,0,0,1,0,0,0,2,0,0,0,1,0,0,0,2,0,0,0,3,0,0,0,214,2,0,0,215,2,0,0,3,0,0,0,141,1,0,0,142,1,0,0,5,0,0,0,4,0,0,0,5,0,0,0,121,0,0,0,122,0,0,0,240,255,255,255,152,27,0,0,216,2,0,0,217,2,0,0,143,1,0,0,144,1,0,0,200,255,255,255,200,255,255,255,152,27,0,0,218,2,0,0,219,2,0,0,60,114,0,0,204,125,0,0,204,129,0,0,32,130,0,0,72,130,0,0,12,130,0,0,20,126,0,0,156,114,0,0,56,0,0,0,0,0,0,0,208,27,0,0,1,0,0,0,2,0,0,0,1,0,0,0,2,0,0,0,3,0,0,0,220,2,0,0,221,2,0,0,3,0,0,0,145,1,0,0,146,1,0,0,5,0,0,0,4,0,0,0,5,0,0,0,121,0,0,0,122,0,0,0,240,255,255,255,208,27,0,0,222,2,0,0,223,2,0,0,147,1,0,0,148,1,0,0,200,255,255,255,200,255,255,255,208,27,0,0,224,2,0,0,225,2,0,0,208,114,0,0,204,125,0,0,204,129,0,0,32,130,0,0,72,130,0,0,12,130,0,0,20,126,0,0,48,115,0,0,56,0,0,0,0,0,0,0,8,28,0,0,1,0,0,0,2,0,0,0,1,0,0,0,2,0,0,0,3,0,0,0,226,2,0,0,227,2,0,0,3,0,0,0,149,1,0,0,150,1,0,0,5,0,0,0,4,0,0,0,5,0,0,0,121,0,0,0,122,0,0,0,240,255,255,255,8,28,0,0,228,2,0,0,229,2,0,0,151,1,0,0,152,1,0,0,200,255,255,255,200,255,255,255,8,28,0,0,230,2,0,0,231,2,0,0,100,115,0,0,204,125,0,0,204,129,0,0,32,130,0,0,72,130,0,0,12,130,0,0,20,126,0,0,196,115,0,0,56,0,0,0,0,0,0,0,64,28,0,0,1,0,0,0,2,0,0,0,1,0,0,0,2,0,0,0,3,0,0,0,232,2,0,0,233,2,0,0,3,0,0,0,153,1,0,0,154,1,0,0,5,0,0,0,4,0,0,0,5,0,0,0,121,0,0,0,122,0,0,0,240,255,255,255,64,28,0,0,234,2,0,0,235,2,0,0,155,1,0,0,156,1,0,0,200,255,255,255,200,255,255,255,64,28,0,0,236,2,0,0,237,2,0,0,248,115,0,0,204,125,0,0,204,129,0,0,32,130,0,0,72,130,0,0,12,130,0,0,20,126,0,0,88,116,0,0,56,0,0,0,0,0,0,0,120,28,0,0,1,0,0,0,2,0,0,0,1,0,0,0,2,0,0,0,3,0,0,0,238,2,0,0,239,2,0,0,3,0,0,0,157,1,0,0,158,1,0,0,5,0,0,0,4,0,0,0,5,0,0,0,121,0,0,0,122,0,0,0,240,255,255,255,120,28,0,0,240,2,0,0,241,2,0,0,159,1,0,0,160,1,0,0,200,255,255,255,200,255,255,255,120,28,0,0,242,2,0,0,243,2,0,0,140,116,0,0,204,125,0,0,204,129,0,0,32,130,0,0,72,130,0,0,12,130,0,0,20,126,0,0,236,116,0,0,56,0,0,0,0,0,0,0,176,28,0,0,1,0,0,0,2,0,0,0,1,0,0,0,2,0,0,0,3,0,0,0,244,2,0,0,245,2,0,0,3,0,0,0,161,1,0,0,162,1,0,0,5,0,0,0,4,0,0,0,5,0,0,0,121,0,0,0,122,0,0,0,240,255,255,255,176,28,0,0,246,2,0,0,247,2,0,0,163,1,0,0,164,1,0,0,200,255,255,255,200,255,255,255,176,28,0,0,248,2,0,0,249,2,0,0,32,117,0,0,204,125,0,0,204,129,0,0,32,130,0,0,72,130,0,0,12,130,0,0,20,126,0,0,128,117,0,0,56,0,0,0,0,0,0,0,232,28,0,0,1,0,0,0,2,0,0,0,1,0,0,0,2,0,0,0,3,0,0,0,250,2,0,0,251,2,0,0,3,0,0,0,165,1,0,0,166,1,0,0,5,0,0,0,4,0,0,0,5,0,0,0,121,0,0,0,122,0,0,0,240,255,255,255,232,28,0,0,252,2,0,0,253,2,0,0,167,1,0,0,168,1,0,0,200,255,255,255,200,255,255,255,232,28,0,0,254,2,0,0,255,2,0,0,180,117,0,0,204,125,0,0,204,129,0,0,32,130,0,0,72,130,0,0,12,130,0,0,20,126,0,0,20,118,0,0,56,0,0,0,0,0,0,0,32,29,0,0,1,0,0,0,2,0,0,0,1,0,0,0,2,0,0,0,3,0,0,0,0,3,0,0,1,3,0,0,3,0,0,0,169,1,0,0,170,1,0,0,5,0,0,0,4,0,0,0,5,0,0,0,121,0,0,0,122,0,0,0,240,255,255,255,32,29,0,0,2,3,0,0,3,3,0,0,171,1,0,0,172,1,0,0,200,255,255,255,200,255,255,255,32,29,0,0,4,3,0,0,5,3,0,0,72,118,0,0,204,125,0,0,204,129,0,0,32,130,0,0,72,130,0,0,12,130,0,0,20,126,0,0,168,118,0,0,56,0,0,0,0,0,0,0,88,29,0,0,1,0,0,0,2,0,0,0,1,0,0,0,2,0,0,0,3,0,0,0,6,3,0,0,7,3,0,0,3,0,0,0,173,1,0,0,174,1,0,0,5,0,0,0,4,0,0,0,5,0,0,0,121,0,0,0,122,0,0,0,240,255,255,255,88,29,0,0,8,3,0,0,9,3,0,0,175,1,0,0,176,1,0,0,200,255,255,255,200,255,255,255,88,29,0,0,10,3,0,0,11,3,0,0,220,118,0,0,204,125,0,0,204,129,0,0,32,130,0,0,72,130,0,0,12,130,0,0,20,126,0,0,60,119,0,0,56,0,0,0,0,0,0,0,144,29,0,0,1,0,0,0,2,0,0,0,1,0,0,0,2,0,0,0,3,0,0,0,12,3,0,0,13,3,0,0,3,0,0,0,177,1,0,0,178,1,0,0,5,0,0,0,4,0,0,0,5,0,0,0,121,0,0,0,122,0,0,0,240,255,255,255,144,29,0,0,14,3,0,0,15,3,0,0,179,1,0,0,180,1,0,0,200,255,255,255,200,255,255,255,144,29,0,0,16,3,0,0,17,3,0,0,112,119,0,0,204,125,0,0,204,129,0,0,32,130,0,0,72,130,0,0,12,130,0,0,20,126,0,0,208,119,0,0,56,0,0,0,0,0,0,0,200,29,0,0,1],"i8",ALLOC_NONE,Runtime.GLOBAL_BASE+20480);allocate([2,0,0,0,1,0,0,0,2,0,0,0,3,0,0,0,18,3,0,0,19,3,0,0,3,0,0,0,181,1,0,0,182,1,0,0,5,0,0,0,4,0,0,0,5,0,0,0,121,0,0,0,122,0,0,0,240,255,255,255,200,29,0,0,20,3,0,0,21,3,0,0,183,1,0,0,184,1,0,0,200,255,255,255,200,255,255,255,200,29,0,0,22,3,0,0,23,3,0,0,4,120,0,0,204,125,0,0,204,129,0,0,32,130,0,0,72,130,0,0,12,130,0,0,20,126,0,0,100,120,0,0,56,0,0,0,0,0,0,0,0,30,0,0,1,0,0,0,2,0,0,0,1,0,0,0,2,0,0,0,3,0,0,0,24,3,0,0,25,3,0,0,3,0,0,0,185,1,0,0,186,1,0,0,5,0,0,0,4,0,0,0,5,0,0,0,121,0,0,0,122,0,0,0,240,255,255,255,0,30,0,0,26,3,0,0,27,3,0,0,187,1,0,0,188,1,0,0,200,255,255,255,200,255,255,255,0,30,0,0,28,3,0,0,29,3,0,0,152,120,0,0,204,125,0,0,204,129,0,0,32,130,0,0,72,130,0,0,12,130,0,0,20,126,0,0,248,120,0,0,56,0,0,0,0,0,0,0,56,30,0,0,1,0,0,0,2,0,0,0,1,0,0,0,2,0,0,0,3,0,0,0,30,3,0,0,31,3,0,0,3,0,0,0,189,1,0,0,190,1,0,0,5,0,0,0,4,0,0,0,5,0,0,0,121,0,0,0,122,0,0,0,240,255,255,255,56,30,0,0,32,3,0,0,33,3,0,0,191,1,0,0,192,1,0,0,200,255,255,255,200,255,255,255,56,30,0,0,34,3,0,0,35,3,0,0,44,121,0,0,204,125,0,0,204,129,0,0,32,130,0,0,72,130,0,0,12,130,0,0,20,126,0,0,140,121,0,0,56,0,0,0,0,0,0,0,112,30,0,0,1,0,0,0,2,0,0,0,1,0,0,0,2,0,0,0,3,0,0,0,36,3,0,0,37,3,0,0,3,0,0,0,193,1,0,0,194,1,0,0,5,0,0,0,4,0,0,0,5,0,0,0,121,0,0,0,122,0,0,0,240,255,255,255,112,30,0,0,38,3,0,0,39,3,0,0,195,1,0,0,196,1,0,0,200,255,255,255,200,255,255,255,112,30,0,0,40,3,0,0,41,3,0,0,192,121,0,0,204,125,0,0,204,129,0,0,32,130,0,0,72,130,0,0,12,130,0,0,20,126,0,0,32,122,0,0,56,0,0,0,0,0,0,0,168,30,0,0,1,0,0,0,2,0,0,0,1,0,0,0,2,0,0,0,3,0,0,0,42,3,0,0,43,3,0,0,3,0,0,0,197,1,0,0,198,1,0,0,5,0,0,0,4,0,0,0,5,0,0,0,121,0,0,0,122,0,0,0,240,255,255,255,168,30,0,0,44,3,0,0,45,3,0,0,199,1,0,0,200,1,0,0,200,255,255,255,200,255,255,255,168,30,0,0,46,3,0,0,47,3,0,0,84,122,0,0,204,125,0,0,204,129,0,0,32,130,0,0,72,130,0,0,12,130,0,0,20,126,0,0,180,122,0,0,56,0,0,0,0,0,0,0,224,30,0,0,1,0,0,0,2,0,0,0,1,0,0,0,2,0,0,0,3,0,0,0,48,3,0,0,49,3,0,0,3,0,0,0,201,1,0,0,202,1,0,0,5,0,0,0,4,0,0,0,5,0,0,0,121,0,0,0,122,0,0,0,240,255,255,255,224,30,0,0,50,3,0,0,51,3,0,0,203,1,0,0,204,1,0,0,200,255,255,255,200,255,255,255,224,30,0,0,52,3,0,0,53,3,0,0,232,122,0,0,204,125,0,0,204,129,0,0,32,130,0,0,72,130,0,0,12,130,0,0,20,126,0,0,72,123,0,0,56,0,0,0,0,0,0,0,24,31,0,0,1,0,0,0,2,0,0,0,1,0,0,0,2,0,0,0,3,0,0,0,54,3,0,0,55,3,0,0,3,0,0,0,205,1,0,0,206,1,0,0,5,0,0,0,4,0,0,0,5,0,0,0,121,0,0,0,122,0,0,0,240,255,255,255,24,31,0,0,56,3,0,0,57,3,0,0,207,1,0,0,208,1,0,0,200,255,255,255,200,255,255,255,24,31,0,0,58,3,0,0,59,3,0,0,124,123,0,0,204,125,0,0,204,129,0,0,32,130,0,0,72,130,0,0,12,130,0,0,20,126,0,0,220,123,0,0,56,0,0,0,0,0,0,0,80,31,0,0,1,0,0,0,2,0,0,0,1,0,0,0,2,0,0,0,3,0,0,0,60,3,0,0,61,3,0,0,3,0,0,0,209,1,0,0,210,1,0,0,5,0,0,0,4,0,0,0,5,0,0,0,121,0,0,0,122,0,0,0,240,255,255,255,80,31,0,0,62,3,0,0,63,3,0,0,211,1,0,0,212,1,0,0,200,255,255,255,200,255,255,255,80,31,0,0,64,3,0,0,65,3,0,0,16,124,0,0,204,125,0,0,204,129,0,0,32,130,0,0,72,130,0,0,12,130,0,0,20,126,0,0,112,124,0,0,56,0,0,0,0,0,0,0,136,31,0,0,1,0,0,0,2,0,0,0,1,0,0,0,2,0,0,0,3,0,0,0,66,3,0,0,67,3,0,0,3,0,0,0,213,1,0,0,214,1,0,0,5,0,0,0,4,0,0,0,5,0,0,0,121,0,0,0,122,0,0,0,240,255,255,255,136,31,0,0,68,3,0,0,69,3,0,0,215,1,0,0,216,1,0,0,200,255,255,255,200,255,255,255,136,31,0,0,70,3,0,0,71,3,0,0,164,124,0,0,204,125,0,0,204,129,0,0,32,130,0,0,72,130,0,0,12,130,0,0,20,126,0,0,4,125,0,0,56,0,0,0,0,0,0,0,192,31,0,0,1,0,0,0,2,0,0,0,1,0,0,0,2,0,0,0,3,0,0,0,72,3,0,0,73,3,0,0,3,0,0,0,217,1,0,0,218,1,0,0,5,0,0,0,4,0,0,0,5,0,0,0,121,0,0,0,122,0,0,0,240,255,255,255,192,31,0,0,74,3,0,0,75,3,0,0,219,1,0,0,220,1,0,0,200,255,255,255,200,255,255,255,192,31,0,0,76,3,0,0,77,3,0,0,56,125,0,0,204,125,0,0,204,129,0,0,32,130,0,0,72,130,0,0,12,130,0,0,20,126,0,0,152,125,0,0,56,0,0,0,0,0,0,0,88,32,0,0,1,0,0,0,2,0,0,0,1,0,0,0,2,0,0,0,3,0,0,0,78,3,0,0,79,3,0,0,3,0,0,0,221,1,0,0,222,1,0,0,5,0,0,0,4,0,0,0,5,0,0,0,121,0,0,0,122,0,0,0,200,255,255,255,200,255,255,255,88,32,0,0,80,3,0,0,81,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,68,0,0,0,0,0,0,0,232,31,0,0,1,0,0,0,2,0,0,0,1,0,0,0,2,0,0,0,3,0,0,0,82,3,0,0,83,3,0,0,3,0,0,0,223,1,0,0,224,1,0,0,5,0,0,0,4,0,0,0,5,0,0,0,240,255,255,255,232,31,0,0,84,3,0,0,85,3,0,0,225,1,0,0,226,1,0,0,188,255,255,255,188,255,255,255,232,31,0,0,86,3,0,0,87,3,0,0,52,126,0,0,184,126,0,0,12,127,0,0,52,127,0,0,248,126,0,0,140,126,0,0,68,0,0,0,0,0,0,0,40,6,0,0,1,0,0,0,2,0,0,0,1,0,0,0,2,0,0,0,3,0,0,0,4,0,0,0,5,0,0,0,3,0,0,0,3,0,0,0,4,0,0,0,5,0,0,0,4,0,0,0,5,0,0,0,188,255,255,255,188,255,255,255,40,6,0,0,8,0,0,0,9,0,0,0,68,0,0,0,0,0,0,0,8,6,0,0,1,0,0,0,2,0,0,0,1,0,0,0,2,0,0,0,3,0,0,0,30,0,0,0,31,0,0,0,188,255,255,255,188,255,255,255,8,6,0,0,32,0,0,0,33,0,0,0,56,0,0,0,0,0,0,0,24,41,0,0,88,3,0,0,89,3,0,0,200,255,255,255,200,255,255,255,24,41,0,0,90,3,0,0,91,3,0,0,56,0,0,0,0,0,0,0,248,31,0,0,92,3,0,0,93,3,0,0,200,255,255,255,200,255,255,255,248,31,0,0,94,3,0,0,95,3,0,0,112,127,0,0,72,127,0,0,92,127,0,0,132,127,0,0,48,0,0,0,0,0,0,0,8,32,0,0,1,0,0,0,2,0,0,0,1,0,0,0,2,0,0,0,3,0,0,0,96,3,0,0,97,3,0,0,3,0,0,0,227,1,0,0,228,1,0,0,5,0,0,0,4,0,0,0,5,0,0,0,240,255,255,255,8,32,0,0,98,3,0,0,99,3,0,0,229,1,0,0,230,1,0,0,208,255,255,255,208,255,255,255,8,32,0,0,100,3,0,0,101,3,0,0,168,127,0,0,176,128,0,0,4,129,0,0,44,129,0,0,240,128,0,0,0,128,0,0,48,0,0,0,0,0,0,0,24,32,0,0,1,0,0,0,2,0,0,0,1,0,0,0,2,0,0,0,3,0,0,0,102,3,0,0,103,3,0,0,3,0,0,0,231,1,0,0,232,1,0,0,5,0,0,0,4,0,0,0,5,0,0,0,240,255,255,255,24,32,0,0,104,3,0,0,105,3,0,0,233,1,0,0,234,1,0,0,208,255,255,255,208,255,255,255,24,32,0,0,106,3,0,0,107,3,0,0,44,128,0,0,176,128,0,0,4,129,0,0,44,129,0,0,240,128,0,0,132,128,0,0,48,0,0,0,0,0,0,0,40,6,0,0,1,0,0,0,2,0,0,0,1,0,0,0,2,0,0,0,3,0,0,0,4,0,0,0,5,0,0,0,3,0,0,0,3,0,0,0,4,0,0,0,5,0,0,0,4,0,0,0,5,0,0,0,208,255,255,255,208,255,255,255,40,6,0,0,8,0,0,0,9,0,0,0,48,0,0,0,0,0,0,0,8,6,0,0,1,0,0,0,2,0,0,0,1,0,0,0,2,0,0,0,3,0,0,0,30,0,0,0,31,0,0,0,208,255,255,255,208,255,255,255,8,6,0,0,32,0,0,0,33,0,0,0,56,0,0,0,0,0,0,0,88,32,0,0,1,0,0,0,2,0,0,0,1,0,0,0,2,0,0,0,3,0,0,0,78,3,0,0,79,3,0,0,3,0,0,0,221,1,0,0,222,1,0,0,5,0,0,0,4,0,0,0,5,0,0,0,121,0,0,0,122,0,0,0,240,255,255,255,88,32,0,0,108,3,0,0,109,3,0,0,235,1,0,0,236,1,0,0,200,255,255,255,200,255,255,255,88,32,0,0,80,3,0,0,81,3,0,0,64,129,0,0,204,129,0,0,32,130,0,0,72,130,0,0,12,130,0,0,160,129,0,0,56,0,0,0,0,0,0,0,40,6,0,0,1,0,0,0,2,0,0,0,1,0,0,0,2,0,0,0,3,0,0,0,4,0,0,0,5,0,0,0,3,0,0,0,3,0,0,0,4,0,0,0,5,0,0,0,4,0,0,0,5,0,0,0,200,255,255,255,200,255,255,255,40,6,0,0,8,0,0,0,9,0,0,0,56,0,0,0,0,0,0,0,8,6,0,0,1,0,0,0,2,0,0,0,1,0,0,0,2,0,0,0,3,0,0,0,30,0,0,0,31,0,0,0,200,255,255,255,200,255,255,255,8,6,0,0,32,0,0,0,33,0,0,0,0,0,0,0,128,32,0,0,110,3,0,0,111,3,0,0,4,0,0,0,0,0,0,0,144,32,0,0,110,3,0,0,112,3,0,0,1,0,0,0,0,0,0,0,208,5,0,0,113,3,0,0,114,3,0,0,40,131,0,0,148,137,0,0,76,1,0,0,112,4,0,0,240,169,0,0,240,169,0,0,16,170,0,0,44,170,0,0,68,170,0,0,96,170,0,0,120,170,0,0,148,170,0,0,172,170,0,0,200,170,0,0,112,4,0,0,204,4,0,0,236,4,0,0,12,5,0,0,44,5,0,0,132,1,0,0,132,1,0,0,224,1,0,0,0,2,0,0,32,2,0,0,64,2,0,0,216,137,0,0,216,137,0,0,52,138,0,0,84,138,0,0,116,138,0,0,148,138,0,0,108,131,0,0,108,131,0,0,200,131,0,0,232,131,0,0,8,132,0,0,40,132,0,0,4,0,0,0,0,0,0,0,232,32,0,0,115,3,0,0,116,3,0,0,5,0,0,0,237,1,0,0,3,0,0,0,3,0,0,0,4,0,0,0,238,1,0,0,239,1,0,0,123,0,0,0,240,1,0,0,241,1,0,0,242,1,0,0,0,0,0,0,252,255,255,255,252,255,255,255,232,32,0,0,117,3,0,0,118,3,0,0,243,1,0,0,244,1,0,0,124,0,0,0,8,0,0,0,245,1,0,0,246,1,0,0,247,1,0,0,248,1,0,0,249,1,0,0,250,1,0,0,251,1,0,0,9,0,0,0,4,0,0,0,5,0,0,0,6,0,0,0,6,0,0,0,125,0,0,0,252,255,255,255,248,255,255,255,248,255,255,255,232,32,0,0,119,3,0,0,120,3,0,0,252,1,0,0,253,1,0,0,248,255,255,255,244,255,255,255,244,255,255,255,232,32,0,0,121,3,0,0,122,3,0,0,254,1,0,0,255,1,0,0,244,255,255,255,240,255,255,255,240,255,255,255,232,32,0,0,123,3,0,0,124,3,0,0,0,2,0,0,20,0,0,0,240,255,255,255,236,255,255,255,236,255,255,255,232,32,0,0,125,3,0,0,126,3,0,0,1,2,0,0,2,2,0,0,0,0,0,0,152,32,0,0,127,3,0,0,128,3,0,0,0,0,0,0,8,33,0,0,129,3,0,0,130,3,0,0,248,132,0,0,96,140,0,0,76,1,0,0,112,4,0,0,240,169,0,0,240,169,0,0,16,170,0,0,44,170,0,0,68,170,0,0,96,170,0,0,120,170,0,0,148,170,0,0,172,170,0,0,200,170,0,0,112,4,0,0,204,4,0,0,236,4,0,0,12,5,0,0,44,5,0,0,132,1,0,0,132,1,0,0,224,1,0,0,0,2,0,0,32,2,0,0,64,2,0,0,164,140,0,0,164,140,0,0,0,141,0,0,32,141,0,0,64,141,0,0,96,141,0,0,60,133,0,0,60,133,0,0,152,133,0,0,184,133,0,0,216,133,0,0,248,133,0,0,4,0,0,0,0,0,0,0,56,33,0,0,131,3,0,0,132,3,0,0,7,0,0,0,237,1,0,0,3,0,0,0,3,0,0,0,4,0,0,0,238,1,0,0,239,1,0,0,123,0,0,0,3,2,0,0,4,2,0,0,5,2,0,0,0,0,0,0,252,255,255,255,252,255,255,255,56,33,0,0,133,3,0,0,134,3,0,0,243,1,0,0,244,1,0,0,124,0,0,0,8,0,0,0,245,1,0,0,6,2,0,0,7,2,0,0,248,1,0,0,249,1,0,0,8,2,0,0,251,1,0,0,9,0,0,0,4,0,0,0,5,0,0,0,6,0,0,0,6,0,0,0,125,0,0,0,252,255,255,255,248,255,255,255,248,255,255,255,56,33,0,0,135,3,0,0,136,3,0,0,252,1,0,0,253,1,0,0,248,255,255,255,244,255,255,255,244,255,255,255,56,33,0,0,137,3,0,0,138,3,0,0,9,2,0,0,10,2,0,0,244,255,255,255,240,255,255,255,240,255,255,255,56,33,0,0,139,3,0,0,140,3,0,0,11,2,0,0,20,0,0,0,240,255,255,255,236,255,255,255,236,255,255,255,56,33,0,0,141,3,0,0,142,3,0,0,1,2,0,0,2,2,0,0,0,0,0,0,32,33,0,0,143,3,0,0,144,3,0,0,0,0,0,0,88,33,0,0,145,3,0,0,146,3,0,0,200,134,0,0,44,143,0,0,76,1,0,0,112,4,0,0,240,169,0,0,240,169,0,0,16,170,0,0,44,170,0,0,68,170,0,0,96,170,0,0,120,170,0,0,148,170,0,0,172,170,0,0,200,170,0,0,112,4,0,0,204,4,0,0,236,4,0,0,12,5,0,0,44,5,0,0,132,1,0,0,132,1,0,0,224,1,0,0,0,2,0,0,32,2,0,0,64,2,0,0,112,143,0,0,112,143,0,0,204,143,0,0,236,143,0,0,12,144,0,0,44,144,0,0,12,135,0,0,12,135,0,0,104,135,0,0,136,135,0,0,168,135,0,0,200,135,0,0,4,0,0,0,0,0,0,0,104,33,0,0,147,3,0,0,148,3,0,0,8,0,0,0,237,1,0,0,3,0,0,0,3,0,0,0,4,0,0,0,238,1,0,0,239,1,0,0,123,0,0,0,12,2,0,0,13,2,0,0,14,2,0,0,0,0,0,0,252,255,255,255,252,255,255,255,104,33,0,0,149,3,0,0,150,3,0,0,243,1,0,0,244,1,0,0,124,0,0,0,8,0,0,0,245,1,0,0,15,2,0,0,16,2,0,0,248,1,0,0,249,1,0,0,17,2,0,0,251,1,0,0,9,0,0,0,4,0,0,0,5,0,0,0,6,0,0,0,6,0,0,0,125,0,0,0,252,255,255,255,248,255,255,255,248,255,255,255,104,33,0,0,151,3,0,0,152,3,0,0,252,1,0,0,253,1,0,0,248,255,255,255,244,255,255,255,244,255,255,255,104,33,0,0,153,3,0,0,154,3,0,0,18,2,0,0,19,2,0,0,244,255,255,255,240,255,255,255,240,255,255,255,104,33,0,0,155,3,0,0,156,3,0,0,20,2,0,0,20,0,0,0,240,255,255,255,236,255,255,255,236,255,255,255,104,33,0,0,157,3,0,0,158,3,0,0,1,2,0,0,2,2,0,0,120,136,0,0,148,137,0,0,76,1,0,0,112,4,0,0,240,169,0,0,240,169,0,0,16,170,0,0,44,170,0,0,68,170,0,0,96,170,0,0,120,170,0,0,148,170,0,0,172,170,0,0,200,170,0,0,112,4,0,0,204,4,0,0,236,4,0,0,12,5,0,0,44,5,0,0,132,1,0,0,132,1,0,0,224,1,0,0,0,2,0,0,32,2,0,0,64,2,0,0,216,137,0,0,216,137,0,0,52,138,0,0,84,138,0,0,116,138,0,0,148,138,0,0,188,136,0,0,188,136,0,0,24,137,0,0,56,137,0,0,88,137,0,0,120,137,0,0,4,0,0,0,0,0,0,0,136,33,0,0,159,3,0,0,160,3,0,0,5,0,0,0,237,1,0,0,3,0,0,0,3,0,0,0,4,0,0,0,238,1,0,0,239,1,0,0,123,0,0,0,240,1,0,0,241,1,0,0,242,1,0,0,0,0,0,0,252,255,255,255,252,255,255,255,136,33,0,0,161,3,0,0,162,3,0,0,243,1,0,0,244,1,0,0,124,0,0,0,8,0,0,0,245,1,0,0,246,1,0,0,247,1,0,0,248,1,0,0,249,1,0,0,250,1,0,0,251,1,0,0,9,0,0,0,4,0,0,0,5,0,0,0,6,0,0,0,6,0,0,0,125,0,0,0,252,255,255,255,248,255,255,255,248,255,255,255,136,33,0,0,163,3,0,0,164,3,0,0,252,1,0,0,253,1,0,0,248,255,255,255,244,255,255,255,244,255,255,255,136,33,0,0,165,3,0,0,166,3,0,0,254,1,0,0,255,1,0,0,244,255,255,255,240,255,255,255,240,255,255,255,136,33,0,0,167,3,0,0,168,3,0,0,0,2,0,0,20,0,0,0,240,255,255,255,236,255,255,255,236,255,255,255,136,33,0,0,169,3,0,0,170,3,0,0,1,2,0,0,2,2,0,0,4,0,0,0,0,0,0,0,248,32,0,0,171,3,0,0,172,3,0,0,5,0,0,0,237,1,0,0,3,0,0,0,3,0,0,0,4,0,0,0,238,1,0,0,239,1,0,0,123,0,0,0,240,1,0,0,241,1,0,0,242,1,0,0,0,0,0,0,252,255,255,255,252,255,255,255,248,32,0,0,173,3,0,0,174,3,0,0,243,1,0,0,244,1,0,0,124,0,0,0,8,0,0,0,245,1,0,0,246,1,0,0,247,1,0,0,248,1,0,0,249,1,0,0,250,1,0,0,251,1,0,0,9,0,0,0,4,0,0,0,5,0,0,0,6,0,0,0,6,0,0,0,125,0,0,0,252,255,255,255,248,255,255,255,248,255,255,255,248,32,0,0,175,3,0,0,176,3,0,0,252,1,0,0,253,1,0,0,248,255,255,255,244,255,255,255,244,255,255,255,248,32,0,0,177,3,0,0,178,3,0,0,254,1,0,0,255,1,0,0,244,255,255,255,240,255,255,255,240,255,255,255,248,32,0,0,179,3,0,0,180,3,0,0,0,2,0,0,20,0,0,0,240,255,255,255,236,255,255,255,236,255,255,255,248,32,0,0,181,3,0,0,182,3,0,0,1,2,0,0,2,2,0,0,68,139,0,0,96,140,0,0,76,1,0,0,112,4,0,0,240,169,0,0,240,169,0,0,16,170,0,0,44,170,0,0,68,170,0,0,96,170,0,0,120,170,0,0,148,170,0,0,172,170,0,0,200,170,0,0,112,4,0,0,204,4,0,0,236,4,0,0,12,5,0,0,44,5,0,0,132,1,0,0,132,1,0,0,224,1,0,0,0,2,0,0,32,2,0,0,64,2,0,0,164,140,0,0,164,140,0,0,0,141,0,0,32,141,0,0,64,141,0,0,96,141,0,0,136,139,0,0,136,139,0,0,228,139,0,0,4,140,0,0,36,140,0,0,68,140,0,0,4,0,0,0,0,0,0,0,152,33,0,0,183,3,0,0,184,3,0,0,7,0,0,0,237,1,0,0,3,0,0,0,3,0,0,0,4,0,0,0,238,1,0,0,239,1,0,0,123,0,0,0,3,2,0,0,4,2,0,0,5,2,0,0,0,0,0,0,252,255,255,255,252,255,255,255,152,33,0,0,185,3,0,0,186,3,0,0,243,1,0,0,244,1,0,0,124,0,0,0,8,0,0,0,245,1,0,0,6,2,0,0,7,2,0,0,248,1,0,0,249,1,0,0,8,2,0,0,251,1,0,0,9,0,0,0,4,0,0,0,5,0,0,0,6,0,0,0,6,0,0,0,125,0,0,0,252,255,255,255,248,255,255,255,248,255,255,255,152,33,0,0,187,3,0,0,188,3,0,0,252,1,0,0,253,1,0,0,248,255,255,255,244,255,255,255,244,255,255,255,152,33,0,0,189,3,0,0,190,3,0,0,9,2,0,0,10,2,0,0,244,255,255,255,240,255,255,255,240,255,255,255,152,33,0,0,191,3,0,0,192,3,0,0,11,2,0,0,20,0,0,0,240,255,255,255,236,255,255,255,236,255,255,255,152,33,0,0,193,3,0,0,194,3,0,0,1,2,0,0,2,2,0,0,4,0,0,0,0,0,0,0,72,33,0,0,195,3,0,0,196,3,0,0,7,0,0,0,237,1,0,0,3,0,0,0,3,0,0,0,4,0,0,0,238,1,0,0,239,1,0,0,123,0,0,0,3,2,0,0,4,2,0,0,5,2,0,0,0,0,0,0,252,255,255,255,252,255,255,255,72,33,0,0,197,3,0,0,198,3,0,0,243,1,0,0,244,1,0,0,124,0,0,0,8,0,0,0,245,1,0,0,6,2,0,0,7,2,0,0,248,1,0,0,249,1,0,0,8,2,0,0,251,1,0,0,9,0,0,0,4,0,0,0,5,0,0,0,6,0,0,0,6,0,0,0,125,0,0,0,252,255,255,255,248,255,255,255,248,255,255,255,72,33,0,0,199,3,0,0,200,3,0,0,252,1,0,0,253,1,0,0,248,255,255,255,244,255,255,255,244,255,255,255,72,33,0,0,201,3,0,0,202,3,0,0,9,2,0,0,10,2,0,0,244,255,255,255,240,255,255,255,240,255,255,255,72,33,0,0,203,3,0,0,204,3,0,0,11,2,0,0,20,0,0,0,240,255,255,255,236,255,255,255,236,255,255,255,72,33,0,0,205,3,0,0,206,3,0,0,1,2,0,0,2,2,0,0,16,142,0,0,44,143,0,0,76,1,0,0,112,4,0,0,240,169,0,0,240,169,0,0,16,170,0,0,44,170,0,0,68,170,0,0,96,170,0,0,120,170,0,0,148,170,0,0,172,170,0,0,200,170,0,0,112,4,0,0,204,4,0,0,236,4,0,0,12,5,0,0,44,5,0,0,132,1,0,0,132,1,0,0,224,1,0,0,0,2,0,0,32,2,0,0,64,2,0,0,112,143,0,0,112,143,0,0,204,143,0,0,236,143,0,0,12,144,0,0,44,144,0,0,84,142,0,0,84,142,0,0,176,142,0,0,208,142,0,0,240,142,0,0,16,143,0,0,4,0,0,0,0,0,0,0,168,33,0,0,207,3,0,0,208,3,0,0,8,0,0,0,237,1,0,0,3,0,0,0,3,0,0,0,4,0,0,0,238,1,0,0,239,1,0,0,123,0,0,0,12,2,0,0,13,2,0,0,14,2,0,0,0,0,0,0,252,255,255,255,252,255,255,255,168,33,0,0,209,3,0,0,210,3,0,0,243,1,0,0,244,1,0,0,124,0,0,0,8,0,0,0,245,1,0,0,15,2,0,0,16,2,0,0,248,1,0,0,249,1,0,0,17,2,0,0,251,1,0,0,9,0,0,0,4,0,0,0,5,0,0,0,6,0,0,0,6,0,0,0,125,0,0,0,252,255,255,255,248,255,255,255,248,255,255,255,168,33,0,0,211,3,0,0,212,3,0,0,252,1,0,0,253,1,0,0,248,255,255,255,244,255,255,255,244,255,255,255,168,33,0,0,213,3,0,0,214,3,0,0,18,2,0,0,19,2,0,0,244,255,255,255,240,255,255,255,240,255,255,255,168,33,0,0,215,3,0,0,216,3,0,0,20,2,0,0,20,0,0,0,240,255,255,255,236,255,255,255,236,255,255,255,168,33,0,0,217,3,0,0,218,3,0,0,1,2,0,0,2,2,0,0,4,0,0,0,0,0,0,0,120,33,0,0,219,3,0,0,220,3,0,0,8,0,0,0,237,1,0,0,3,0,0,0,3,0,0,0,4,0,0,0,238,1,0,0,239,1,0,0,123,0,0,0,12,2,0,0,13,2,0,0,14,2,0,0,0,0,0,0,252,255,255,255,252,255,255,255,120,33,0,0,221,3,0,0,222,3,0,0,243,1,0,0,244,1,0,0,124,0,0,0,8,0,0,0,245,1,0,0,15,2,0,0,16,2,0,0,248,1,0,0,249,1,0,0,17,2,0,0,251,1,0,0,9,0,0,0,4,0,0,0,5,0,0,0,6,0,0,0,6,0,0,0,125,0,0,0,252,255,255,255,248,255,255,255,248,255,255,255,120,33,0,0,223,3,0,0,224,3,0,0,252,1,0,0,253,1,0,0,248,255,255,255,244,255,255,255,244,255,255,255,120,33,0,0,225,3,0,0,226,3,0,0,18,2,0,0,19,2,0,0,244,255,255,255,240,255,255,255,240,255,255,255,120,33,0,0,227,3,0,0,228,3,0,0,20,2,0,0,20,0,0,0,240,255,255,255,236,255,255,255,236,255,255,255,120,33,0,0,229,3,0,0,230,3,0,0,1,2,0,0,2,2,0,0,192,144,0,0,92,2,0,0,112,4,0,0,240,169,0,0,240,169,0,0,16,170,0,0,44,170,0,0,68,170,0,0,96,170,0,0,120,170,0,0,148,170,0,0,172,170,0,0,200,170,0,0,112,4,0,0,204,4,0,0,236,4,0,0,12,5,0,0,44,5,0,0,132,2,0,0,132,2,0,0,224,2,0,0,0,3,0,0,32,3,0,0,64,3,0,0,236,144,0,0,236,144,0,0,72,145,0,0,104,145,0,0,136,145,0,0,168,145,0,0,4,0,0,0,0,0,0,0,24,34,0,0,231,3,0,0,232,3,0,0,9,0,0,0,21,2,0,0,22,2,0,0,23,2,0,0,24,2,0,0,0,0,0,0,252,255,255,255,252,255,255,255,24,34,0,0,233,3,0,0,234,3,0,0,243,1,0,0,244,1,0,0,124,0,0,0,8,0,0,0,25,2,0,0,26,2,0,0,27,2,0,0,248,1,0,0,249,1,0,0,28,2,0,0,251,1,0,0,9,0,0,0,4,0,0,0,5,0,0,0,6,0,0,0,6,0,0,0,125,0,0,0,252,255,255,255,248,255,255,255,248,255,255,255,24,34,0,0,235,3,0,0,236,3,0,0,29,2,0,0,253,1,0,0,248,255,255,255,244,255,255,255,244,255,255,255,24,34,0,0,237,3,0,0,238,3,0,0,30,2,0,0,31,2,0,0,244,255,255,255,240,255,255,255,240,255,255,255,24,34,0,0,239,3,0,0,240,3,0,0,32,2,0,0,20,0,0,0,240,255,255,255,236,255,255,255,236,255,255,255,24,34,0,0,241,3,0,0,242,3,0,0,1,2,0,0,2,2,0,0,0,0,0,0,0,34,0,0,243,3,0,0,244,3,0,0,0,0,0,0,184,33,0,0,245,3,0,0,246,3,0,0,92,146,0,0,92,2,0,0,112,4,0,0,240,169,0,0,240,169,0,0,16,170,0,0,44,170,0,0,68,170,0,0,96,170,0,0,120,170,0,0,148,170,0,0,172,170,0,0,200,170,0,0,112,4,0,0,204,4,0,0,236,4,0,0,12,5,0,0,44,5,0,0,132,2,0,0,132,2,0,0,224,2,0,0,0,3,0,0,32,3,0,0,64,3,0,0,136,146,0,0,136,146,0,0,228,146,0,0,4,147,0,0,36,147,0,0,68,147,0,0,4,0,0,0,0,0,0,0,80,34,0,0,247,3,0,0,248,3,0,0,10,0,0,0,21,2,0,0,22,2,0,0,33,2,0,0,34,2,0,0,0,0,0,0,252,255,255,255,252,255,255,255,80,34,0,0,249,3,0,0,250,3,0,0,243,1,0,0,244,1,0,0,124,0,0,0,8,0,0,0,25,2,0,0,26,2,0,0,35,2,0,0,248,1,0,0,249,1,0,0,36,2,0,0,251,1,0,0,9,0,0,0,4,0,0,0,5,0,0,0,6,0,0,0,6,0,0,0,125,0,0,0,252,255,255,255,248,255,255,255,248,255,255,255,80,34,0,0,251,3,0,0,252,3,0,0,29,2,0,0,253,1,0,0,248,255,255,255,244,255,255,255,244,255,255,255,80,34,0,0,253,3,0,0,254,3,0,0,30,2,0,0,37,2,0,0,244,255,255,255,240,255,255,255,240,255,255,255,80,34,0,0,255,3,0,0,0,4,0,0,38,2,0,0,20,0,0,0,240,255,255,255,236,255,255,255,236,255,255,255,80,34,0,0,1,4,0,0,2,4,0,0,1,2,0,0,2,2,0,0,0,0,0,0,64,34,0,0,3,4,0,0,4,4,0,0,0,0,0,0,40,34,0,0,5,4,0,0,6,4,0,0,248,147,0,0,92,2,0,0,112,4,0,0,240,169,0,0,240,169,0,0,16,170,0,0,44,170,0,0,68,170,0,0,96,170,0,0,120,170,0,0,148,170,0,0,172,170,0,0,200,170,0,0,112,4,0,0,204,4,0,0,236,4,0,0,12,5,0,0,44,5,0,0,132,2,0,0,132,2,0,0,224,2,0,0,0,3,0,0,32,3,0,0,64,3,0,0,36,148,0,0,36,148,0,0,128,148,0,0,160,148,0,0,192,148,0,0,224,148,0,0,4,0,0,0,0,0,0,0,96,34,0,0,7,4,0,0,8,4,0,0,11,0,0,0,21,2,0,0,22,2,0,0,39,2,0,0,40,2,0,0,0,0,0,0,252,255,255,255,252,255,255,255,96,34,0,0,9,4,0,0,10,4,0,0,243,1,0,0,244,1,0,0,124,0,0,0,8,0,0,0,25,2,0,0,26,2,0,0,41,2,0,0,248,1,0,0,249,1,0,0,42,2,0,0,251,1,0,0,9,0,0,0,4,0,0,0,5,0,0,0,6,0,0,0,6,0,0,0,125,0,0,0,252,255,255,255,248,255,255,255,248,255,255,255,96,34,0,0,11,4,0,0,12,4,0,0,29,2,0,0,253,1,0,0,248,255,255,255,244,255,255,255,244,255,255,255,96,34,0,0,13,4,0,0,14,4,0,0,30,2,0,0,43,2,0,0,244,255,255,255,240,255,255,255,240,255,255,255,96,34,0,0,15,4,0,0,16,4,0,0,44,2,0,0,20,0,0,0,240,255,255,255,236,255,255,255,236,255,255,255,96,34,0,0,17,4,0,0,18,4,0,0,1,2,0,0,2,2,0,0,0,0,0,0,112,34,0,0,19,4,0,0,20,4,0,0,4,0,0,0,0,0,0,0,120,34,0,0,21,4,0,0,22,4,0,0,12,0,0,0,10,0,0,0,45,2,0,0,46,2,0,0,0,0,0,0,252,255,255,255,252,255,255,255,120,34,0,0,23,4,0,0,24,4,0,0,243,1,0,0,244,1,0,0,124,0,0,0,8,0,0,0,47,2,0,0,48,2,0,0,49,2,0,0,248,1,0,0,50,2,0,0,51,2,0,0,251,1,0,0,9,0,0,0,4,0,0,0,5,0,0,0,6,0,0,0,6,0,0,0,125,0,0,0,252,255,255,255,248,255,255,255,248,255,255,255,120,34,0,0,25,4,0,0,26,4,0,0,52,2,0,0,53,2,0,0,248,255,255,255,244,255,255,255,244,255,255,255,120,34,0,0,27,4,0,0,28,4,0,0,54,2,0,0,55,2,0,0,244,255,255,255,240,255,255,255,240,255,255,255,120,34,0,0,29,4,0,0,30,4,0,0,56,2,0,0,20,0,0,0,240,255,255,255,236,255,255,255,236,255,255,255,120,34,0,0,31,4,0,0,32,4,0,0,1,2,0,0,2,2,0,0,12,149,0,0,112,4,0,0,240,169,0,0,240,169,0,0,16,170,0,0,44,170,0,0,68,170,0,0,96,170,0,0,120,170,0,0,148,170,0,0,172,170,0,0,200,170,0,0,112,4,0,0,204,4,0,0,236,4,0,0,12,5,0,0,44,5,0,0,52,149,0,0,52,149,0,0,144,149,0,0,176,149,0,0,208,149,0,0,240,149,0,0,4,0,0,0,0,0,0,0,152,34,0,0,33,4,0,0,34,4,0,0,13,0,0,0,7,0,0,0,57,2,0,0,58,2,0,0,14,0,0,0,0,0,0,0,252,255,255,255,252,255,255,255,152,34,0,0,35,4,0,0,36,4,0,0,243,1,0,0,244,1,0,0,124,0,0,0,8,0,0,0,59,2,0,0,48,2,0,0,60,2,0,0,248,1,0,0,249,1,0,0,51,2,0,0,251,1,0,0,9,0,0,0,4,0,0,0,5,0,0,0,6,0,0,0,6,0,0,0,125,0,0,0,252,255,255,255,248,255,255,255,248,255,255,255,152,34,0,0,37,4,0,0,38,4,0,0,61,2,0,0,253,1,0,0,248,255,255,255,244,255,255,255,244,255,255,255,152,34,0,0,39,4,0,0,40,4,0,0,54,2,0,0,55,2,0,0,244,255,255,255,240,255,255,255,240,255,255,255,152,34,0,0,41,4,0,0,42,4,0,0,62,2,0,0,20,0,0,0,240,255,255,255,236,255,255,255,236,255,255,255,152,34,0,0,43,4,0,0,44,4,0,0,1,2,0,0,2,2,0,0,104,150,0,0,112,4,0,0,240,169,0,0,240,169,0,0,16,170,0,0,44,170,0,0,68,170,0,0,96,170,0,0,120,170,0,0,148,170,0,0,172,170,0,0,200,170,0,0,112,4,0,0,204,4,0,0,236,4,0,0,12,5,0,0,44,5,0,0,148,150,0,0,148,150,0,0,240,150,0,0,16,151,0,0,48,151,0,0,80,151,0,0,4,0,0,0,0,0,0,0,184,34,0,0,45,4,0,0,46,4,0,0,15,0,0,0,63,2,0,0,64,2,0,0,65,2,0,0,66,2,0,0,67,2,0,0,68,2,0,0,69,2,0,0,0,0,0,0,252,255,255,255,252,255,255,255,184,34,0,0,47,4,0,0,48,4,0,0,243,1,0,0,244,1,0,0,124,0,0,0,8,0,0,0,70,2,0,0,71,2,0,0,72,2,0,0,73,2,0,0,74,2,0,0,75,2,0,0,76,2,0,0,9,0,0,0,4,0,0,0,5,0,0,0,6,0,0,0,6,0,0,0,125,0,0,0,252,255,255,255,248,255,255,255,248,255,255,255,184,34,0,0,49,4,0,0,50,4,0,0,77,2,0,0,78,2,0,0,248,255,255,255,244,255,255,255,244,255,255,255,184,34,0,0,51,4,0,0,52,4,0,0,79,2,0,0,80,2,0,0,244,255,255,255,240,255,255,255,240,255,255,255,184,34,0,0,53,4,0,0,54,4,0,0,81,2,0,0,20,0,0,0,240,255,255,255,236,255,255,255,236,255,255,255,184,34,0,0,55,4,0,0,56,4,0,0,82,2,0,0,83,2,0,0,200,151,0,0,60,0,0,0,112,4,0,0,240,169,0,0,240,169,0,0,16,170,0,0,44,170,0,0,68,170,0,0,96,170,0,0,120,170,0,0,148,170,0,0,172,170,0,0,200,170,0,0,112,4,0,0,204,4,0,0,236,4,0,0,12,5,0,0,44,5,0,0,116,0,0,0,116,0,0,0,208,0,0,0,240,0,0,0,16,1,0,0,48,1,0,0,0,152,0,0,0,152,0,0,92,152,0,0,124,152,0,0,156,152,0,0,188,152,0,0,4,0,0,0,0,0,0,0,200,34,0,0,57,4,0,0,58,4,0,0,16,0,0,0,84,2,0,0,85,2,0,0,86,2,0,0,87,2,0,0,88,2,0,0,89,2,0,0,90,2,0,0,0,0,0,0,252,255,255,255,252,255,255,255,200,34,0,0,59,4,0,0,60,4,0,0,243,1,0,0,244,1,0,0,124,0,0,0,8,0,0,0,91,2,0,0,92,2,0,0,93,2,0,0,94,2,0,0,95,2,0,0,96,2,0,0,97,2,0,0,9,0,0,0,4,0,0,0,5,0,0,0,6,0,0,0,6,0,0,0,125,0,0,0,252,255,255,255,248,255,255,255,248,255,255,255,200,34,0,0,61,4,0,0,62,4,0,0,98,2,0,0,99,2,0,0,248,255,255,255,244,255,255,255,244,255,255,255,200,34,0,0,63,4,0,0,64,4,0,0,100,2,0,0,101,2,0,0,244,255,255,255,240,255,255,255,240,255,255,255,200,34,0,0,65,4,0,0,66,4,0,0,102,2,0,0,20,0,0,0,240,255,255,255,236,255,255,255,236,255,255,255,200,34,0,0,67,4,0,0,68,4,0,0,103,2,0,0,104,2,0,0,80,153,0,0,92,3,0,0,112,4,0,0,240,169,0,0,240,169,0,0,16,170,0,0,44,170,0,0,68,170,0,0,96,170,0,0,120,170,0,0,148,170,0,0,172,170,0,0,200,170,0,0,112,4,0,0,204,4,0,0,236,4,0,0,12,5,0,0,44,5,0,0,148,3,0,0,148,3,0,0,240,3,0,0,16,4,0,0,48,4,0,0,80,4,0,0,136,153,0,0,136,153,0,0,228,153,0,0,4,154,0,0,36,154,0,0,68,154,0,0,60,0,0,0,112,4,0,0,240,169,0,0,240,169,0,0,16,170,0,0,44,170,0,0,68,170,0,0,96,170,0,0,120,170,0,0,148,170,0,0,172,170,0,0,200,170,0,0,112,4,0,0,204,4,0,0,236,4,0,0,12,5,0,0,44,5,0,0,116,0,0,0,116,0,0,0,208,0,0,0,240,0,0,0,16,1,0,0,48,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,0,0,0,0,0,0,0,0,35,0,0,81,4,0,0,82,4,0,0,18,0,0,0,105,2,0,0,106,2,0,0,107,2,0,0,0,0,0,0,252,255,255,255,252,255,255,255,0,35,0,0,83,4,0,0,84,4,0,0,243,1,0,0,244,1,0,0,124,0,0,0,8,0,0,0,108,2,0,0,48,2,0,0,109,2,0,0,248,1,0,0,249,1,0,0,51,2,0,0,251,1,0,0,9,0,0,0,4,0,0,0,5,0,0,0,6,0,0,0,6,0,0,0,125,0,0,0,252,255,255,255,248,255,255,255,248,255,255,255,0,35,0,0,85,4,0,0,86,4,0,0,110,2,0,0,253,1,0,0,248,255,255,255,244,255,255,255,244,255,255,255,0,35,0,0,87,4,0,0,88,4,0,0,54,2,0,0,55,2,0,0,244,255,255,255,240,255,255,255,240,255,255,255,0,35,0,0,89,4,0,0,90,4,0,0,111,2,0,0,20,0,0,0,240,255,255,255,236,255,255,255,236,255,255,255,0,35,0,0,91,4,0,0,92,4,0,0,1,2,0,0,2,2,0,0,212,255,255,255,208,255,255,255,208,255,255,255,0,35,0,0,93,4,0,0,94,4,0,0,112,2,0,0,113,2,0,0,0,0,0,0,40,35,0,0,110,3,0,0,95,4,0,0,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,56,35,0,0,96,4,0,0,97,4,0,0,114,2,0,0,20,0,0,0,76,1,0,0,112,4,0,0,240,169,0,0,240,169,0,0,16,170,0,0,44,170,0,0,68,170,0,0,96,170,0,0,120,170,0,0,148,170,0,0,172,170,0,0,200,170,0,0,112,4,0,0,204,4,0,0,236,4,0,0,12,5,0,0,44,5,0,0,132,1,0,0,132,1,0,0,224,1,0,0,0,2,0,0,32,2,0,0,64,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,104,35,0,0,110,4,0,0,111,4,0,0,115,2,0,0,20,0,0,0,92,2,0,0,112,4,0,0,240,169,0,0,240,169,0,0,16,170,0,0,44,170,0,0,68,170,0,0,96,170,0,0,120,170,0,0,148,170,0,0,172,170,0,0,200,170,0,0,112,4,0,0,204,4,0,0,236,4,0,0,12,5,0,0,44,5,0,0,132,2,0,0,132,2,0,0,224,2,0,0,0,3,0,0,32,3,0,0,64,3,0,0,4,0,0,0,0,0,0,0,152,35,0,0,124,4,0,0,125,4,0,0,19,0,0,0,119,2,0,0,120,2,0,0,121,2,0,0,122,2,0,0,123,2,0,0,124,2,0,0,0,0,0,0,252,255,255,255,252,255,255,255,152,35,0,0,126,4,0,0,127,4,0,0,243,1,0,0,244,1,0,0,124,0,0,0,8,0,0,0,125,2,0,0,48,2,0,0,126,2,0,0,127,2,0,0,128,2,0,0,51,2,0,0,129,2,0,0,9,0,0,0,4,0,0,0,5,0,0,0,6,0,0,0,6,0,0,0,125,0,0,0,252,255,255,255,248,255,255,255,248,255,255,255,152,35,0,0,128,4,0,0,129,4,0,0,130,2,0,0,131,2,0,0,248,255,255,255,244,255,255,255,244,255,255,255,152,35,0,0,130,4,0,0,131,4,0,0,54,2,0,0,55,2,0,0,244,255,255,255,240,255,255,255,240,255,255,255,152,35,0,0,132,4,0,0,133,4,0,0,132,2,0,0,20,0,0,0,240,255,255,255,236,255,255,255,236,255,255,255,152,35,0,0,134,4,0,0,135,4,0,0,133,2,0,0,134,2,0,0,212,255,255,255,208,255,255,255,208,255,255,255,152,35,0,0,136,4,0,0,137,4,0,0,135,2,0,0,136,2,0,0,112,157,0,0,112,4,0,0,240,169,0,0,240,169,0,0,16,170,0,0,44,170,0,0,68,170,0,0,96,170,0,0,120,170,0,0,148,170,0,0,172,170,0,0,200,170,0,0,112,4,0,0,204,4,0,0,236,4,0,0,12,5,0,0,44,5,0,0,8,159,0,0,36,159,0,0,164,157,0,0,164,157,0,0,0,158,0,0,32,158,0,0,64,158,0,0,96,158,0,0,128,158,0,0,212,255,255,255,0,0,0,0,0,0,0,0,16,23,0,0,138,4,0,0,139,4,0,0,137,2,0,0,136,2,0,0,44,0,0,0,44,0,0,0,16,23,0,0,140,4,0,0,141,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,192,35,0,0,142,4,0,0,143,4,0,0,243,1,0,0,244,1,0,0,124,0,0,0,8,0,0,0,138,2,0,0,139,2,0,0,140,2,0,0,141,2,0,0,249,1,0,0,142,2,0,0,143,2,0,0,9,0,0,0,4,0,0,0,5,0,0,0,6,0,0,0,6,0,0,0,125,0,0,0,252,255,255,255,252,255,255,255,252,255,255,255,192,35,0,0,144,4,0,0,145,4,0,0,144,2,0,0,253,1,0,0,248,255,255,255,248,255,255,255,248,255,255,255,192,35,0,0,146,4,0,0,147,4,0,0,145,2,0,0,146,2,0,0,244,255,255,255,244,255,255,255,244,255,255,255,192,35,0,0,148,4,0,0,149,4,0,0,147,2,0,0,20,0,0,0,240,255,255,255,240,255,255,255,240,255,255,255,192,35,0,0,150,4,0,0,151,4,0,0,148,2,0,0,149,2],"i8",ALLOC_NONE,Runtime.GLOBAL_BASE+30720);allocate([60,159,0,0,112,4,0,0,240,169,0,0,240,169,0,0,16,170,0,0,44,170,0,0,68,170,0,0,96,170,0,0,120,170,0,0,148,170,0,0,172,170,0,0,200,170,0,0,112,4,0,0,204,4,0,0,236,4,0,0,12,5,0,0,44,5,0,0,60,159,0,0,152,159,0,0,184,159,0,0,216,159,0,0,248,159,0,0,0,0,0,0,0,0,0,0,0,0,0,0,224,35,0,0,152,4,0,0,153,4,0,0,150,2,0,0,113,2,0,0,151,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,208,35,0,0,154,4,0,0,155,4,0,0,243,1,0,0,244,1,0,0,124,0,0,0,8,0,0,0,152,2,0,0,48,2,0,0,49,2,0,0,153,2,0,0,249,1,0,0,51,2,0,0,154,2,0,0,9,0,0,0,4,0,0,0,5,0,0,0,6,0,0,0,6,0,0,0,125,0,0,0,252,255,255,255,252,255,255,255,252,255,255,255,208,35,0,0,156,4,0,0,157,4,0,0,155,2,0,0,253,1,0,0,248,255,255,255,248,255,255,255,248,255,255,255,208,35,0,0,158,4,0,0,159,4,0,0,54,2,0,0,55,2,0,0,244,255,255,255,244,255,255,255,244,255,255,255,208,35,0,0,160,4,0,0,161,4,0,0,56,2,0,0,20,0,0,0,240,255,255,255,240,255,255,255,240,255,255,255,208,35,0,0,162,4,0,0,163,4,0,0,156,2,0,0,157,2,0,0,92,3,0,0,112,4,0,0,240,169,0,0,240,169,0,0,16,170,0,0,44,170,0,0,68,170,0,0,96,170,0,0,120,170,0,0,148,170,0,0,172,170,0,0,200,170,0,0,112,4,0,0,204,4,0,0,236,4,0,0,12,5,0,0,44,5,0,0,148,3,0,0,148,3,0,0,240,3,0,0,16,4,0,0,48,4,0,0,80,4,0,0,4,0,0,0,0,0,0,0,16,36,0,0,176,4,0,0,177,4,0,0,21,0,0,0,11,0,0,0,158,2,0,0,159,2,0,0,0,0,0,0,252,255,255,255,252,255,255,255,16,36,0,0,178,4,0,0,179,4,0,0,243,1,0,0,244,1,0,0,124,0,0,0,8,0,0,0,160,2,0,0,48,2,0,0,49,2,0,0,248,1,0,0,161,2,0,0,51,2,0,0,251,1,0,0,12,0,0,0,4,0,0,0,5,0,0,0,6,0,0,0,6,0,0,0,125,0,0,0,252,255,255,255,248,255,255,255,248,255,255,255,16,36,0,0,180,4,0,0,181,4,0,0,162,2,0,0,163,2,0,0,248,255,255,255,244,255,255,255,244,255,255,255,16,36,0,0,182,4,0,0,183,4,0,0,54,2,0,0,55,2,0,0,244,255,255,255,240,255,255,255,240,255,255,255,16,36,0,0,184,4,0,0,185,4,0,0,56,2,0,0,20,0,0,0,240,255,255,255,236,255,255,255,236,255,255,255,16,36,0,0,186,4,0,0,187,4,0,0,1,2,0,0,2,2,0,0,200,161,0,0,112,4,0,0,240,169,0,0,240,169,0,0,16,170,0,0,44,170,0,0,68,170,0,0,96,170,0,0,120,170,0,0,148,170,0,0,172,170,0,0,200,170,0,0,112,4,0,0,204,4,0,0,236,4,0,0,12,5,0,0,44,5,0,0,240,161,0,0,240,161,0,0,76,162,0,0,108,162,0,0,140,162,0,0,172,162,0,0,4,0,0,0,0,0,0,0,48,36,0,0,188,4,0,0,189,4,0,0,22,0,0,0,164,2,0,0,165,2,0,0,166,2,0,0,0,0,0,0,252,255,255,255,252,255,255,255,48,36,0,0,190,4,0,0,191,4,0,0,167,2,0,0,20,0,0,0,252,255,255,255,248,255,255,255,248,255,255,255,48,36,0,0,192,4,0,0,193,4,0,0,168,2,0,0,113,2,0,0,248,255,255,255,244,255,255,255,244,255,255,255,48,36,0,0,194,4,0,0,195,4,0,0,169,2,0,0,170,2,0,0,0,0,0,0,96,36,0,0,196,4,0,0,197,4,0,0,23,0,0,0,13,0,0,0,14,0,0,0,15,0,0,0,24,0,0,0,1,0,0,0,25,0,0,0,126,0,0,0,1,0,0,0,26,0,0,0,27,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,2,0,0,0,3,0,0,0,1,0,0,0,1,0,0,0,4,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,2,0,0,0,1,0,0,0,5,0,0,0,6,0,0,0,7,0,0,0,8,0,0,0,9,0,0,0,1,0,0,0,10,0,0,0,11,0,0,0,12,0,0,0,13,0,0,0,14,0,0,0,15,0,0,0,16,0,0,0,17,0,0,0,18,0,0,0,18,0,0,0,18,0,0,0,18,0,0,0,18,0,0,0,18,0,0,0,18,0,0,0,18,0,0,0,18,0,0,0,18,0,0,0,19,0,0,0,1,0,0,0,20,0,0,0,21,0,0,0,22,0,0,0,1,0,0,0,1,0,0,0,23,0,0,0,23,0,0,0,23,0,0,0,23,0,0,0,23,0,0,0,23,0,0,0,23,0,0,0,23,0,0,0,23,0,0,0,23,0,0,0,23,0,0,0,23,0,0,0,23,0,0,0,23,0,0,0,23,0,0,0,23,0,0,0,23,0,0,0,23,0,0,0,23,0,0,0,23,0,0,0,23,0,0,0,23,0,0,0,23,0,0,0,23,0,0,0,23,0,0,0,23,0,0,0,24,0,0,0,25,0,0,0,26,0,0,0,1,0,0,0,27,0,0,0,1,0,0,0,28,0,0,0,29,0,0,0,30,0,0,0,31,0,0,0,32,0,0,0,33,0,0,0,34,0,0,0,35,0,0,0,36,0,0,0,23,0,0,0,23,0,0,0,37,0,0,0,38,0,0,0,39,0,0,0,40,0,0,0,41,0,0,0,23,0,0,0,42,0,0,0,43,0,0,0,44,0,0,0,23,0,0,0,23,0,0,0,23,0,0,0,23,0,0,0,45,0,0,0,23,0,0,0,46,0,0,0,47,0,0,0,48,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,0,0,0,2,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,3,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,4,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,5,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,5,0,0,0,5,0,0,0,5,0,0,0,5,0,0,0,5,0,0,0,5,0,0,0,5,0,0,0,5,0,0,0,5,0,0,0,5,0,0,0,5,0,0,0,5,0,0,0,5,0,0,0,5,0,0,0,5,0,0,0,5,0,0,0,5,0,0,0,5,0,0,0,5,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,112,4,0,0,240,169,0,0,240,169,0,0,16,170,0,0,44,170,0,0,68,170,0,0,96,170,0,0,120,170,0,0,148,170,0,0,172,170,0,0,200,170,0,0,112,4,0,0,204,4,0,0,236,4,0,0,12,5,0,0,44,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,40,32,0,0,208,4,0,0,209,4,0,0,171,2,0,0,244,1,0,0,252,255,255,255,0,0,0,0,0,0,0,0,64,32,0,0,210,4,0,0,211,4,0,0,172,2,0,0,170,2,0,0,4,0,0,0,4,0,0,0,64,32,0,0,212,4,0,0,213,4,0,0,248,255,255,255,0,0,0,0,0,0,0,0,144,6,0,0,214,4,0,0,215,4,0,0,173,2,0,0,174,2,0,0,8,0,0,0,8,0,0,0,144,6,0,0,216,4,0,0,217,4,0,0,244,255,255,255,0,0,0,0,0,0,0,0,184,6,0,0,218,4,0,0,219,4,0,0,23,0,0,0,20,0,0,0,12,0,0,0,12,0,0,0,184,6,0,0,220,4,0,0,221,4,0,0,240,255,255,255,0,0,0,0,0,0,0,0,104,32,0,0,222,4,0,0,223,4,0,0,175,2,0,0,176,2,0,0,16,0,0,0,16,0,0,0,104,32,0,0,224,4,0,0,225,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,176,36,0,0,226,4,0,0,227,4,0,0,177,2,0,0,178,2,0,0,228,4,0,0,179,2,0,0,252,255,255,255,252,255,255,255,252,255,255,255,176,36,0,0,229,4,0,0,230,4,0,0,180,2,0,0,20,0,0,0,224,170,0,0,192,172,0,0,192,172,0,0,224,172,0,0,252,172,0,0,224,170,0,0,8,171,0,0,80,5,0,0,120,177,0,0,120,177,0,0,152,177,0,0,180,177,0,0,204,177,0,0,232,177,0,0,80,5,0,0,148,5,0,0,180,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,248,36,0,0,231,4,0,0,232,4,0,0,181,2,0,0,182,2,0,0,8,0,0,0,233,4,0,0,183,2,0,0,184,2,0,0,185,2,0,0,186,2,0,0,187,2,0,0,16,0,0,0,188,2,0,0,252,255,255,255,252,255,255,255,252,255,255,255,248,36,0,0,234,4,0,0,235,4,0,0,189,2,0,0,190,2,0,0,248,255,255,255,248,255,255,255,248,255,255,255,248,36,0,0,236,4,0,0,237,4,0,0,191,2,0,0,20,0,0,0,108,171,0,0,80,5,0,0,120,177,0,0,120,177,0,0,152,177,0,0,180,177,0,0,204,177,0,0,232,177,0,0,80,5,0,0,148,5,0,0,180,5,0,0,108,171,0,0,176,171,0,0,208,171,0,0,12,0,0,0,0,0,0,0,8,37,0,0,244,4,0,0,245,4,0,0,9,0,0,0,10,0,0,0,11,0,0,0,12,0,0,0,17,0,0,0,13,0,0,0,200,2,0,0,201,2,0,0,202,2,0,0,0,0,0,0,244,255,255,255,244,255,255,255,8,37,0,0,246,4,0,0,247,4,0,0,203,2,0,0,204,2,0,0,252,255,255,255,240,255,255,255,240,255,255,255,8,37,0,0,248,4,0,0,249,4,0,0,205,2,0,0,20,0,0,0,36,172,0,0,192,172,0,0,192,172,0,0,224,172,0,0,252,172,0,0,96,172,0,0,96,172,0,0,128,172,0,0,0,0,0,0,0,0,0,0,0,0,0,0,144,6,0,0,214,4,0,0,215,4,0,0,173,2,0,0,174,2,0,0,252,255,255,255,0,0,0,0,0,0,0,0,184,6,0,0,218,4,0,0,219,4,0,0,23,0,0,0,20,0,0,0,4,0,0,0,4,0,0,0,184,6,0,0,220,4,0,0,221,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,48,37,0,0,250,4,0,0,251,4,0,0,206,2,0,0,207,2,0,0,208,2,0,0,209,2,0,0,210,2,0,0,211,2,0,0,212,2,0,0,213,2,0,0,214,2,0,0,215,2,0,0,216,2,0,0,217,2,0,0,252,255,255,255,252,255,255,255,252,255,255,255,48,37,0,0,252,4,0,0,253,4,0,0,218,2,0,0,219,2,0,0,248,255,255,255,248,255,255,255,248,255,255,255,48,37,0,0,254,4,0,0,255,4,0,0,220,2,0,0,221,2,0,0,244,255,255,255,244,255,255,255,244,255,255,255,48,37,0,0,0,5,0,0,1,5,0,0,222,2,0,0,223,2,0,0,240,255,255,255,240,255,255,255,240,255,255,255,48,37,0,0,2,5,0,0,3,5,0,0,224,2,0,0,20,0,0,0,236,255,255,255,236,255,255,255,236,255,255,255,48,37,0,0,4,5,0,0,5,5,0,0,225,2,0,0,226,2,0,0,232,255,255,255,232,255,255,255,232,255,255,255,48,37,0,0,6,5,0,0,7,5,0,0,227,2,0,0,228,2,0,0,228,255,255,255,228,255,255,255,228,255,255,255,48,37,0,0,8,5,0,0,9,5,0,0,229,2,0,0,230,2,0,0,20,173,0,0,160,174,0,0,160,174,0,0,192,174,0,0,220,174,0,0,244,174,0,0,16,175,0,0,40,175,0,0,68,175,0,0,92,175,0,0,120,175,0,0,144,175,0,0,172,175,0,0,196,175,0,0,224,175,0,0,248,175,0,0,20,176,0,0,20,173,0,0,92,173,0,0,124,173,0,0,156,173,0,0,188,173,0,0,220,173,0,0,252,173,0,0,28,174,0,0,0,0,0,0,0,0,0,0,0,0,0,0,104,32,0,0,222,4,0,0,223,4,0,0,175,2,0,0,176,2,0,0,252,255,255,255,0,0,0,0,0,0,0,0,216,29,0,0,10,5,0,0,11,5,0,0,231,2,0,0,219,2,0,0,4,0,0,0,4,0,0,0,216,29,0,0,12,5,0,0,13,5,0,0,248,255,255,255,0,0,0,0,0,0,0,0,40,17,0,0,14,5,0,0,15,5,0,0,232,2,0,0,221,2,0,0,8,0,0,0,8,0,0,0,40,17,0,0,16,5,0,0,17,5,0,0,244,255,255,255,0,0,0,0,0,0,0,0,240,16,0,0,18,5,0,0,19,5,0,0,233,2,0,0,223,2,0,0,12,0,0,0,12,0,0,0,240,16,0,0,20,5,0,0,21,5,0,0,240,255,255,255,0,0,0,0,0,0,0,0,184,6,0,0,218,4,0,0,219,4,0,0,23,0,0,0,20,0,0,0,16,0,0,0,16,0,0,0,184,6,0,0,220,4,0,0,221,4,0,0,236,255,255,255,0,0,0,0,0,0,0,0,40,32,0,0,208,4,0,0,209,4,0,0,171,2,0,0,244,1,0,0,20,0,0,0,20,0,0,0,40,32,0,0,22,5,0,0,23,5,0,0,232,255,255,255,0,0,0,0,0,0,0,0,144,6,0,0,214,4,0,0,215,4,0,0,173,2,0,0,174,2,0,0,24,0,0,0,24,0,0,0,144,6,0,0,216,4,0,0,217,4,0,0,228,255,255,255,0,0,0,0,0,0,0,0,64,32,0,0,210,4,0,0,211,4,0,0,172,2,0,0,170,2,0,0,28,0,0,0,28,0,0,0,64,32,0,0,212,4,0,0,213,4,0,0,0,0,0,0,128,37,0,0,24,5,0,0,25,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,152,37,0,0,26,5,0,0,27,5,0,0,234,2,0,0,235,2,0,0,5,0,0,0,9,0,0,0,236,2,0,0,237,2,0,0,238,2,0,0,239,2,0,0,252,255,255,255,252,255,255,255,252,255,255,255,152,37,0,0,28,5,0,0,29,5,0,0,240,2,0,0,241,2,0,0,248,255,255,255,248,255,255,255,248,255,255,255,152,37,0,0,30,5,0,0,31,5,0,0,242,2,0,0,20,0,0,0,60,176,0,0,120,177,0,0,120,177,0,0,152,177,0,0,180,177,0,0,204,177,0,0,232,177,0,0,60,176,0,0,116,176,0,0,148,176,0,0,0,0,0,0,0,0,0,0,0,0,0,0,192,37,0,0,32,5,0,0,33,5,0,0,243,2,0,0,244,2,0,0,6,0,0,0,245,2,0,0,246,2,0,0,247,2,0,0,248,2,0,0,252,255,255,255,252,255,255,255,252,255,255,255,192,37,0,0,34,5,0,0,35,5,0,0,249,2,0,0,250,2,0,0,248,255,255,255,248,255,255,255,248,255,255,255,192,37,0,0,36,5,0,0,37,5,0,0,251,2,0,0,20,0,0,0,220,176,0,0,120,177,0,0,120,177,0,0,152,177,0,0,180,177,0,0,204,177,0,0,232,177,0,0,220,176,0,0,16,177,0,0,48,177,0,0,0,0,0,0,0,0,0,0,0,0,0,0,64,32,0,0,210,4,0,0,211,4,0,0,172,2,0,0,170,2,0,0,252,255,255,255,0,0,0,0,0,0,0,0,144,6,0,0,214,4,0,0,215,4,0,0,173,2,0,0,174,2,0,0,4,0,0,0,4,0,0,0,144,6,0,0,216,4,0,0,217,4,0,0,248,255,255,255,0,0,0,0,0,0,0,0,184,6,0,0,218,4,0,0,219,4,0,0,23,0,0,0,20,0,0,0,8,0,0,0,8,0,0,0,184,6,0,0,220,4,0,0,221,4,0,0,4,0,0,0,0,0,0,0,232,37,0,0,38,5,0,0,39,5,0,0,252,2,0,0,253,2,0,0,254,2,0,0,255,2,0,0,0,3,0,0,1,3,0,0,2,3,0,0,3,3,0,0,4,3,0,0,5,3,0,0,6,3,0,0,7,3,0,0,8,3,0,0,9,3,0,0,10,3,0,0,11,3,0,0,12,3,0,0,13,3,0,0,14,3,0,0,0,0,0,0,252,255,255,255,252,255,255,255,232,37,0,0,40,5,0,0,41,5,0,0,15,3,0,0,221,2,0,0,252,255,255,255,248,255,255,255,248,255,255,255,232,37,0,0,42,5,0,0,43,5,0,0,16,3,0,0,223,2,0,0,248,255,255,255,244,255,255,255,244,255,255,255,232,37,0,0,44,5,0,0,45,5,0,0,17,3,0,0,18,3,0,0,244,255,255,255,240,255,255,255,240,255,255,255,232,37,0,0,46,5,0,0,47,5,0,0,19,3,0,0,20,3,0,0,240,255,255,255,236,255,255,255,236,255,255,255,232,37,0,0,48,5,0,0,49,5,0,0,21,3,0,0,22,3,0,0,236,255,255,255,232,255,255,255,232,255,255,255,232,37,0,0,50,5,0,0,51,5,0,0,23,3,0,0,24,3,0,0,232,255,255,255,228,255,255,255,228,255,255,255,232,37,0,0,52,5,0,0,53,5,0,0,25,3,0,0,26,3,0,0,228,255,255,255,224,255,255,255,224,255,255,255,232,37,0,0,54,5,0,0,55,5,0,0,27,3,0,0,28,3,0,0,224,255,255,255,220,255,255,255,220,255,255,255,232,37,0,0,56,5,0,0,57,5,0,0,29,3,0,0,30,3,0,0,220,255,255,255,216,255,255,255,216,255,255,255,232,37,0,0,58,5,0,0,59,5,0,0,31,3,0,0,32,3,0,0,216,255,255,255,212,255,255,255,212,255,255,255,232,37,0,0,60,5,0,0,61,5,0,0,33,3,0,0,34,3,0,0,212,255,255,255,208,255,255,255,208,255,255,255,232,37,0,0,62,5,0,0,63,5,0,0,35,3,0,0,36,3,0,0,208,255,255,255,204,255,255,255,204,255,255,255,232,37,0,0,64,5,0,0,65,5,0,0,37,3,0,0,38,3,0,0,204,255,255,255,200,255,255,255,200,255,255,255,232,37,0,0,66,5,0,0,67,5,0,0,39,3,0,0,170,2,0,0,200,255,255,255,196,255,255,255,196,255,255,255,232,37,0,0,68,5,0,0,69,5,0,0,40,3,0,0,20,0,0,0,196,255,255,255,192,255,255,255,192,255,255,255,232,37,0,0,70,5,0,0,71,5,0,0,41,3,0,0,42,3,0,0,252,177,0,0,40,181,0,0,40,181,0,0,72,181,0,0,100,181,0,0,124,181,0,0,152,181,0,0,176,181,0,0,204,181,0,0,228,181,0,0,0,182,0,0,24,182,0,0,52,182,0,0,76,182,0,0,104,182,0,0,128,182,0,0,156,182,0,0,180,182,0,0,208,182,0,0,232,182,0,0,4,183,0,0,28,183,0,0,56,183,0,0,80,183,0,0,108,183,0,0,132,183,0,0,160,183,0,0,184,183,0,0,212,183,0,0,236,183,0,0,8,184,0,0,32,184,0,0,60,184,0,0,96,178,0,0,96,178,0,0,128,178,0,0,160,178,0,0,192,178,0,0,224,178,0,0,0,179,0,0,32,179,0,0,64,179,0,0,96,179,0,0,128,179,0,0,160,179,0,0,192,179,0,0,224,179,0,0,0,180,0,0,32,180,0,0,64,180,0,0,0,0,0,0,0,0,0,0,0,0,0,0,40,17,0,0,14,5,0,0,15,5,0,0,232,2,0,0,221,2,0,0,252,255,255,255,0,0,0,0,0,0,0,0,240,16,0,0,18,5,0,0,19,5,0,0,233,2,0,0,223,2,0,0,4,0,0,0,4,0,0,0,240,16,0,0,20,5,0,0,21,5,0,0,248,255,255,255,0,0,0,0,0,0,0,0,32,26,0,0,72,5,0,0,73,5,0,0,43,3,0,0,18,3,0,0,8,0,0,0,8,0,0,0,32,26,0,0,74,5,0,0,75,5,0,0,244,255,255,255,0,0,0,0,0,0,0,0,232,25,0,0,76,5,0,0,77,5,0,0,44,3,0,0,20,3,0,0,12,0,0,0,12,0,0,0,232,25,0,0,78,5,0,0,79,5,0,0,240,255,255,255,0,0,0,0,0,0,0,0,176,25,0,0,80,5,0,0,81,5,0,0,45,3,0,0,22,3,0,0,16,0,0,0,16,0,0,0,176,25,0,0,82,5,0,0,83,5,0,0,236,255,255,255,0,0,0,0,0,0,0,0,120,25,0,0,84,5,0,0,85,5,0,0,46,3,0,0,24,3,0,0,20,0,0,0,20,0,0,0,120,25,0,0,86,5,0,0,87,5,0,0,232,255,255,255,0,0,0,0,0,0,0,0,64,25,0,0,88,5,0,0,89,5,0,0,47,3,0,0,26,3,0,0,24,0,0,0,24,0,0,0,64,25,0,0,90,5,0,0,91,5,0,0,228,255,255,255,0,0,0,0,0,0,0,0,216,15,0,0,92,5,0,0,93,5,0,0,48,3,0,0,28,3,0,0,28,0,0,0,28,0,0,0,216,15,0,0,94,5,0,0,95,5,0,0,224,255,255,255,0,0,0,0,0,0,0,0,168,27,0,0,96,5,0,0,97,5,0,0,49,3,0,0,30,3,0,0,32,0,0,0,32,0,0,0,168,27,0,0,98,5,0,0,99,5,0,0,220,255,255,255,0,0,0,0,0,0,0,0,160,22,0,0,100,5,0,0,101,5,0,0,50,3,0,0,32,3,0,0,36,0,0,0,36,0,0,0,160,22,0,0,102,5,0,0,103,5,0,0,216,255,255,255,0,0,0,0,0,0,0,0,216,8,0,0,104,5,0,0,105,5,0,0,51,3,0,0,34,3,0,0,40,0,0,0,40,0,0,0,216,8,0,0,106,5,0,0,107,5,0,0,212,255,255,255,0,0,0,0,0,0,0,0,160,8,0,0,108,5,0,0,109,5,0,0,52,3,0,0,36,3,0,0,44,0,0,0,44,0,0,0,160,8,0,0,110,5,0,0,111,5,0,0,208,255,255,255,0,0,0,0,0,0,0,0,104,8,0,0,112,5,0,0,113,5,0,0,53,3,0,0,38,3,0,0,48,0,0,0,48,0,0,0,104,8,0,0,114,5,0,0,115,5,0,0,204,255,255,255,0,0,0,0,0,0,0,0,64,32,0,0,210,4,0,0,211,4,0,0,172,2,0,0,170,2,0,0,52,0,0,0,52,0,0,0,64,32,0,0,212,4,0,0,213,4,0,0,200,255,255,255,0,0,0,0,0,0,0,0,184,6,0,0,218,4,0,0,219,4,0,0,23,0,0,0,20,0,0,0,56,0,0,0,56,0,0,0,184,6,0,0,220,4,0,0,221,4,0,0,196,255,255,255,0,0,0,0,0,0,0,0,216,5,0,0,116,5,0,0,117,5,0,0,54,3,0,0,42,3,0,0,60,0,0,0,60,0,0,0,216,5,0,0,118,5,0,0,119,5,0,0,48,40,0,0,152,38,0,0,136,38,0,0,152,38,0,0,136,38,0,0,152,38,0,0,16,40,0,0,136,38,0,0,152,38,0,0,152,38,0,0,136,38,0,0,152,38,0,0,176,38,0,0,136,38,0,0,152,38,0,0,152,38,0,0,184,38,0,0,136,38,0,0,152,38,0,0,152,38,0,0,184,38,0,0,192,38,0,0,136,38,0,0,152,38,0,0,48,40,0,0,224,39,0,0,152,38,0,0,176,38,0,0,152,38,0,0,176,38,0,0,152,38,0,0,24,40,0,0,24,40,0,0,2,0,0,0,0,0,0,0,104,39,0,0,120,5,0,0,121,5,0,0,18,0,0,0,0,0,0,0,0,0,0,0,200,39,0,0,122,5,0,0,123,5,0,0,124,5,0,0,125,5,0,0,28,0,0,0,0,0,0,0,64,40,0,0,122,5,0,0,126,5,0,0,124,5,0,0,125,5,0,0,29,0,0,0,0,0,0,0,152,39,0,0,122,5,0,0,127,5,0,0,124,5,0,0,125,5,0,0,30,0,0,0,2,0,0,0,1,0,0,0,7,0,0,0,0,0,0,0,80,40,0,0,122,5,0,0,128,5,0,0,124,5,0,0,125,5,0,0,30,0,0,0,3,0,0,0,2,0,0,0,8,0,0,0,0,0,0,0,96,40,0,0,122,5,0,0,129,5,0,0,124,5,0,0,125,5,0,0,30,0,0,0,4,0,0,0,3,0,0,0,9,0,0,0,0,0,0,0,0,0,0,0,238,64,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,192,3,0,0,192,4,0,0,192,5,0,0,192,6,0,0,192,7,0,0,192,8,0,0,192,9,0,0,192,10,0,0,192,11,0,0,192,12,0,0,192,13,0,0,192,14,0,0,192,15,0,0,192,16,0,0,192,17,0,0,192,18,0,0,192,19,0,0,192,20,0,0,192,21,0,0,192,22,0,0,192,23,0,0,192,24,0,0,192,25,0,0,192,26,0,0,192,27,0,0,192,28,0,0,192,29,0,0,192,30,0,0,192,31,0,0,192,0,0,0,179,1,0,0,195,2,0,0,195,3,0,0,195,4,0,0,195,5,0,0,195,6,0,0,195,7,0,0,195,8,0,0,195,9,0,0,195,10,0,0,195,11,0,0,195,12,0,0,195,13,0,0,211,14,0,0,195,15,0,0,195,0,0,12,187,1,0,12,195,2,0,12,195,3,0,12,195,4,0,12,211,80,187,0,0,192,187,0,0,48,188,0,0,48,188,0,0,176,235,0,0,160,196,0,0,160,190,0,0,0,0,0,0,10,0,0,0,100,0,0,0,232,3,0,0,16,39,0,0,160,134,1,0,64,66,15,0,128,150,152,0,0,225,245,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,31,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,0,0,0,0,0,0,0,0,0,0,0,19,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,32,0,0,0,33,0,0,0,148,81,1,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,9,0,0,0,0,0,0,0,0,0,0,0,19,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,34,0,0,0,0,0,0,0,33,0,0,0,140,77,1,0,0,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,0,0,0,0,0,0,0,0,0,0,0,19,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,35,0,0,0,33,0,0,0,132,73,1,0,0,4,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,10,255,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,2,0,0,0,3,0,0,0,4,0,0,0,5,0,0,0,6,0,0,0,7,0,0,0,8,0,0,0,9,0,0,0,10,0,0,0,11,0,0,0,12,0,0,0,13,0,0,0,14,0,0,0,15,0,0,0,16,0,0,0,17,0,0,0,18,0,0,0,19,0,0,0,20,0,0,0,21,0,0,0,22,0,0,0,23,0,0,0,24,0,0,0,25,0,0,0,26,0,0,0,27,0,0,0,28,0,0,0,29,0,0,0,30,0,0,0,31,0,0,0,32,0,0,0,33,0,0,0,34,0,0,0,35,0,0,0,36,0,0,0,37,0,0,0,38,0,0,0,39,0,0,0,40,0,0,0,41,0,0,0,42,0,0,0,43,0,0,0,44,0,0,0,45,0,0,0,46,0,0,0,47,0,0,0,48,0,0,0,49,0,0,0,50,0,0,0,51,0,0,0,52,0,0,0,53,0,0,0,54,0,0,0,55,0,0,0,56,0,0,0,57,0,0,0,58,0,0,0,59,0,0,0,60,0,0,0,61,0,0,0,62,0,0,0,63,0,0,0,64,0,0,0,65,0,0,0,66,0,0,0,67,0,0,0,68,0,0,0,69,0,0,0,70,0,0,0,71,0,0,0,72,0,0,0,73,0,0,0,74,0,0,0,75,0,0,0,76,0,0,0,77,0,0,0,78,0,0,0,79,0,0,0,80,0,0,0,81,0,0,0,82,0,0,0,83,0,0,0,84,0,0,0,85,0,0,0,86,0,0,0,87,0,0,0,88,0,0,0,89,0,0,0,90,0,0,0,91,0,0,0,92,0,0,0,93,0,0,0,94,0,0,0,95,0,0,0,96,0,0,0,65,0,0,0,66,0,0,0,67,0,0,0,68,0,0,0,69,0,0,0,70,0,0,0,71,0,0,0,72,0,0,0,73,0,0,0,74,0,0,0,75,0,0,0,76,0,0,0,77,0,0,0,78,0,0,0,79,0,0,0,80,0,0,0,81,0,0,0,82,0,0,0,83,0,0,0,84,0,0,0,85,0,0,0,86,0,0,0,87,0,0,0,88,0,0,0,89,0,0,0,90,0,0,0,123,0,0,0,124,0,0,0,125,0,0,0,126,0,0,0,127],"i8",ALLOC_NONE,Runtime.GLOBAL_BASE+40960);allocate([1,0,0,0,2,0,0,0,3,0,0,0,4,0,0,0,5,0,0,0,6,0,0,0,7,0,0,0,8,0,0,0,9,0,0,0,10,0,0,0,11,0,0,0,12,0,0,0,13,0,0,0,14,0,0,0,15,0,0,0,16,0,0,0,17,0,0,0,18,0,0,0,19,0,0,0,20,0,0,0,21,0,0,0,22,0,0,0,23,0,0,0,24,0,0,0,25,0,0,0,26,0,0,0,27,0,0,0,28,0,0,0,29,0,0,0,30,0,0,0,31,0,0,0,32,0,0,0,33,0,0,0,34,0,0,0,35,0,0,0,36,0,0,0,37,0,0,0,38,0,0,0,39,0,0,0,40,0,0,0,41,0,0,0,42,0,0,0,43,0,0,0,44,0,0,0,45,0,0,0,46,0,0,0,47,0,0,0,48,0,0,0,49,0,0,0,50,0,0,0,51,0,0,0,52,0,0,0,53,0,0,0,54,0,0,0,55,0,0,0,56,0,0,0,57,0,0,0,58,0,0,0,59,0,0,0,60,0,0,0,61,0,0,0,62,0,0,0,63,0,0,0,64,0,0,0,97,0,0,0,98,0,0,0,99,0,0,0,100,0,0,0,101,0,0,0,102,0,0,0,103,0,0,0,104,0,0,0,105,0,0,0,106,0,0,0,107,0,0,0,108,0,0,0,109,0,0,0,110,0,0,0,111,0,0,0,112,0,0,0,113,0,0,0,114,0,0,0,115,0,0,0,116,0,0,0,117,0,0,0,118,0,0,0,119,0,0,0,120,0,0,0,121,0,0,0,122,0,0,0,91,0,0,0,92,0,0,0,93,0,0,0,94,0,0,0,95,0,0,0,96,0,0,0,97,0,0,0,98,0,0,0,99,0,0,0,100,0,0,0,101,0,0,0,102,0,0,0,103,0,0,0,104,0,0,0,105,0,0,0,106,0,0,0,107,0,0,0,108,0,0,0,109,0,0,0,110,0,0,0,111,0,0,0,112,0,0,0,113,0,0,0,114,0,0,0,115,0,0,0,116,0,0,0,117,0,0,0,118,0,0,0,119,0,0,0,120,0,0,0,121,0,0,0,122,0,0,0,123,0,0,0,124,0,0,0,125,0,0,0,126,0,0,0,127],"i8",ALLOC_NONE,Runtime.GLOBAL_BASE+50332);allocate([112,40,0,0,130,5,0,0,131,5,0,0,55,3,0,0,36,0,0,0,5,0,0,0,10,0,0,0,20,0,0,0,21,0,0,0,37,0,0,0,22,0,0,0,23,0,0,0,127,0,0,0,38,0,0,0,128,0,0,0,0,0,0,0,128,40,0,0,130,5,0,0,132,5,0,0,56,3,0,0,36,0,0,0,5,0,0,0,10,0,0,0,24,0,0,0,21,0,0,0,37,0,0,0,25,0,0,0,26,0,0,0,129,0,0,0,39,0,0,0,130,0,0,0,0,0,0,0,144,40,0,0,133,5,0,0,134,5,0,0,57,3,0,0,1,0,0,0,6,0,0,0,11,0,0,0,27,0,0,0,4,0,0,0,2,0,0,0,28,0,0,0,6,0,0,0,131,0,0,0,40,0,0,0,132,0,0,0,0,0,0,0,160,40,0,0,133,5,0,0,135,5,0,0,58,3,0,0,1,0,0,0,6,0,0,0,11,0,0,0,3,0,0,0,4,0,0,0,2,0,0,0,29,0,0,0,30,0,0,0,133,0,0,0,3,0,0,0,134,0,0,0,0,0,0,0,216,40,0,0,133,5,0,0,136,5,0,0,8,0,0,0,1,0,0,0,6,0,0,0,11,0,0,0,3,0,0,0,4,0,0,0,2,0,0,0,28,0,0,0,6,0,0,0,131,0,0,0,3,0,0,0,134,0,0,0,0,0,0,0,224,40,0,0,130,5,0,0,137,5,0,0,59,3,0,0,36,0,0,0,5,0,0,0,10,0,0,0,24,0,0,0,21,0,0,0,37,0,0,0,22,0,0,0,23,0,0,0,127,0,0,0,39,0,0,0,130,0,0,0,8,0,0,0,0,0,0,0,232,40,0,0,22,0,0,0,23,0,0,0,248,255,255,255,248,255,255,255,232,40,0,0,24,0,0,0,25,0,0,0,8,0,0,0,0,0,0,0,0,41,0,0,138,5,0,0,139,5,0,0,248,255,255,255,248,255,255,255,0,41,0,0,140,5,0,0,141,5,0,0,4,0,0,0,0,0,0,0,24,41,0,0,88,3,0,0,89,3,0,0,252,255,255,255,252,255,255,255,24,41,0,0,90,3,0,0,91,3,0,0,4,0,0,0,0,0,0,0,48,41,0,0,142,5,0,0,143,5,0,0,252,255,255,255,252,255,255,255,48,41,0,0,144,5,0,0,145,5,0,0,0,0,0,0,176,40,0,0,146,5,0,0,147,5,0,0,0,0,0,0,72,42,0,0,148,5,0,0,149,5,0,0,150,5,0,0,1,0,0,0,12,0,0,0,41,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,88,42,0,0,151,5,0,0,152,5,0,0,150,5,0,0,2,0,0,0,13,0,0,0,42,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,168,42,0,0,153,5,0,0,154,5,0,0,150,5,0,0,2,0,0,0,3,0,0,0,4,0,0,0,5,0,0,0,6,0,0,0,7,0,0,0,8,0,0,0,9,0,0,0,10,0,0,0,11,0,0,0,12,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,200,42,0,0,155,5,0,0,156,5,0,0,150,5,0,0,13,0,0,0,14,0,0,0,15,0,0,0,16,0,0,0,17,0,0,0,18,0,0,0,19,0,0,0,20,0,0,0,21,0,0,0,22,0,0,0,23,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,232,42,0,0,157,5,0,0,158,5,0,0,150,5,0,0,3,0,0,0,4,0,0,0,24,0,0,0,5,0,0,0,25,0,0,0,1,0,0,0,2,0,0,0,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8,43,0,0,159,5,0,0,160,5,0,0,150,5,0,0,7,0,0,0,8,0,0,0,26,0,0,0,9,0,0,0,27,0,0,0,3,0,0,0,4,0,0,0,10,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,40,43,0,0,161,5,0,0,162,5,0,0,150,5,0,0,31,0,0,0,28,0,0,0,29,0,0,0,30,0,0,0,31,0,0,0,32,0,0,0,1,0,0,0,248,255,255,255,40,43,0,0,32,0,0,0,33,0,0,0,34,0,0,0,35,0,0,0,36,0,0,0,37,0,0,0,38,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,80,43,0,0,163,5,0,0,164,5,0,0,150,5,0,0,39,0,0,0,33,0,0,0,34,0,0,0,35,0,0,0,36,0,0,0,37,0,0,0,2,0,0,0,248,255,255,255,80,43,0,0,40,0,0,0,41,0,0,0,42,0,0,0,43,0,0,0,44,0,0,0,45,0,0,0,46,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,120,43,0,0,165,5,0,0,166,5,0,0,150,5,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,152,43,0,0,167,5,0,0,168,5,0,0,150,5,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,184,43,0,0,169,5,0,0,170,5,0,0,150,5,0,0,47,0,0,0,48,0,0,0,60,3,0,0,61,3,0,0,62,3,0,0,63,3,0,0,49,0,0,0,64,3,0,0,65,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,216,43,0,0,171,5,0,0,172,5,0,0,150,5,0,0,50,0,0,0,51,0,0,0,66,3,0,0,67,3,0,0,68,3,0,0,69,3,0,0,52,0,0,0,70,3,0,0,71,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,248,43,0,0,173,5,0,0,174,5,0,0,150,5,0,0,53,0,0,0,54,0,0,0,72,3,0,0,73,3,0,0,74,3,0,0,75,3,0,0,55,0,0,0,76,3,0,0,77,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,24,44,0,0,175,5,0,0,176,5,0,0,150,5,0,0,56,0,0,0,57,0,0,0,78,3,0,0,79,3,0,0,80,3,0,0,81,3,0,0,58,0,0,0,82,3,0,0,83,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,56,44,0,0,177,5,0,0,178,5,0,0,150,5,0,0,3,0,0,0,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,88,44,0,0,179,5,0,0,180,5,0,0,150,5,0,0,5,0,0,0,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,120,44,0,0,181,5,0,0,182,5,0,0,150,5,0,0,1,0,0,0,38,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,152,44,0,0,183,5,0,0,184,5,0,0,150,5,0,0,2,0,0,0,39,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,184,44,0,0,185,5,0,0,186,5,0,0,150,5,0,0,43,0,0,0,7,0,0,0,84,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,216,44,0,0,187,5,0,0,188,5,0,0,150,5,0,0,44,0,0,0,8,0,0,0,85,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,56,42,0,0,189,5,0,0,190,5,0,0,150,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,104,42,0,0,191,5,0,0,192,5,0,0,150,5,0,0,135,0,0,0,45,0,0,0,136,0,0,0,46,0,0,0,137,0,0,0,1,0,0,0,47,0,0,0,11,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,24,42,0,0,193,5,0,0,194,5,0,0,150,5,0,0,3,0,0,0,4,0,0,0,12,0,0,0,59,0,0,0,60,0,0,0,13,0,0,0,61,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,136,42,0,0,195,5,0,0,196,5,0,0,150,5,0,0,62,0,0,0,63,0,0,0,86,3,0,0,87,3,0,0,88,3,0,0,0,0,0,0,152,42,0,0,197,5,0,0,198,5,0,0,150,5,0,0,64,0,0,0,65,0,0,0,89,3,0,0,90,3,0,0,91,3,0,0,0,0,0,0,104,41,0,0,199,5,0,0,200,5,0,0,150,5,0,0,0,0,0,0,120,41,0,0,199,5,0,0,201,5,0,0,150,5,0,0,48,0,0,0,2,0,0,0,3,0,0,0,4,0,0,0,138,0,0,0,49,0,0,0,139,0,0,0,50,0,0,0,140,0,0,0,5,0,0,0,51,0,0,0,14,0,0,0,0,0,0,0,152,41,0,0,199,5,0,0,202,5,0,0,150,5,0,0,5,0,0,0,6,0,0,0,15,0,0,0,66,0,0,0,67,0,0,0,16,0,0,0,68,0,0,0,0,0,0,0,184,41,0,0,199,5,0,0,203,5,0,0,150,5,0,0,7,0,0,0,8,0,0,0,17,0,0,0,69,0,0,0,70,0,0,0,18,0,0,0,71,0,0,0,0,0,0,0,216,41,0,0,199,5,0,0,204,5,0,0,150,5,0,0,9,0,0,0,10,0,0,0,19,0,0,0,72,0,0,0,73,0,0,0,20,0,0,0,74,0,0,0,0,0,0,0,248,41,0,0,199,5,0,0,205,5,0,0,150,5,0,0,9,0,0,0,10,0,0,0,19,0,0,0,72,0,0,0,73,0,0,0,20,0,0,0,74,0,0,0,0,0,0,0,8,42,0,0,199,5,0,0,206,5,0,0,150,5,0,0,9,0,0,0,10,0,0,0,19,0,0,0,72,0,0,0,73,0,0,0,20,0,0,0,74,0,0,0,0,0,0,0,37,0,0,0,72,0,0,0,58,0,0,0,37,0,0,0,77,0,0,0,58,0,0,0,37,0,0,0,83,0,0,0,37,0,0,0,109,0,0,0,47,0,0,0,37,0,0,0,100,0,0,0,47,0,0,0,37,0,0,0,121,0,0,0,37,0,0,0,89,0,0,0,45,0,0,0,37,0,0,0,109,0,0,0,45,0,0,0,37,0,0,0,100,0,0,0,37,0,0,0,73,0,0,0,58,0,0,0,37,0,0,0,77,0,0,0,58,0,0,0,37,0,0,0,83,0,0,0,32,0,0,0,37,0,0,0,112,0,0,0,37,0,0,0,72,0,0,0,58,0,0,0,37,0,0,0,77,0,0,0,37,0,0,0,72,0,0,0,58,0,0,0,37,0,0,0,77,0,0,0,58,0,0,0,37,0,0,0,83,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,116,0,0,0,114,0,0,0,117,0,0,0,101,0,0,0,0,0,0,0,102,0,0,0,97,0,0,0,108,0,0,0,115,0,0,0,101,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,83,0,0,0,117,0,0,0,110,0,0,0,100,0,0,0,97,0,0,0,121,0,0,0,0,0,0,0,77,0,0,0,111,0,0,0,110,0,0,0,100,0,0,0,97,0,0,0,121,0,0,0,0,0,0,0,84,0,0,0,117,0,0,0,101,0,0,0,115,0,0,0,100,0,0,0,97,0,0,0,121,0,0,0,0,0,0,0,87,0,0,0,101,0,0,0,100,0,0,0,110,0,0,0,101,0,0,0,115,0,0,0,100,0,0,0,97,0,0,0,121,0,0,0,0,0,0,0,84,0,0,0,104,0,0,0,117,0,0,0,114,0,0,0,115,0,0,0,100,0,0,0,97,0,0,0,121,0,0,0,0,0,0,0,70,0,0,0,114,0,0,0,105,0,0,0,100,0,0,0,97,0,0,0,121,0,0,0,0,0,0,0,83,0,0,0,97,0,0,0,116,0,0,0,117,0,0,0,114,0,0,0,100,0,0,0,97,0,0,0,121,0,0,0,0,0,0,0,83,0,0,0,117,0,0,0,110,0,0,0,0,0,0,0,77,0,0,0,111,0,0,0,110,0,0,0,0,0,0,0,84,0,0,0,117,0,0,0,101,0,0,0,0,0,0,0,87,0,0,0,101,0,0,0,100,0,0,0,0,0,0,0,84,0,0,0,104,0,0,0,117,0,0,0,0,0,0,0,70,0,0,0,114,0,0,0,105,0,0,0,0,0,0,0,83,0,0,0,97,0,0,0,116,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,74,0,0,0,97,0,0,0,110,0,0,0,117,0,0,0,97,0,0,0,114,0,0,0,121,0,0,0,0,0,0,0,70,0,0,0,101,0,0,0,98,0,0,0,114,0,0,0,117,0,0,0,97,0,0,0,114,0,0,0,121,0,0,0,0,0,0,0,77,0,0,0,97,0,0,0,114,0,0,0,99,0,0,0,104,0,0,0,0,0,0,0,65,0,0,0,112,0,0,0,114,0,0,0,105,0,0,0,108,0,0,0,0,0,0,0,77,0,0,0,97,0,0,0,121,0,0,0,0,0,0,0,74,0,0,0,117,0,0,0,110,0,0,0,101,0,0,0,0,0,0,0,74,0,0,0,117,0,0,0,108,0,0,0,121,0,0,0,0,0,0,0,65,0,0,0,117,0,0,0,103,0,0,0,117,0,0,0,115,0,0,0,116,0,0,0,0,0,0,0,83,0,0,0,101,0,0,0,112,0,0,0,116,0,0,0,101,0,0,0,109,0,0,0,98,0,0,0,101,0,0,0,114,0,0,0,0,0,0,0,79,0,0,0,99,0,0,0,116,0,0,0,111,0,0,0,98,0,0,0,101,0,0,0,114,0,0,0,0,0,0,0,78,0,0,0,111,0,0,0,118,0,0,0,101,0,0,0,109,0,0,0,98,0,0,0,101,0,0,0,114,0,0,0,0,0,0,0,68,0,0,0,101,0,0,0,99,0,0,0,101,0,0,0,109,0,0,0,98,0,0,0,101,0,0,0,114,0,0,0,0,0,0,0,74,0,0,0,97,0,0,0,110,0,0,0,0,0,0,0,70,0,0,0,101,0,0,0,98,0,0,0,0,0,0,0,77,0,0,0,97,0,0,0,114,0,0,0,0,0,0,0,65,0,0,0,112,0,0,0,114,0,0,0,0,0,0,0,74,0,0,0,117,0,0,0,110,0,0,0,0,0,0,0,74,0,0,0,117,0,0,0,108,0,0,0,0,0,0,0,65,0,0,0,117,0,0,0,103,0,0,0,0,0,0,0,83,0,0,0,101,0,0,0,112,0,0,0,0,0,0,0,79,0,0,0,99,0,0,0,116,0,0,0,0,0,0,0,78,0,0,0,111,0,0,0,118,0,0,0,0,0,0,0,68,0,0,0,101,0,0,0,99,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,65,0,0,0,77,0,0,0,0,0,0,0,80,0,0,0,77,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,37,0,0,0,109,0,0,0,47,0,0,0,37,0,0,0,100,0,0,0,47,0,0,0,37,0,0,0,121,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,37,0,0,0,72,0,0,0,58,0,0,0,37,0,0,0,77,0,0,0,58,0,0,0,37,0,0,0,83,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,37,0,0,0,97,0,0,0,32,0,0,0,37,0,0,0,98,0,0,0,32,0,0,0,37,0,0,0,100,0,0,0,32,0,0,0,37,0,0,0,72,0,0,0,58,0,0,0,37,0,0,0,77,0,0,0,58,0,0,0,37,0,0,0,83,0,0,0,32,0,0,0,37,0,0,0,89,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,37,0,0,0,73,0,0,0,58,0,0,0,37,0,0,0,77,0,0,0,58,0,0,0,37,0,0,0,83,0,0,0,32,0,0,0,37,0,0,0,112,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8,0,8,0,10,0,10,0,0,0,0,0,46,0,44,0,43,0,43,0,44,0,25,0,7,0,26,0,20,0,21,0,27,0,44,0,16,0,44,0,23,0,28,0,1,0,17,0,33,0,29,0,18,0,44,0,19,0,41,0,39,0,39,0,39,0,39,0,39,0,39,0,39,0,39,0,44,0,44,0,32,0,44,0,44,0,31,0,44,0,14,0,22,0,15,0,8,0,9,0,8,0,10,0,10,0,10,0,10,0,34,0,35,0,34,0,34,0,34,0,34,0,34,0,34,0,34,0,34,0,34,0,34,0,34,0,32,0,34,0,34,0,31,0,34,0,43,0,7,0,0,0,0,0,42,0,0,0,13,0,0,0,2,0,0,0,3,0,24,0,4,0,0,0,1,0,36,0,0,0,0,0,32,0,0,0,37,0,0,0,0,0,0,0,30,0,0,0,8,0,9,0,8,0,10,0,11,0,12,0,34,0,34,0,34,0,32,0,34,0,34,0,34,0,34,0,34,0,30,0,34,0,0,0,5,0,6,0,36,0,38,0,0,0,34,0,34,0,0,0,34,0,40,0,34,0,0,0,0,0,0,0,0,0,46,0,48,0,50,0,53,0,59,0,0,0,229,0,230,0,65,0,68,0,54,0,230,0,230,0,230,0,216,0,230,0,230,0,67,0,230,0,89,0,90,0,230,0,93,0,230,0,230,0,230,0,230,0,0,0,230,0,230,0,191,0,230,0,74,0,44,0,188,0,85,0,189,0,181,0,184,0,194,0,79,0,84,0,86,0,80,0,185,0,230,0,230,0,230,0,0,0,121,0,123,0,230,0,126,0,208,0,208,0,0,0,230,0,0,0,182,0,0,0,95,0,96,0,179,0,106,0,180,0,172,0,175,0,185,0,101,0,105,0,106,0,105,0,176,0,144,0,230,0,199,0,135,0,230,0,52,0,230,0,192,0,135,0,191,0,139,0,230,0,190,0,189,0,140,0,0,0,163,0,162,0,230,0,161,0,230,0,162,0,159,0,158,0,230,0,163,0,0,0,158,0,160,0,162,0,230,0,230,0,0,0,156,0,155,0,0,0,147,0,0,0,146,0,126,0,125,0,0,0,130,0,145,0,141,0,101,0,0,0,230,0,30,0,0,0,20,0,16,0,13,0,230,0,0,0,230,0,170,0,175,0,180,0,183,0,188,0,190,0,192,0,0,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,3,0,3,0,4,0,4,0,5,0,5,0,81,0,6,0,6,0,128,0,13,0,5,0,127,0,5,0,6,0,126,0,6,0,7,0,11,0,11,0,11,0,12,0,12,0,12,0,11,0,124,0,11,0,12,0,81,0,12,0,13,0,36,0,7,0,7,0,20,0,36,0,20,0,7,0,7,0,7,0,7,0,7,0,7,0,7,0,7,0,7,0,7,0,7,0,7,0,7,0,7,0,7,0,7,0,7,0,7,0,7,0,22,0,23,0,22,0,23,0,25,0,35,0,25,0,35,0,38,0,44,0,43,0,46,0,43,0,45,0,121,0,46,0,38,0,43,0,45,0,52,0,52,0,53,0,53,0,44,0,55,0,55,0,63,0,64,0,63,0,66,0,72,0,64,0,71,0,73,0,71,0,79,0,74,0,66,0,73,0,71,0,74,0,76,0,76,0,76,0,72,0,119,0,84,0,76,0,84,0,76,0,86,0,90,0,86,0,90,0,120,0,79,0,103,0,103,0,104,0,104,0,105,0,105,0,118,0,116,0,115,0,119,0,132,0,132,0,132,0,132,0,132,0,133,0,133,0,133,0,133,0,133,0,134,0,134,0,134,0,134,0,134,0,135,0,114,0,135,0,136,0,112,0,136,0,136,0,136,0,137,0,137,0,138,0,138,0,110,0,109,0,101,0,99,0,98,0,97,0,95,0,93,0,92,0,89,0,88,0,85,0,83,0,78,0,75,0,70,0,69,0,68,0,67,0,65,0,61,0,57,0,56,0,47,0,42,0,41,0,40,0,39,0,37,0,33,0,17,0,9,0,131,0,131,0,131,0,131,0,131,0,131,0,131,0,131,0,131,0,131,0,131,0,131,0,131,0,131,0,131,0,131,0,131,0,131,0,131,0,131,0,131,0,131,0,131,0,131,0,131,0,131,0,131,0,131,0,131,0,131,0,131,0,131,0,131,0,131,0,131,0,131,0,131,0,131,0,131,0,131,0,131,0,131,0,131,0,131,0,131,0,131,0,131,0,131,0,131,0,0,0,131,0,1,0,132,0,132,0,133,0,133,0,1,0,7,0,131,0,131,0,131,0,131,0,134,0,131,0,131,0,131,0,131,0,131,0,131,0,131,0,131,0,131,0,131,0,131,0,131,0,131,0,131,0,131,0,131,0,135,0,131,0,131,0,131,0,131,0,131,0,131,0,131,0,131,0,131,0,131,0,131,0,131,0,131,0,131,0,131,0,131,0,131,0,131,0,131,0,131,0,136,0,131,0,136,0,131,0,131,0,131,0,131,0,137,0,131,0,137,0,137,0,137,0,137,0,137,0,137,0,137,0,137,0,137,0,137,0,137,0,137,0,137,0,137,0,137,0,137,0,131,0,131,0,131,0,134,0,131,0,134,0,131,0,131,0,131,0,131,0,131,0,131,0,131,0,131,0,131,0,138,0,131,0,131,0,131,0,131,0,131,0,131,0,131,0,131,0,131,0,131,0,136,0,131,0,136,0,131,0,131,0,131,0,137,0,137,0,137,0,137,0,137,0,137,0,137,0,137,0,137,0,137,0,137,0,134,0,131,0,131,0,138,0,131,0,131,0,137,0,137,0,131,0,137,0,131,0,137,0,0,0,131,0,131,0,131,0,131,0,131,0,131,0,131,0,0,0,10,0,11,0,12,0,11,0,13,0,14,0,10,0,15,0,16,0,17,0,18,0,19,0,20,0,21,0,22,0,23,0,24,0,25,0,26,0,27,0,28,0,10,0,10,0,29,0,30,0,31,0,32,0,33,0,34,0,35,0,36,0,37,0,38,0,39,0,40,0,41,0,42,0,43,0,10,0,10,0,44,0,45,0,46,0,47,0,10,0,48,0,49,0,50,0,52,0,53,0,52,0,53,0,55,0,55,0,131,0,55,0,55,0,130,0,80,0,56,0,129,0,57,0,56,0,128,0,57,0,58,0,76,0,76,0,76,0,76,0,76,0,76,0,77,0,127,0,78,0,77,0,119,0,78,0,81,0,95,0,59,0,58,0,83,0,96,0,84,0,60,0,61,0,62,0,63,0,64,0,65,0,66,0,67,0,68,0,69,0,70,0,71,0,58,0,58,0,72,0,73,0,74,0,75,0,58,0,85,0,87,0,86,0,88,0,89,0,93,0,90,0,94,0,96,0,94,0,96,0,96,0,94,0,96,0,121,0,101,0,98,0,100,0,94,0,103,0,103,0,103,0,104,0,94,0,105,0,105,0,110,0,112,0,111,0,113,0,111,0,113,0,113,0,113,0,111,0,80,0,113,0,115,0,111,0,117,0,118,0,76,0,76,0,76,0,111,0,80,0,83,0,77,0,84,0,78,0,85,0,89,0,86,0,90,0,120,0,81,0,103,0,103,0,103,0,104,0,105,0,105,0,113,0,125,0,125,0,81,0,51,0,51,0,51,0,51,0,51,0,54,0,54,0,54,0,54,0,54,0,79,0,79,0,79,0,79,0,79,0,91,0,126,0,91,0,102,0,125,0,102,0,102,0,102,0,108,0,108,0,122,0,122,0,125,0,125,0,96,0,123,0,123,0,124,0,123,0,123,0,123,0,88,0,88,0,121,0,120,0,82,0,113,0,113,0,111,0,111,0,116,0,114,0,109,0,107,0,106,0,96,0,96,0,94,0,94,0,99,0,97,0,92,0,82,0,131,0,9,0,131,0,131,0,131,0,131,0,131,0,131,0,131,0,131,0,131,0,131,0,131,0,131,0,131,0,131,0,131,0,131,0,131,0,131,0,131,0,131,0,131,0,131,0,131,0,131,0,131,0,131,0,131,0,131,0,131,0,131,0,131,0,131,0,131,0,131,0,131,0,131,0,131,0,131,0,131,0,131,0,131,0,131,0,131,0,131,0,131,0,131,0,131,0,131,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,2,0,2,0,2,0,2,0,2,0,2,0,2,0,2,0,3,32,2,32,2,32,2,32,2,32,2,0,2,0,2,0,2,0,2,0,2,0,2,0,2,0,2,0,2,0,2,0,2,0,2,0,2,0,2,0,2,0,2,0,2,0,1,96,4,192,4,192,4,192,4,192,4,192,4,192,4,192,4,192,4,192,4,192,4,192,4,192,4,192,4,192,4,192,8,216,8,216,8,216,8,216,8,216,8,216,8,216,8,216,8,216,8,216,4,192,4,192,4,192,4,192,4,192,4,192,4,192,8,213,8,213,8,213,8,213,8,213,8,213,8,197,8,197,8,197,8,197,8,197,8,197,8,197,8,197,8,197,8,197,8,197,8,197,8,197,8,197,8,197,8,197,8,197,8,197,8,197,8,197,4,192,4,192,4,192,4,192,4,192,4,192,8,214,8,214,8,214,8,214,8,214,8,214,8,198,8,198,8,198,8,198,8,198,8,198,8,198,8,198,8,198,8,198,8,198,8,198,8,198,8,198,8,198,8,198,8,198,8,198,8,198,8,198,4,192,4,192,4,192,4,192,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,78,53,103,117,105,100,111,49,49,98,97,115,101,118,105,115,105,116,111,114,69,0,78,53,103,117,105,100,111,55,118,105,115,105,116,111,114,73,78,83,95,54,83,77,65,82,84,80,73,78,83,95,49,50,103,117,105,100,111,101,108,101,109,101,110,116,69,69,69,69,69,0,100,120,0,100,121,0,78,53,103,117,105,100,111,49,52,103,117,105,100,111,97,116,116,114,105,98,117,116,101,69,0,78,53,103,117,105,100,111,57,115,109,97,114,116,97,98,108,101,69,0,78,53,103,117,105,100,111,53,99,116,114,101,101,73,78,83,95,49,50,103,117,105,100,111,101,108,101,109,101,110,116,69,69,69,0,78,53,103,117,105,100,111,49,50,103,117,105,100,111,101,108,101,109,101,110,116,69,0,78,53,103,117,105,100,111,57,118,105,115,105,116,97,98,108,101,69,0,78,83,116,51,95,95,49,49,56,98,97,115,105,99,95,115,116,114,105,110,103,115,116,114,101,97,109,73,99,78,83,95,49,49,99,104,97,114,95,116,114,97,105,116,115,73,99,69,69,78,83,95,57,97,108,108,111,99,97,116,111,114,73,99,69,69,69,69,0,78,83,116,51,95,95,49,49,53,98,97,115,105,99,95,115,116,114,105,110,103,98,117,102,73,99,78,83,95,49,49,99,104,97,114,95,116,114,97,105,116,115,73,99,69,69,78,83,95,57,97,108,108,111,99,97,116,111,114,73,99,69,69,69,69,0,78,53,103,117,105,100,111,49,50,116,114,101,101,95,98,114,111,119,115,101,114,73,78,83,95,49,50,103,117,105,100,111,101,108,101,109,101,110,116,69,69,69,0,78,53,103,117,105,100,111,55,98,114,111,119,115,101,114,73,78,83,95,49,50,103,117,105,100,111,101,108,101,109,101,110,116,69,69,69,0,78,53,103,117,105,100,111,55,65,82,67,104,111,114,100,69,0,78,53,103,117,105,100,111,49,57,99,104,111,114,100,100,117,114,97,116,105,111,110,99,104,97,110,103,101,69,0,78,53,103,117,105,100,111,55,118,105,115,105,116,111,114,73,78,83,95,54,83,77,65,82,84,80,73,78,83,95,54,65,82,78,111,116,101,69,69,69,69,69,0,78,53,103,117,105,100,111,49,48,99,104,111,114,100,101,113,117,97,108,69,0,78,53,103,117,105,100,111,49,55,99,104,111,114,100,112,105,116,99,104,118,105,115,105,116,111,114,69,0,78,53,103,117,105,100,111,55,118,105,115,105,116,111,114,73,78,83,95,54,83,77,65,82,84,80,73,78,83,95,55,65,82,67,104,111,114,100,69,69,69,69,69,0,78,53,103,117,105,100,111,50,48,99,104,111,114,100,100,117,114,97,116,105,111,110,118,105,115,105,116,111,114,69,0,78,53,103,117,105,100,111,50,53,99,104,111,114,100,116,111,116,97,108,100,117,114,97,116,105,111,110,118,105,115,105,116,111,114,69,0,78,53,103,117,105,100,111,57,65,82,70,97,99,116,111,114,121,69,0,109,117,115,105,99,0,118,111,105,99,101,0,99,104,111,114,100,0,83,103,117,105,100,111,101,108,101,109,101,110,116,32,102,97,99,116,111,114,121,58,58,99,114,101,97,116,101,32,99,97,108,108,101,100,32,119,105,116,104,32,117,110,107,110,111,119,110,32,101,108,101,109,101,110,116,32,34,0,97,99,99,0,97,99,99,101,108,0,97,99,99,101,108,66,101,103,105,110,0,97,99,99,101,108,69,110,100,0,97,99,99,101,110,116,0,97,99,99,111,108,0,97,108,116,101,114,0,97,117,116,111,0,97,117,116,111,66,114,101,97,107,0,98,97,114,70,111,114,109,97,116,0,98,101,97,109,0,98,109,0,98,101,97,109,66,101,103,105,110,0,98,101,97,109,69,110,100,0,98,101,97,109,115,65,117,116,111,0,98,101,97,109,115,79,102,102,0,98,101,109,98,101,108,0,98,114,101,97,116,104,77,97,114,107,0,99,108,101,102,0,99,111,100,97,0,99,111,108,111,114,0,99,111,108,111,117,114,0,99,111,109,112,111,115,101,114,0,99,114,101,115,99,0,99,114,101,115,99,66,101,103,105,110,0,99,114,101,115,99,69,110,100,0,99,117,101,0,100,97,67,97,112,111,0,100,97,67,97,112,111,65,108,70,105,110,101,0,100,97,67,111,100,97,0,100,97,108,83,101,103,110,111,0,100,97,108,83,101,103,110,111,65,108,70,105,110,101,0,100,101,99,114,101,115,99,0,100,101,102,105,110,101,84,97,103,0,100,105,109,0,100,105,109,66,101,103,105,110,0,100,105,109,69,110,100,0,100,105,109,105,110,117,101,110,100,111,0,100,105,115,112,68,117,114,0,100,111,116,70,111,114,109,97,116,0,100,111,117,98,108,101,66,97,114,0,101,110,100,66,97,114,0,102,101,114,109,97,116,97,0,102,105,110,101,0,102,105,110,103,101,114,105,110,103,0,103,114,97,99,101,0,104,101,97,100,115,67,101,110,116,101,114,0,104,101,97,100,115,76,101,102,116,0,104,101,97,100,115,78,111,114,109,97,108,0,104,101,97,100,115,82,101,118,101,114,115,101,0,104,101,97,100,115,82,105,103,104,116,0,105,110,115,116,114,0,105,110,116,101,110,115,0,105,0,108,97,98,101,108,0,108,121,114,105,99,115,0,109,97,114,99,97,116,111,0,109,97,114,107,0,109,101,114,103,101,0,109,101,116,101,114,0,109,111,114,100,0,110,101,119,76,105,110,101,0,110,101,119,80,97,103,101,0,110,101,119,83,121,115,116,101,109,0,110,111,116,101,70,111,114,109,97,116,0,111,99,116,0,112,97,103,101,70,111,114,109,97,116,0,112,111,114,116,0,114,101,112,101,97,116,66,101,103,105,110,0,114,101,112,101,97,116,69,110,100,0,114,101,115,116,70,111,114,109,97,116,0,114,105,116,0,114,105,116,66,101,103,105,110,0,114,105,116,69,110,100,0,115,101,103,110,111,0,115,101,116,0,115,104,97,114,101,76,111,99,97,116,105,111,110,0,115,108,117,114,0,115,108,0,115,108,117,114,66,101,103,105,110,0,115,108,117,114,69,110,100,0,115,112,97,99,101,0,115,112,101,99,105,97,108,0,115,112,108,105,116,67,104,111,114,100,0,115,116,97,99,99,0,115,116,97,99,99,66,101,103,105,110,0,115,116,97,99,99,69,110,100,0,115,116,97,102,102,0,115,116,97,102,102,70,111,114,109,97,116,0,115,116,97,102,102,79,102,102,0,115,116,97,102,102,79,110,0,115,116,101,109,115,65,117,116,111,0,115,116,101,109,115,68,111,119,110,0,115,116,101,109,115,79,102,102,0,115,116,101,109,115,85,112,0,115,121,115,116,101,109,70,111,114,109,97,116,0,116,101,109,112,111,0,116,101,110,0,116,101,120,116,0,116,0,116,105,101,66,101,103,105,110,0,116,105,101,69,110,100,0,116,105,116,108,101,0,116,114,101,109,0,116,114,105,108,108,0,116,117,112,108,101,116,0,116,117,114,110,0,117,110,105,116,115,0,118,111,108,116,97,0,118,111,108,116,97,66,101,103,105,110,0,118,111,108,116,97,69,110,100,0,68,114,72,111,111,115,0,68,114,82,101,110,122,0,98,97,99,107,119,97,114,100,0,104,97,114,109,111,110,105,99,0,112,105,122,122,0,57,115,105,110,103,108,101,116,111,110,73,78,53,103,117,105,100,111,57,65,82,70,97,99,116,111,114,121,69,69,0,78,53,103,117,105,100,111,55,118,105,115,105,116,111,114,73,78,83,95,54,83,77,65,82,84,80,73,78,83,95,53,65,82,84,97,103,73,76,105,49,50,50,69,69,69,69,69,69,69,0,78,53,103,117,105,100,111,53,65,82,84,97,103,73,76,105,49,50,50,69,69,69,0,78,53,103,117,105,100,111,49,51,110,101,119,84,97,103,70,117,110,99,116,111,114,73,76,105,49,50,50,69,69,69,0,78,53,103,117,105,100,111,55,102,117,110,99,116,111,114,73,78,83,95,54,83,77,65,82,84,80,73,78,83,95,56,103,117,105,100,111,116,97,103,69,69,69,108,69,69,0,78,53,103,117,105,100,111,55,118,105,115,105,116,111,114,73,78,83,95,54,83,77,65,82,84,80,73,78,83,95,53,65,82,84,97,103,73,76,105,49,50,49,69,69,69,69,69,69,69,0,78,53,103,117,105,100,111,53,65,82,84,97,103,73,76,105,49,50,49,69,69,69,0,78,53,103,117,105,100,111,49,51,110,101,119,84,97,103,70,117,110,99,116,111,114,73,76,105,49,50,49,69,69,69,0,78,53,103,117,105,100,111,55,118,105,115,105,116,111,114,73,78,83,95,54,83,77,65,82,84,80,73,78,83,95,53,65,82,84,97,103,73,76,105,49,50,48,69,69,69,69,69,69,69,0,78,53,103,117,105,100,111,53,65,82,84,97,103,73,76,105,49,50,48,69,69,69,0,78,53,103,117,105,100,111,49,51,110,101,119,84,97,103,70,117,110,99,116,111,114,73,76,105,49,50,48,69,69,69,0,78,53,103,117,105,100,111,55,118,105,115,105,116,111,114,73,78,83,95,54,83,77,65,82,84,80,73,78,83,95,53,65,82,84,97,103,73,76,105,49,49,57,69,69,69,69,69,69,69,0,78,53,103,117,105,100,111,53,65,82,84,97,103,73,76,105,49,49,57,69,69,69,0,78,53,103,117,105,100,111,49,51,110,101,119,84,97,103,70,117,110,99,116,111,114,73,76,105,49,49,57,69,69,69,0,78,53,103,117,105,100,111,55,118,105,115,105,116,111,114,73,78,83,95,54,83,77,65,82,84,80,73,78,83,95,53,65,82,84,97,103,73,76,105,49,49,56,69,69,69,69,69,69,69,0,78,53,103,117,105,100,111,53,65,82,84,97,103,73,76,105,49,49,56,69,69,69,0,78,53,103,117,105,100,111,49,51,110,101,119,84,97,103,70,117,110,99,116,111,114,73,76,105,49,49,56,69,69,69,0,78,53,103,117,105,100,111,55,118,105,115,105,116,111,114],"i8",ALLOC_NONE,Runtime.GLOBAL_BASE+52884);allocate([73,78,83,95,54,83,77,65,82,84,80,73,78,83,95,53,65,82,84,97,103,73,76,105,49,49,55,69,69,69,69,69,69,69,0,78,53,103,117,105,100,111,53,65,82,84,97,103,73,76,105,49,49,55,69,69,69,0,78,53,103,117,105,100,111,49,51,110,101,119,84,97,103,70,117,110,99,116,111,114,73,76,105,49,49,55,69,69,69,0,78,53,103,117,105,100,111,55,118,105,115,105,116,111,114,73,78,83,95,54,83,77,65,82,84,80,73,78,83,95,53,65,82,84,97,103,73,76,105,49,49,54,69,69,69,69,69,69,69,0,78,53,103,117,105,100,111,53,65,82,84,97,103,73,76,105,49,49,54,69,69,69,0,78,53,103,117,105,100,111,49,51,110,101,119,84,97,103,70,117,110,99,116,111,114,73,76,105,49,49,54,69,69,69,0,78,53,103,117,105,100,111,55,118,105,115,105,116,111,114,73,78,83,95,54,83,77,65,82,84,80,73,78,83,95,53,65,82,84,97,103,73,76,105,49,49,53,69,69,69,69,69,69,69,0,78,53,103,117,105,100,111,53,65,82,84,97,103,73,76,105,49,49,53,69,69,69,0,78,53,103,117,105,100,111,49,51,110,101,119,84,97,103,70,117,110,99,116,111,114,73,76,105,49,49,53,69,69,69,0,78,53,103,117,105,100,111,55,118,105,115,105,116,111,114,73,78,83,95,54,83,77,65,82,84,80,73,78,83,95,53,65,82,84,97,103,73,76,105,49,49,52,69,69,69,69,69,69,69,0,78,53,103,117,105,100,111,53,65,82,84,97,103,73,76,105,49,49,52,69,69,69,0,78,53,103,117,105,100,111,49,51,110,101,119,84,97,103,70,117,110,99,116,111,114,73,76,105,49,49,52,69,69,69,0,78,53,103,117,105,100,111,55,118,105,115,105,116,111,114,73,78,83,95,54,83,77,65,82,84,80,73,78,83,95,53,65,82,84,97,103,73,76,105,49,49,51,69,69,69,69,69,69,69,0,78,53,103,117,105,100,111,53,65,82,84,97,103,73,76,105,49,49,51,69,69,69,0,78,53,103,117,105,100,111,49,51,110,101,119,84,97,103,70,117,110,99,116,111,114,73,76,105,49,49,51,69,69,69,0,78,53,103,117,105,100,111,55,118,105,115,105,116,111,114,73,78,83,95,54,83,77,65,82,84,80,73,78,83,95,53,65,82,84,97,103,73,76,105,49,49,50,69,69,69,69,69,69,69,0,78,53,103,117,105,100,111,53,65,82,84,97,103,73,76,105,49,49,50,69,69,69,0,78,53,103,117,105,100,111,49,51,110,101,119,84,97,103,70,117,110,99,116,111,114,73,76,105,49,49,50,69,69,69,0,78,53,103,117,105,100,111,55,118,105,115,105,116,111,114,73,78,83,95,54,83,77,65,82,84,80,73,78,83,95,53,65,82,84,97,103,73,76,105,49,49,49,69,69,69,69,69,69,69,0,78,53,103,117,105,100,111,53,65,82,84,97,103,73,76,105,49,49,49,69,69,69,0,78,53,103,117,105,100,111,49,51,110,101,119,84,97,103,70,117,110,99,116,111,114,73,76,105,49,49,49,69,69,69,0,78,53,103,117,105,100,111,55,118,105,115,105,116,111,114,73,78,83,95,54,83,77,65,82,84,80,73,78,83,95,53,65,82,84,97,103,73,76,105,49,49,48,69,69,69,69,69,69,69,0,78,53,103,117,105,100,111,53,65,82,84,97,103,73,76,105,49,49,48,69,69,69,0,78,53,103,117,105,100,111,49,51,110,101,119,84,97,103,70,117,110,99,116,111,114,73,76,105,49,49,48,69,69,69,0,78,53,103,117,105,100,111,55,118,105,115,105,116,111,114,73,78,83,95,54,83,77,65,82,84,80,73,78,83,95,53,65,82,84,97,103,73,76,105,49,48,57,69,69,69,69,69,69,69,0,78,53,103,117,105,100,111,53,65,82,84,97,103,73,76,105,49,48,57,69,69,69,0,78,53,103,117,105,100,111,49,51,110,101,119,84,97,103,70,117,110,99,116,111,114,73,76,105,49,48,57,69,69,69,0,78,53,103,117,105,100,111,55,118,105,115,105,116,111,114,73,78,83,95,54,83,77,65,82,84,80,73,78,83,95,53,65,82,84,97,103,73,76,105,49,48,56,69,69,69,69,69,69,69,0,78,53,103,117,105,100,111,53,65,82,84,97,103,73,76,105,49,48,56,69,69,69,0,78,53,103,117,105,100,111,49,51,110,101,119,84,97,103,70,117,110,99,116,111,114,73,76,105,49,48,56,69,69,69,0,78,53,103,117,105,100,111,55,118,105,115,105,116,111,114,73,78,83,95,54,83,77,65,82,84,80,73,78,83,95,53,65,82,84,97,103,73,76,105,49,48,55,69,69,69,69,69,69,69,0,78,53,103,117,105,100,111,53,65,82,84,97,103,73,76,105,49,48,55,69,69,69,0,78,53,103,117,105,100,111,49,51,110,101,119,84,97,103,70,117,110,99,116,111,114,73,76,105,49,48,55,69,69,69,0,78,53,103,117,105,100,111,55,118,105,115,105,116,111,114,73,78,83,95,54,83,77,65,82,84,80,73,78,83,95,53,65,82,84,97,103,73,76,105,49,48,54,69,69,69,69,69,69,69,0,78,53,103,117,105,100,111,53,65,82,84,97,103,73,76,105,49,48,54,69,69,69,0,78,53,103,117,105,100,111,49,51,110,101,119,84,97,103,70,117,110,99,116,111,114,73,76,105,49,48,54,69,69,69,0,78,53,103,117,105,100,111,55,118,105,115,105,116,111,114,73,78,83,95,54,83,77,65,82,84,80,73,78,83,95,53,65,82,84,97,103,73,76,105,49,48,53,69,69,69,69,69,69,69,0,78,53,103,117,105,100,111,53,65,82,84,97,103,73,76,105,49,48,53,69,69,69,0,78,53,103,117,105,100,111,49,51,110,101,119,84,97,103,70,117,110,99,116,111,114,73,76,105,49,48,53,69,69,69,0,78,53,103,117,105,100,111,55,118,105,115,105,116,111,114,73,78,83,95,54,83,77,65,82,84,80,73,78,83,95,53,65,82,84,97,103,73,76,105,49,48,52,69,69,69,69,69,69,69,0,78,53,103,117,105,100,111,53,65,82,84,97,103,73,76,105,49,48,52,69,69,69,0,78,53,103,117,105,100,111,49,51,110,101,119,84,97,103,70,117,110,99,116,111,114,73,76,105,49,48,52,69,69,69,0,78,53,103,117,105,100,111,55,118,105,115,105,116,111,114,73,78,83,95,54,83,77,65,82,84,80,73,78,83,95,53,65,82,84,97,103,73,76,105,49,48,51,69,69,69,69,69,69,69,0,78,53,103,117,105,100,111,53,65,82,84,97,103,73,76,105,49,48,51,69,69,69,0,78,53,103,117,105,100,111,49,51,110,101,119,84,97,103,70,117,110,99,116,111,114,73,76,105,49,48,51,69,69,69,0,78,53,103,117,105,100,111,55,118,105,115,105,116,111,114,73,78,83,95,54,83,77,65,82,84,80,73,78,83,95,53,65,82,84,97,103,73,76,105,49,48,50,69,69,69,69,69,69,69,0,78,53,103,117,105,100,111,53,65,82,84,97,103,73,76,105,49,48,50,69,69,69,0,78,53,103,117,105,100,111,49,51,110,101,119,84,97,103,70,117,110,99,116,111,114,73,76,105,49,48,50,69,69,69,0,78,53,103,117,105,100,111,55,118,105,115,105,116,111,114,73,78,83,95,54,83,77,65,82,84,80,73,78,83,95,53,65,82,84,97,103,73,76,105,49,48,49,69,69,69,69,69,69,69,0,78,53,103,117,105,100,111,53,65,82,84,97,103,73,76,105,49,48,49,69,69,69,0,78,53,103,117,105,100,111,49,51,110,101,119,84,97,103,70,117,110,99,116,111,114,73,76,105,49,48,49,69,69,69,0,78,53,103,117,105,100,111,55,118,105,115,105,116,111,114,73,78,83,95,54,83,77,65,82,84,80,73,78,83,95,53,65,82,84,97,103,73,76,105,49,48,48,69,69,69,69,69,69,69,0,78,53,103,117,105,100,111,53,65,82,84,97,103,73,76,105,49,48,48,69,69,69,0,78,53,103,117,105,100,111,49,51,110,101,119,84,97,103,70,117,110,99,116,111,114,73,76,105,49,48,48,69,69,69,0,78,53,103,117,105,100,111,55,118,105,115,105,116,111,114,73,78,83,95,54,83,77,65,82,84,80,73,78,83,95,53,65,82,84,97,103,73,76,105,57,57,69,69,69,69,69,69,69,0,78,53,103,117,105,100,111,53,65,82,84,97,103,73,76,105,57,57,69,69,69,0,78,53,103,117,105,100,111,49,51,110,101,119,84,97,103,70,117,110,99,116,111,114,73,76,105,57,57,69,69,69,0,78,53,103,117,105,100,111,55,118,105,115,105,116,111,114,73,78,83,95,54,83,77,65,82,84,80,73,78,83,95,53,65,82,84,97,103,73,76,105,57,56,69,69,69,69,69,69,69,0,78,53,103,117,105,100,111,53,65,82,84,97,103,73,76,105,57,56,69,69,69,0,78,53,103,117,105,100,111,49,51,110,101,119,84,97,103,70,117,110,99,116,111,114,73,76,105,57,56,69,69,69,0,78,53,103,117,105,100,111,55,118,105,115,105,116,111,114,73,78,83,95,54,83,77,65,82,84,80,73,78,83,95,53,65,82,84,97,103,73,76,105,57,55,69,69,69,69,69,69,69,0,78,53,103,117,105,100,111,53,65,82,84,97,103,73,76,105,57,55,69,69,69,0,78,53,103,117,105,100,111,49,51,110,101,119,84,97,103,70,117,110,99,116,111,114,73,76,105,57,55,69,69,69,0,78,53,103,117,105,100,111,55,118,105,115,105,116,111,114,73,78,83,95,54,83,77,65,82,84,80,73,78,83,95,53,65,82,84,97,103,73,76,105,57,54,69,69,69,69,69,69,69,0,78,53,103,117,105,100,111,53,65,82,84,97,103,73,76,105,57,54,69,69,69,0,78,53,103,117,105,100,111,49,51,110,101,119,84,97,103,70,117,110,99,116,111,114,73,76,105,57,54,69,69,69,0,78,53,103,117,105,100,111,55,118,105,115,105,116,111,114,73,78,83,95,54,83,77,65,82,84,80,73,78,83,95,53,65,82,84,97,103,73,76,105,57,53,69,69,69,69,69,69,69,0,78,53,103,117,105,100,111,53,65,82,84,97,103,73,76,105,57,53,69,69,69,0,78,53,103,117,105,100,111,49,51,110,101,119,84,97,103,70,117,110,99,116,111,114,73,76,105,57,53,69,69,69,0,78,53,103,117,105,100,111,55,118,105,115,105,116,111,114,73,78,83,95,54,83,77,65,82,84,80,73,78,83,95,53,65,82,84,97,103,73,76,105,57,52,69,69,69,69,69,69,69,0,78,53,103,117,105,100,111,53,65,82,84,97,103,73,76,105,57,52,69,69,69,0,78,53,103,117,105,100,111,49,51,110,101,119,84,97,103,70,117,110,99,116,111,114,73,76,105,57,52,69,69,69,0,78,53,103,117,105,100,111,55,118,105,115,105,116,111,114,73,78,83,95,54,83,77,65,82,84,80,73,78,83,95,53,65,82,84,97,103,73,76,105,57,51,69,69,69,69,69,69,69,0,78,53,103,117,105,100,111,53,65,82,84,97,103,73,76,105,57,51,69,69,69,0,78,53,103,117,105,100,111,49,51,110,101,119,84,97,103,70,117,110,99,116,111,114,73,76,105,57,51,69,69,69,0,78,53,103,117,105,100,111,55,118,105,115,105,116,111,114,73,78,83,95,54,83,77,65,82,84,80,73,78,83,95,53,65,82,84,97,103,73,76,105,57,50,69,69,69,69,69,69,69,0,78,53,103,117,105,100,111,53,65,82,84,97,103,73,76,105,57,50,69,69,69,0,78,53,103,117,105,100,111,49,51,110,101,119,84,97,103,70,117,110,99,116,111,114,73,76,105,57,50,69,69,69,0,78,53,103,117,105,100,111,55,118,105,115,105,116,111,114,73,78,83,95,54,83,77,65,82,84,80,73,78,83,95,53,65,82,84,97,103,73,76,105,57,49,69,69,69,69,69,69,69,0,78,53,103,117,105,100,111,53,65,82,84,97,103,73,76,105,57,49,69,69,69,0,78,53,103,117,105,100,111,49,51,110,101,119,84,97,103,70,117,110,99,116,111,114,73,76,105,57,49,69,69,69,0,78,53,103,117,105,100,111,55,118,105,115,105,116,111,114,73,78,83,95,54,83,77,65,82,84,80,73,78,83,95,53,65,82,84,97,103,73,76,105,57,48,69,69,69,69,69,69,69,0,78,53,103,117,105,100,111,53,65,82,84,97,103,73,76,105,57,48,69,69,69,0,78,53,103,117,105,100,111,49,51,110,101,119,84,97,103,70,117,110,99,116,111,114,73,76,105,57,48,69,69,69,0,78,53,103,117,105,100,111,55,118,105,115,105,116,111,114,73,78,83,95,54,83,77,65,82,84,80,73,78,83,95,53,65,82,84,97,103,73,76,105,56,57,69,69,69,69,69,69,69,0,78,53,103,117,105,100,111,53,65,82,84,97,103,73,76,105,56,57,69,69,69,0,78,53,103,117,105,100,111,49,51,110,101,119,84,97,103,70,117,110,99,116,111,114,73,76,105,56,57,69,69,69,0,78,53,103,117,105,100,111,55,118,105,115,105,116,111,114,73,78,83,95,54,83,77,65,82,84,80,73,78,83,95,53,65,82,84,97,103,73,76,105,56,56,69,69,69,69,69,69,69,0,78,53,103,117,105,100,111,53,65,82,84,97,103,73,76,105,56,56,69,69,69,0,78,53,103,117,105,100,111,49,51,110,101,119,84,97,103,70,117,110,99,116,111,114,73,76,105,56,56,69,69,69,0,78,53,103,117,105,100,111,55,118,105,115,105,116,111,114,73,78,83,95,54,83,77,65,82,84,80,73,78,83,95,53,65,82,84,97,103,73,76,105,56,55,69,69,69,69,69,69,69,0,78,53,103,117,105,100,111,53,65,82,84,97,103,73,76,105,56,55,69,69,69,0,78,53,103,117,105,100,111,49,51,110,101,119,84,97,103,70,117,110,99,116,111,114,73,76,105,56,55,69,69,69,0,78,53,103,117,105,100,111,55,118,105,115,105,116,111,114,73,78,83,95,54,83,77,65,82,84,80,73,78,83,95,53,65,82,84,97,103,73,76,105,56,54,69,69,69,69,69,69,69,0,78,53,103,117,105,100,111,53,65,82,84,97,103,73,76,105,56,54,69,69,69,0,78,53,103,117,105,100,111,49,51,110,101,119,84,97,103,70,117,110,99,116,111,114,73,76,105,56,54,69,69,69,0,78,53,103,117,105,100,111,55,118,105,115,105,116,111,114,73,78,83,95,54,83,77,65,82,84,80,73,78,83,95,53,65,82,84,97,103,73,76,105,56,53,69,69,69,69,69,69,69,0,78,53,103,117,105,100,111,53,65,82,84,97,103,73,76,105,56,53,69,69,69,0,78,53,103,117,105,100,111,49,51,110,101,119,84,97,103,70,117,110,99,116,111,114,73,76,105,56,53,69,69,69,0,78,53,103,117,105,100,111,55,118,105,115,105,116,111,114,73,78,83,95,54,83,77,65,82,84,80,73,78,83,95,53,65,82,84,97,103,73,76,105,56,52,69,69,69,69,69,69,69,0,78,53,103,117,105,100,111,53,65,82,84,97,103,73,76,105,56,52,69,69,69,0,78,53,103,117,105,100,111,49,51,110,101,119,84,97,103,70,117,110,99,116,111,114,73,76,105,56,52,69,69,69,0,78,53,103,117,105,100,111,55,118,105,115,105,116,111,114,73,78,83,95,54,83,77,65,82,84,80,73,78,83,95,53,65,82,84,97,103,73,76,105,56,51,69,69,69,69,69,69,69,0,78,53,103,117,105,100,111,53,65,82,84,97,103,73,76,105,56,51,69,69,69,0,78,53,103,117,105,100,111,49,51,110,101,119,84,97,103,70,117,110,99,116,111,114,73,76,105,56,51,69,69,69,0,78,53,103,117,105,100,111,55,118,105,115,105,116,111,114,73,78,83,95,54,83,77,65,82,84,80,73,78,83,95,53,65,82,84,97,103,73,76,105,56,50,69,69,69,69,69,69,69,0,78,53,103,117,105,100,111,53,65,82,84,97,103,73,76,105,56,50,69,69,69,0,78,53,103,117,105,100,111,49,51,110,101,119,84,97,103,70,117,110,99,116,111,114,73,76,105,56,50,69,69,69,0,78,53,103,117,105,100,111,55,118,105,115,105,116,111,114,73,78,83,95,54,83,77,65,82,84,80,73,78,83,95,53,65,82,84,97,103,73,76,105,56,49,69,69,69,69,69,69,69,0,78,53,103,117,105,100,111,53,65,82,84,97,103,73,76,105,56,49,69,69,69,0,78,53,103,117,105,100,111,49,51,110,101,119,84,97,103,70,117,110,99,116,111,114,73,76,105,56,49,69,69,69,0,78,53,103,117,105,100,111,55,118,105,115,105,116,111,114,73,78,83,95,54,83,77,65,82,84,80,73,78,83,95,53,65,82,84,97,103,73,76,105,56,48,69,69,69,69,69,69,69,0,78,53,103,117,105,100,111,53,65,82,84,97,103,73,76,105,56,48,69,69,69,0,78,53,103,117,105,100,111,49,51,110,101,119,84,97,103,70,117,110,99,116,111,114,73,76,105,56,48,69,69,69,0,78,53,103,117,105,100,111,55,118,105,115,105,116,111,114,73,78,83,95,54,83,77,65,82,84,80,73,78,83,95,53,65,82,84,97,103,73,76,105,55,57,69,69,69,69,69,69,69,0,78,53,103,117,105,100,111,53,65,82,84,97,103,73,76,105,55,57,69,69,69,0,78,53,103,117,105,100,111,49,51,110,101,119,84,97,103,70,117,110,99,116,111,114,73,76,105,55,57,69,69,69,0,78,53,103,117,105,100,111,55,118,105,115,105,116,111,114,73,78,83,95,54,83,77,65,82,84,80,73,78,83,95,53,65,82,84,97,103,73,76,105,55,56,69,69,69,69,69,69,69,0,78,53,103,117,105,100,111,53,65,82,84,97,103,73,76,105,55,56,69,69,69,0,78,53,103,117,105,100,111,49,51,110,101,119,84,97,103,70,117,110,99,116,111,114,73,76,105,55,56,69,69,69,0,78,53,103,117,105,100,111,55,118,105,115,105,116,111,114,73,78,83,95,54,83,77,65,82,84,80,73,78,83,95,53,65,82,84,97,103,73,76,105,55,55,69,69,69,69,69,69,69,0,78,53,103,117,105,100,111,53,65,82,84,97,103,73,76,105,55,55,69,69,69,0,78,53,103,117,105,100,111,49,51,110,101,119,84,97,103,70,117,110,99,116,111,114,73,76,105,55,55,69,69,69,0,78,53,103,117,105,100,111,55,118,105,115,105,116,111,114,73,78,83,95,54,83,77,65,82,84,80,73,78,83,95,53,65,82,84,97,103,73,76,105,55,54,69,69,69,69,69,69,69,0,78,53,103,117,105,100,111,53,65,82,84,97,103,73,76,105,55,54,69,69,69,0,78,53,103,117,105,100,111,49,51,110,101,119,84,97,103,70,117,110,99,116,111,114,73,76,105,55,54,69,69,69,0,78,53,103,117,105,100,111,55,118,105,115,105,116,111,114,73,78,83,95,54,83,77,65,82,84,80,73,78,83,95,53,65,82,84,97,103,73,76,105,55,53,69,69,69,69,69,69,69,0,78,53,103,117,105,100,111,53,65,82,84,97,103,73,76,105,55,53,69,69,69,0,78,53,103,117,105,100,111,49,51,110,101,119,84,97,103,70,117,110,99,116,111,114,73,76,105,55,53,69,69,69,0,78,53,103,117,105,100,111,55,118,105,115,105,116,111,114,73,78,83,95,54,83,77,65,82,84,80,73,78,83,95,53,65,82,84,97,103,73,76,105,55,52,69,69,69,69,69,69,69,0,78,53,103,117,105,100,111,53,65,82,84,97,103,73,76,105,55,52,69,69,69,0,78,53,103,117,105,100,111,49,51,110,101,119,84,97,103,70,117,110,99,116,111,114,73,76,105,55,52,69,69,69,0,78,53,103,117,105,100,111,55,118,105,115,105,116,111,114,73,78,83,95,54,83,77,65,82,84,80,73,78,83,95,53,65,82,84,97,103,73,76,105,55,51,69,69,69,69,69,69,69,0,78,53,103,117,105,100,111,53,65,82,84,97,103,73,76,105,55,51,69,69,69,0,78,53,103,117,105,100,111,49,51,110,101,119,84,97,103,70,117,110,99,116,111,114,73,76,105,55,51,69,69,69,0,78,53,103,117,105,100,111,55,118,105,115,105,116,111,114,73,78,83,95,54,83,77,65,82,84,80,73,78,83,95,53,65,82,84,97,103,73,76,105,55,50,69,69,69,69,69,69,69,0,78,53,103,117,105,100,111,53,65,82,84,97,103,73,76,105,55,50,69,69,69,0,78,53,103,117,105,100,111,49,51,110,101,119,84,97,103,70,117,110,99,116,111,114,73,76,105,55,50,69,69,69,0,78,53,103,117,105,100,111,55,118,105,115,105,116,111,114,73,78,83,95,54,83,77,65,82,84,80,73,78,83,95,53,65,82,84,97,103,73,76,105,55,49,69,69,69,69,69,69,69,0,78,53,103,117,105,100,111,53,65,82,84,97,103,73,76,105,55,49,69,69,69,0,78,53,103,117,105,100,111,49,51,110,101,119,84,97,103,70,117,110,99,116,111,114,73,76,105,55,49,69,69,69,0,78,53,103,117,105,100,111,55,118,105,115,105,116,111,114,73,78,83,95,54,83,77,65,82,84,80,73,78,83,95,53,65,82,84,97,103,73,76,105,55,48,69,69,69,69,69,69,69,0,78,53,103,117,105,100,111,53,65,82,84,97,103,73,76,105,55,48,69,69,69,0,78,53,103,117,105,100,111,49,51,110,101,119,84,97,103,70,117,110,99,116,111,114,73,76,105,55,48,69,69,69,0,78,53,103,117,105,100,111,55,118,105,115,105,116,111,114,73,78,83,95,54,83,77,65,82,84,80,73,78,83,95,53,65,82,84,97,103,73,76,105,54,57,69,69,69,69,69,69,69,0,78,53,103,117,105,100,111,53,65,82,84,97,103,73,76,105,54,57,69,69,69,0,78,53,103,117,105,100,111,49,51,110,101,119,84,97,103,70,117,110,99,116,111,114,73,76,105,54,57,69,69,69,0,78,53,103,117,105,100,111,55,118,105,115,105,116,111,114,73,78,83,95,54,83,77,65,82,84,80,73,78,83,95,53,65,82,84,97,103,73,76,105,54,56,69,69,69,69,69,69,69,0,78,53,103,117,105,100,111,53,65,82,84,97,103,73,76,105,54,56,69,69,69,0,78,53,103,117,105,100,111,49,51,110,101,119,84,97,103,70,117,110,99,116,111,114,73,76,105,54,56,69,69,69,0,78,53,103,117,105,100,111,55,118,105,115,105,116,111,114,73,78,83,95,54,83,77,65,82,84,80,73,78,83,95,53,65,82,84,97,103,73,76,105,54,55,69,69,69,69,69,69,69,0,78,53,103,117,105,100,111,53,65,82,84,97,103,73,76,105,54,55,69,69,69,0,78,53,103,117,105,100,111,49,51,110,101,119,84,97,103,70,117,110,99,116,111,114,73,76,105,54,55,69,69,69,0,78,53,103,117,105,100,111,55,118,105,115,105,116,111,114,73,78,83,95,54,83,77,65,82,84,80,73,78,83,95,53,65,82,84,97,103,73,76,105,54,54,69,69,69,69,69,69,69,0,78,53,103,117,105,100,111,53,65,82,84,97,103,73,76,105,54,54,69,69,69,0,78,53,103,117,105,100,111,49,51,110,101,119,84,97,103,70,117,110,99,116,111,114,73,76,105,54,54,69,69,69,0,78,53,103,117,105,100,111,55,118,105,115,105,116,111,114,73,78,83,95,54,83,77,65,82,84,80,73,78,83,95,53,65,82,84,97,103,73,76,105,54,53,69,69,69,69,69,69,69,0,78,53,103,117,105,100,111,53,65,82,84,97,103,73,76,105,54,53,69,69,69,0,78,53,103,117,105,100,111,49,51,110,101,119,84,97,103,70,117,110,99,116,111,114,73,76,105,54,53,69,69,69,0,78,53,103,117,105,100,111,55,118,105,115,105,116,111,114,73,78,83,95,54,83,77,65,82,84,80,73,78,83,95,53,65,82,84,97,103,73,76,105,54,52,69,69,69,69,69,69,69,0,78,53,103,117,105,100,111,53,65,82,84,97,103,73,76,105,54,52,69,69,69,0,78,53,103,117,105,100,111,49,51,110,101,119,84,97,103,70,117,110,99,116,111,114,73,76,105,54,52,69,69,69,0,78,53,103,117,105,100,111,55,118,105,115,105,116,111,114,73,78,83,95,54,83,77,65,82,84,80,73,78,83,95,53,65,82,84,97,103,73,76,105,54,51,69,69,69,69,69,69,69,0,78,53,103,117,105,100,111,53,65,82,84,97,103,73,76,105,54,51,69,69,69,0,78,53,103,117,105,100,111,49,51,110,101,119,84,97,103,70,117,110,99,116,111,114,73,76,105,54,51,69,69,69,0,78,53,103,117,105,100,111,55,118,105,115,105,116,111,114,73,78,83,95,54,83,77,65,82,84,80,73,78,83,95,53,65,82,84,97,103,73,76,105,54,50,69,69,69,69,69,69,69,0,78,53,103,117,105,100,111,53,65,82,84,97,103,73,76,105,54,50,69,69,69,0,78,53,103,117,105,100,111,49,51,110,101,119,84,97,103,70,117,110,99,116,111,114,73,76,105,54,50,69,69,69,0,78,53,103,117,105,100,111,55,118,105,115,105,116,111,114,73,78,83,95,54,83,77,65,82,84,80,73,78,83,95,53,65,82,84,97,103,73,76,105,54,49,69,69,69,69,69,69,69,0,78,53,103,117,105,100,111,53,65,82,84,97,103,73,76,105,54,49,69,69,69,0,78,53,103,117,105,100,111,49,51,110,101,119,84,97,103,70,117,110,99,116,111,114,73,76,105,54,49,69,69,69,0,78,53,103,117,105,100,111,55,118,105,115,105,116,111,114,73,78,83,95,54,83,77,65,82,84,80,73,78,83,95,53,65,82,84,97,103,73,76,105,54,48,69,69,69,69,69,69,69,0,78,53,103,117,105,100,111,53,65,82,84,97,103,73,76,105,54,48,69,69,69,0,78,53,103,117,105,100,111,49,51,110,101,119,84,97,103,70,117,110,99,116,111,114,73,76,105,54,48,69,69,69,0,78,53,103,117,105,100,111,55,118,105,115,105,116,111,114,73,78,83,95,54,83,77,65,82,84,80,73,78,83,95,53,65,82,84,97,103,73,76,105,53,57,69,69,69,69,69,69,69,0,78,53,103,117,105,100,111,53,65,82,84,97,103,73,76,105,53,57,69,69,69,0,78,53,103,117,105,100,111,49,51,110,101,119,84,97,103,70,117,110,99,116,111,114,73,76,105,53,57,69,69,69,0,78,53,103,117,105,100,111,55,118,105,115,105,116,111,114,73,78,83,95,54,83,77,65,82,84,80,73,78,83,95,53,65,82,84,97,103,73,76,105,53,56,69,69,69,69,69,69,69,0,78,53,103,117,105,100,111,53,65,82,84,97,103,73,76,105,53,56,69,69,69,0,78,53,103,117,105,100,111,49,51,110,101,119,84,97,103,70,117,110,99,116,111,114,73,76,105,53,56,69,69,69,0,78,53,103,117,105,100,111,55,118,105,115,105,116,111,114,73,78,83,95,54,83,77,65,82,84,80,73,78,83,95,53,65,82,84,97,103,73,76,105,53,55,69,69,69,69,69,69,69,0,78,53,103,117,105,100,111,53,65,82,84,97,103,73,76,105,53,55,69,69,69,0,78,53,103,117,105,100,111,49,51,110,101,119,84,97,103,70,117,110,99,116,111,114,73,76,105,53,55,69,69,69,0,78,53,103,117,105,100,111,55,118,105,115,105,116,111,114,73,78,83,95,54,83,77,65,82,84,80,73,78,83,95,53,65,82,84,97,103,73,76,105,53,54,69,69,69,69,69,69,69,0,78,53,103,117,105,100,111,53,65,82,84,97,103,73,76,105,53,54,69,69,69,0,78,53,103,117,105,100,111,49,51,110,101,119,84,97,103,70,117,110,99,116,111,114,73,76,105,53,54,69,69,69,0,78,53,103,117,105,100,111,55,118,105,115,105,116,111,114,73,78,83,95,54,83,77,65,82,84,80,73,78,83,95,53,65,82,84,97,103,73,76,105,53,53,69,69,69,69,69,69,69,0,78,53,103,117,105,100,111,53,65,82,84,97,103,73,76,105,53,53,69,69,69,0,78,53,103,117,105,100,111,49,51,110,101,119,84,97,103,70,117,110,99,116,111,114,73,76,105,53,53,69,69,69,0,78,53,103,117,105,100,111,55,118,105,115,105,116,111,114,73,78,83,95,54,83,77,65,82,84,80,73,78,83,95,53,65,82,84,97,103,73,76,105,53,52,69,69,69,69,69,69,69,0,78,53,103,117,105,100,111,53,65,82,84,97,103,73,76,105,53,52,69,69,69,0,78,53,103,117,105,100,111,49,51,110,101,119,84,97,103,70,117,110,99,116,111,114,73,76,105,53,52,69,69,69,0,78,53,103,117,105,100,111,55,118,105,115,105,116,111,114,73,78,83,95,54,83,77,65,82,84,80,73,78,83,95,53,65,82,84,97,103,73,76,105,53,51,69,69,69,69,69,69,69,0,78,53,103,117,105,100,111,53,65,82,84,97,103,73,76,105,53,51,69,69,69,0,78,53,103,117,105,100,111,49,51,110,101,119,84,97,103,70,117,110,99,116,111,114,73,76,105,53,51,69,69,69,0,78,53,103,117,105,100,111,55,118,105,115,105,116,111,114,73,78,83,95,54,83,77,65,82,84,80,73,78,83,95,53,65,82,84,97,103,73,76,105,53,50,69,69,69,69,69,69,69,0,78,53,103,117,105,100,111,53,65,82,84,97,103,73,76,105,53,50,69,69,69,0,78,53,103,117,105,100,111,49,51,110,101,119,84,97,103,70,117,110,99,116,111,114,73,76,105,53,50,69,69,69,0,78,53,103,117,105,100,111,55,118,105,115,105,116,111,114,73,78,83,95,54,83,77,65,82,84,80,73,78,83,95,53,65,82,84,97,103,73,76,105,53,49,69,69,69,69,69,69,69,0,78,53,103,117,105,100,111,53,65,82,84,97,103,73,76,105,53,49,69,69,69,0,78,53,103,117,105,100,111,49,51,110,101,119,84,97,103,70,117,110,99,116,111,114,73,76,105,53,49,69,69,69,0,78,53,103,117,105,100,111,55,118,105,115,105,116,111,114,73,78,83,95,54,83,77,65,82,84,80,73,78,83,95,53,65,82,84,97,103,73,76,105,53,48,69,69,69,69,69,69,69,0,78,53,103,117,105,100,111,53,65,82,84,97,103,73,76,105,53,48,69,69,69,0,78,53,103,117,105,100,111,49,51,110,101,119,84,97,103,70,117,110,99,116,111,114,73,76,105,53,48,69,69,69,0,78,53,103,117,105,100,111,55,118,105,115,105,116,111,114,73,78,83,95,54,83,77,65,82,84,80,73,78,83,95,53,65,82,84,97,103,73,76,105,52,57,69,69,69,69,69,69,69,0,78,53,103,117,105,100,111,53,65,82,84,97,103,73,76,105,52,57,69,69,69,0,78,53,103,117,105,100,111,49,51,110,101,119,84,97,103,70,117,110,99,116,111,114,73,76,105,52,57,69,69,69,0,78,53,103,117,105,100,111,55,118,105,115,105,116,111,114,73,78,83,95,54,83,77,65,82,84,80,73,78,83,95,53,65,82,84,97,103,73,76,105,52,56,69,69,69,69,69,69,69,0,78,53,103,117,105,100,111,53,65,82,84,97,103,73,76,105,52,56,69,69,69,0,78,53,103,117,105,100,111,49,51,110,101,119,84,97,103,70,117,110,99,116,111,114,73,76,105,52,56,69,69,69,0,78,53,103,117,105,100,111,55,118,105,115,105,116,111,114,73,78,83,95,54,83,77,65,82,84,80,73,78,83,95,53,65,82,84,97,103,73,76,105,52,55,69,69,69,69,69,69,69,0,78,53,103,117,105,100,111,53,65,82,84,97,103,73,76,105,52,55,69,69,69,0,78,53,103,117,105,100,111,49,51,110,101,119,84,97,103,70,117,110,99,116,111,114,73,76,105,52,55,69,69,69,0,78,53,103,117,105,100,111,55,118,105,115,105,116,111,114,73,78,83,95,54,83,77,65,82,84,80,73,78,83,95,53,65,82,84,97,103,73,76,105,52,54,69,69,69,69,69,69,69,0,78,53,103,117,105,100,111,53,65,82,84,97,103,73,76,105,52,54,69,69,69,0,78,53,103,117,105,100,111,49,51,110,101,119,84,97,103,70,117,110,99,116,111,114,73,76,105,52,54,69,69,69,0,78,53,103,117,105,100,111,55,118,105,115,105,116,111,114,73,78,83,95,54,83,77,65,82,84,80,73,78,83,95,53,65,82,84,97,103,73,76,105,52,53,69,69,69,69,69,69,69,0,78,53,103,117,105,100,111,53,65,82,84,97,103,73,76,105,52,53,69,69,69,0,78,53,103,117,105,100,111,49,51,110,101,119,84,97,103,70,117,110,99,116,111,114,73,76,105,52,53,69,69,69,0,78,53,103,117,105,100,111,55,118,105,115,105,116,111,114,73,78,83,95,54,83,77,65,82,84,80,73,78,83,95,53,65,82,84,97,103,73,76,105,52,52,69,69,69,69,69,69,69,0,78,53,103,117,105,100,111,53,65,82,84,97,103,73,76,105,52,52,69,69,69,0,78,53,103,117,105,100,111,49,51,110,101,119,84,97,103,70,117,110,99,116,111,114,73,76,105,52,52,69,69,69,0,78,53,103,117,105,100,111,55,118,105,115,105,116,111,114,73,78,83,95,54,83,77,65,82,84,80,73,78,83,95,53,65,82,84,97,103,73,76,105,52,51,69,69,69,69,69,69,69,0,78,53,103,117,105,100,111,53,65,82,84,97,103,73,76,105,52,51,69,69,69,0,78,53,103,117,105,100,111,49,51,110,101,119,84,97,103,70,117,110,99,116,111,114,73,76,105,52,51,69,69,69,0,78,53,103,117,105,100,111,55,118,105,115,105,116,111,114,73,78,83,95,54,83,77,65,82,84,80,73,78,83,95,53,65,82,84,97,103,73,76,105,52,50,69,69,69,69,69,69,69,0,78,53,103,117,105,100,111,53,65,82,84,97,103,73,76,105,52,50,69,69,69,0,78,53,103,117,105,100,111,49,51,110,101,119,84,97,103,70,117,110,99,116,111,114,73,76,105,52,50,69,69,69,0,78,53,103,117,105,100,111,55,118,105,115,105,116,111,114,73,78,83,95,54,83,77,65,82,84,80,73,78,83,95,53,65,82,84,97,103,73,76,105,52,49,69,69,69,69,69,69,69,0,78,53,103,117,105,100,111,53,65,82,84,97,103,73,76,105,52,49,69,69,69,0,78,53,103,117,105,100,111,49,51,110,101,119,84,97,103,70,117,110,99,116,111,114,73,76,105,52,49,69,69,69,0,78,53,103,117,105,100,111,55,118,105,115,105,116,111,114,73,78,83,95,54,83,77,65,82,84,80,73,78,83,95,53,65,82,84,97,103,73,76,105,52,48,69,69,69,69,69,69,69,0,78,53,103,117,105,100,111,53,65,82,84,97,103,73,76,105,52,48,69,69,69,0,78,53,103,117,105,100,111,49,51,110,101,119,84,97,103,70,117,110,99,116,111,114,73,76,105,52,48,69,69,69,0,78,53,103,117,105,100,111,55,118,105,115,105,116,111,114,73,78,83,95,54,83,77,65,82,84,80,73,78,83,95,53,65,82,84,97,103,73,76,105,51,57,69,69,69,69,69,69,69,0,78,53,103,117,105,100,111,53,65,82,84,97,103,73,76,105,51,57,69,69,69,0,78,53,103,117,105,100,111,49,51,110,101,119,84,97,103,70,117,110,99,116,111,114,73,76,105,51,57,69,69,69,0,78,53,103,117,105,100,111,55,118,105,115,105,116,111,114,73,78,83,95,54,83,77,65,82,84,80,73,78,83,95,53,65,82,84,97,103,73,76,105,51,56,69,69,69,69,69,69,69,0,78,53,103,117,105,100,111,53,65,82,84,97,103,73,76,105,51,56,69,69,69,0,78,53,103,117,105,100,111,49,51,110,101,119,84,97,103,70,117,110,99,116,111,114,73,76,105,51,56,69,69,69,0,78,53,103,117,105,100,111,55,118,105,115,105,116,111,114,73,78,83,95,54,83,77,65,82,84,80,73,78,83,95,53,65,82,84,97,103,73,76,105,51,55,69,69,69,69,69,69,69,0,78,53,103,117,105,100,111,53,65,82,84,97,103,73,76,105,51,55,69,69,69,0,78,53,103,117,105,100,111,49,51,110,101,119,84,97,103,70,117,110,99,116,111,114,73,76,105,51,55,69,69,69,0,78,53,103,117,105,100,111,55,118,105,115,105,116,111,114,73,78,83,95,54,83,77,65,82,84,80,73,78,83,95,53,65,82,84,97,103,73,76,105,51,54,69,69,69,69,69,69,69,0,78,53,103,117,105,100,111,53,65,82,84,97,103,73,76,105,51,54,69,69,69,0,78,53,103,117,105,100,111,49,51,110,101,119,84,97,103,70,117,110,99,116,111,114,73,76,105,51,54,69,69,69,0,78,53,103,117,105,100,111,55,118,105,115,105,116,111,114,73,78,83,95,54,83,77,65,82,84,80,73,78,83,95,53,65,82,84,97,103,73,76,105,51,53,69,69,69,69,69,69,69,0,78,53,103,117,105,100,111,53,65,82,84,97,103,73,76,105,51,53,69,69,69,0,78,53,103,117,105,100,111,49,51,110,101,119,84,97,103,70,117,110,99,116,111,114,73,76,105,51,53,69,69,69,0,78,53,103,117,105,100,111,55,118,105,115,105,116,111,114,73,78,83,95,54,83,77,65,82,84,80,73,78,83,95,53,65,82,84,97,103,73,76,105,51,52,69,69,69,69,69,69,69,0,78,53,103,117,105,100,111,53,65,82,84,97,103,73,76,105,51,52,69,69,69,0,78,53,103,117,105,100,111,49,51,110,101,119,84,97,103,70,117,110,99,116,111,114,73,76,105,51,52,69,69,69,0,78,53,103,117,105,100,111,55,118,105,115,105,116,111,114,73,78,83,95,54,83,77,65,82,84,80,73,78,83,95,53,65,82,84,97,103,73,76,105,51,51,69,69,69,69,69,69,69,0,78,53,103,117,105,100,111,53,65,82,84,97,103,73,76,105,51,51,69,69,69,0,78,53,103,117,105,100,111,49,51,110,101,119,84,97,103,70,117,110,99,116,111,114,73,76,105,51,51,69,69,69,0,78,53,103,117,105,100,111,55,118,105,115,105,116,111,114,73,78,83,95,54,83,77,65,82,84,80,73,78,83,95,53,65,82,84,97,103,73,76,105,51,50,69,69,69,69,69,69,69,0,78,53,103,117,105,100,111,53,65,82,84,97,103,73,76,105,51,50,69,69,69,0,78,53,103,117,105,100,111,49,51,110,101,119,84,97,103,70,117,110,99,116,111,114,73,76,105,51,50,69,69,69,0,78,53,103,117,105,100,111,55,118,105,115,105,116,111,114,73,78,83,95,54,83,77,65,82,84,80,73,78,83,95,53,65,82,84,97,103,73,76,105,51,49,69,69,69,69,69,69,69,0,78,53,103,117,105,100,111,53,65,82,84,97,103,73,76,105,51,49,69,69,69,0,78,53,103,117,105,100,111,49,51,110,101,119,84,97,103,70,117,110,99,116,111,114,73,76,105,51,49,69,69,69,0,78,53,103,117,105,100,111,55,118,105,115,105,116,111,114,73,78,83,95,54,83,77,65,82,84,80,73,78,83,95,53,65,82,84,97,103,73,76,105,51,48,69,69,69,69,69,69,69,0,78,53,103,117,105,100,111,53,65,82,84,97,103,73,76,105,51,48,69,69,69,0,78,53,103,117,105,100,111,49,51,110,101,119,84,97,103,70,117,110,99,116,111,114,73,76,105,51,48,69,69,69,0,78,53,103,117,105,100,111,55,118,105,115,105,116,111,114,73,78,83,95,54,83,77,65,82,84,80,73,78,83,95,53,65,82,84,97,103,73,76,105,50,57,69,69,69,69,69,69,69,0,78,53,103,117,105,100,111,53,65,82,84,97,103,73,76,105,50,57,69,69,69,0,78,53,103,117,105,100,111,49,51,110,101,119,84,97,103,70,117,110,99,116,111,114,73,76,105,50,57,69,69,69,0,78,53,103,117,105,100,111,55,118,105,115,105,116,111,114,73,78,83,95,54,83,77,65,82,84,80,73,78,83,95,53,65,82,84,97,103,73,76,105,50,56,69,69,69,69,69,69,69,0,78,53,103,117,105,100,111,53,65,82,84,97,103,73,76,105,50,56,69,69,69,0,78,53,103,117,105,100,111,49,51,110,101,119,84,97,103,70,117,110,99,116,111,114,73,76,105,50,56,69,69,69,0,78,53,103,117,105,100,111,55,118,105,115,105,116,111,114,73,78,83,95,54,83,77,65,82,84,80,73,78,83,95,53,65,82,84,97,103,73,76,105,50,55,69,69,69,69,69,69,69,0,78,53,103,117,105,100,111,53,65,82,84,97,103,73,76,105,50,55,69,69,69,0,78,53,103,117,105,100,111,49,51,110,101,119,84,97,103,70,117,110,99,116,111,114,73,76,105,50,55,69,69,69,0,78,53,103,117,105,100,111,55,118,105,115,105,116,111,114,73,78,83,95,54,83,77,65,82,84,80,73,78,83,95,53,65,82,84,97,103,73,76,105,50,54,69,69,69,69,69,69,69,0,78,53,103,117,105,100,111,53,65,82,84,97,103,73,76,105,50,54,69,69,69,0,78,53,103,117,105,100,111,49,51,110,101,119,84,97,103,70,117,110,99,116,111,114,73,76,105,50,54,69,69,69,0,78,53,103,117,105,100,111,55,118,105,115,105,116,111,114,73,78,83,95,54,83,77,65,82,84,80,73,78,83,95,53,65,82,84,97,103,73,76,105,50,53,69,69,69,69,69,69,69,0,78,53,103,117,105,100,111,53,65,82,84,97,103,73,76,105,50,53,69,69,69,0,78,53,103,117,105,100,111,49,51,110,101,119,84,97,103,70,117,110,99,116,111,114,73,76,105,50,53,69,69,69,0,78,53,103,117,105,100,111,55,118,105,115,105,116,111,114,73,78,83,95,54,83,77,65,82,84,80,73,78,83,95,53,65,82,84,97,103,73,76,105,50,52,69,69,69,69,69,69,69,0,78,53,103,117,105,100,111,53,65,82,84,97,103,73,76,105,50,52,69,69,69,0,78,53,103,117,105,100,111,49,51,110,101,119,84,97,103,70,117,110,99,116,111,114,73,76,105,50,52,69,69,69,0,78,53,103,117,105,100,111,55,118,105,115,105,116,111,114,73,78,83,95,54,83,77,65,82,84,80,73,78,83,95,53,65,82,84,97,103,73,76,105,50,51,69,69,69,69,69,69,69,0,78,53,103,117,105,100,111,53,65,82,84,97,103,73,76,105,50,51,69,69,69,0,78,53,103,117,105,100,111,49,51,110,101,119,84,97,103,70,117,110,99,116,111,114,73,76,105,50,51,69,69,69,0,78,53,103,117,105,100,111,55,118,105,115,105,116,111,114,73,78,83,95,54,83,77,65,82,84,80,73,78,83,95,53,65,82,84,97,103,73,76,105,50,50,69,69,69,69,69,69,69,0,78,53,103,117,105,100,111,53,65,82,84,97,103,73,76,105,50,50,69,69,69,0,78,53,103,117,105,100,111,49,51,110,101,119,84,97,103,70,117,110,99,116,111,114,73,76,105,50,50,69,69,69,0,78,53,103,117,105,100,111,55,118,105,115,105,116,111,114,73,78,83,95,54,83,77,65,82,84,80,73,78,83,95,53,65,82,84,97,103,73,76,105,50,49,69,69,69,69,69,69,69,0,78,53,103,117,105,100,111,53,65,82,84,97,103,73,76,105,50,49,69,69,69,0,78,53,103,117,105,100,111,49,51,110,101,119,84,97,103,70,117,110,99,116,111,114,73,76,105,50,49,69,69,69,0,78,53,103,117,105,100,111,55,118,105,115,105,116,111,114,73,78,83,95,54,83,77,65,82,84,80,73,78,83,95,53,65,82,84,97,103,73,76,105,50,48,69,69,69,69,69,69,69,0,78,53,103,117,105,100,111,53,65,82,84,97,103,73,76,105,50,48,69,69,69,0,78,53,103,117,105,100,111,49,51,110,101,119,84,97,103,70,117,110,99,116,111,114,73,76,105,50,48,69,69,69,0,78,53,103,117,105,100,111,55,118,105,115,105,116,111,114,73,78,83,95,54,83,77,65,82,84,80,73,78,83,95,53,65,82,84,97,103,73,76,105,49,57,69,69,69,69,69,69,69,0,78,53,103,117,105,100,111,53,65,82,84,97,103,73,76,105,49,57,69,69,69,0,78,53,103,117,105,100,111,49,51,110,101,119,84,97,103,70,117,110,99,116,111,114,73,76,105,49,57,69,69,69,0,78,53,103,117,105,100,111,55,118,105,115,105,116,111,114,73,78,83,95,54,83,77,65,82,84,80,73,78,83,95,53,65,82,84,97,103,73,76,105,49,56,69,69,69,69,69,69,69,0,78,53,103,117,105,100,111,53,65,82,84,97,103,73,76,105,49,56,69,69,69,0,78,53,103,117,105,100,111,49,51,110,101,119,84,97,103,70,117,110,99,116,111,114,73,76,105,49,56,69,69,69,0,78],"i8",ALLOC_NONE,Runtime.GLOBAL_BASE+63124);allocate([53,103,117,105,100,111,55,118,105,115,105,116,111,114,73,78,83,95,54,83,77,65,82,84,80,73,78,83,95,53,65,82,84,97,103,73,76,105,49,55,69,69,69,69,69,69,69,0,78,53,103,117,105,100,111,53,65,82,84,97,103,73,76,105,49,55,69,69,69,0,78,53,103,117,105,100,111,49,51,110,101,119,84,97,103,70,117,110,99,116,111,114,73,76,105,49,55,69,69,69,0,78,53,103,117,105,100,111,55,118,105,115,105,116,111,114,73,78,83,95,54,83,77,65,82,84,80,73,78,83,95,53,65,82,84,97,103,73,76,105,49,54,69,69,69,69,69,69,69,0,78,53,103,117,105,100,111,53,65,82,84,97,103,73,76,105,49,54,69,69,69,0,78,53,103,117,105,100,111,49,51,110,101,119,84,97,103,70,117,110,99,116,111,114,73,76,105,49,54,69,69,69,0,78,53,103,117,105,100,111,55,118,105,115,105,116,111,114,73,78,83,95,54,83,77,65,82,84,80,73,78,83,95,53,65,82,84,97,103,73,76,105,49,53,69,69,69,69,69,69,69,0,78,53,103,117,105,100,111,53,65,82,84,97,103,73,76,105,49,53,69,69,69,0,78,53,103,117,105,100,111,49,51,110,101,119,84,97,103,70,117,110,99,116,111,114,73,76,105,49,53,69,69,69,0,78,53,103,117,105,100,111,55,118,105,115,105,116,111,114,73,78,83,95,54,83,77,65,82,84,80,73,78,83,95,53,65,82,84,97,103,73,76,105,49,52,69,69,69,69,69,69,69,0,78,53,103,117,105,100,111,53,65,82,84,97,103,73,76,105,49,52,69,69,69,0,78,53,103,117,105,100,111,49,51,110,101,119,84,97,103,70,117,110,99,116,111,114,73,76,105,49,52,69,69,69,0,78,53,103,117,105,100,111,55,118,105,115,105,116,111,114,73,78,83,95,54,83,77,65,82,84,80,73,78,83,95,53,65,82,84,97,103,73,76,105,49,51,69,69,69,69,69,69,69,0,78,53,103,117,105,100,111,53,65,82,84,97,103,73,76,105,49,51,69,69,69,0,78,53,103,117,105,100,111,49,51,110,101,119,84,97,103,70,117,110,99,116,111,114,73,76,105,49,51,69,69,69,0,78,53,103,117,105,100,111,55,118,105,115,105,116,111,114,73,78,83,95,54,83,77,65,82,84,80,73,78,83,95,53,65,82,84,97,103,73,76,105,49,50,69,69,69,69,69,69,69,0,78,53,103,117,105,100,111,53,65,82,84,97,103,73,76,105,49,50,69,69,69,0,78,53,103,117,105,100,111,49,51,110,101,119,84,97,103,70,117,110,99,116,111,114,73,76,105,49,50,69,69,69,0,78,53,103,117,105,100,111,55,118,105,115,105,116,111,114,73,78,83,95,54,83,77,65,82,84,80,73,78,83,95,53,65,82,84,97,103,73,76,105,49,49,69,69,69,69,69,69,69,0,78,53,103,117,105,100,111,53,65,82,84,97,103,73,76,105,49,49,69,69,69,0,78,53,103,117,105,100,111,49,51,110,101,119,84,97,103,70,117,110,99,116,111,114,73,76,105,49,49,69,69,69,0,78,53,103,117,105,100,111,55,118,105,115,105,116,111,114,73,78,83,95,54,83,77,65,82,84,80,73,78,83,95,53,65,82,84,97,103,73,76,105,49,48,69,69,69,69,69,69,69,0,78,53,103,117,105,100,111,53,65,82,84,97,103,73,76,105,49,48,69,69,69,0,78,53,103,117,105,100,111,49,51,110,101,119,84,97,103,70,117,110,99,116,111,114,73,76,105,49,48,69,69,69,0,78,53,103,117,105,100,111,54,65,82,78,111,116,101,69,0,100,111,0,114,101,0,109,105,0,102,97,0,115,111,108,0,108,97,0,115,105,0,116,105,0,99,105,115,0,100,105,115,0,102,105,115,0,103,105,115,0,97,105,115,0,78,83,116,51,95,95,49,49,57,98,97,115,105,99,95,111,115,116,114,105,110,103,115,116,114,101,97,109,73,99,78,83,95,49,49,99,104,97,114,95,116,114,97,105,116,115,73,99,69,69,78,83,95,57,97,108,108,111,99,97,116,111,114,73,99,69,69,69,69,0,78,53,103,117,105,100,111,55,65,82,77,117,115,105,99,69,0,78,53,103,117,105,100,111,55,65,82,86,111,105,99,101,69,0,78,53,103,117,105,100,111,55,118,105,115,105,116,111,114,73,78,83,95,54,83,77,65,82,84,80,73,78,83,95,55,65,82,86,111,105,99,101,69,69,69,69,69,0,78,53,103,117,105,100,111,55,118,105,115,105,116,111,114,73,78,83,95,54,83,77,65,82,84,80,73,78,83,95,55,65,82,77,117,115,105,99,69,69,69,69,69,0,78,53,103,117,105,100,111,56,103,117,105,100,111,116,97,103,69,0,66,101,103,105,110,0,69,110,100,0,61,0,34,0,114,101,102,67,111,117,110,116,32,61,61,32,48,0,126,115,109,97,114,116,97,98,108,101,0,78,53,103,117,105,100,111,55,118,105,115,105,116,111,114,73,78,83,95,54,83,77,65,82,84,80,73,78,83,95,56,103,117,105,100,111,116,97,103,69,69,69,69,69,0,49,46,48,48,0,78,53,103,117,105,100,111,49,51,114,112,97,114,79,112,101,114,97,116,105,111,110,69,0,78,53,103,117,105,100,111,57,111,112,101,114,97,116,105,111,110,69,0,78,53,103,117,105,100,111,49,48,102,119,98,119,118,101,99,116,111,114,73,78,83,95,49,50,112,105,116,99,104,118,105,115,105,116,111,114,54,84,80,105,116,99,104,69,69,69,0,78,83,116,51,95,95,49,54,118,101,99,116,111,114,73,78,53,103,117,105,100,111,49,50,112,105,116,99,104,118,105,115,105,116,111,114,54,84,80,105,116,99,104,69,78,83,95,57,97,108,108,111,99,97,116,111,114,73,83,51,95,69,69,69,69,0,78,83,116,51,95,95,49,49,51,95,95,118,101,99,116,111,114,95,98,97,115,101,73,78,53,103,117,105,100,111,49,50,112,105,116,99,104,118,105,115,105,116,111,114,54,84,80,105,116,99,104,69,78,83,95,57,97,108,108,111,99,97,116,111,114,73,83,51,95,69,69,69,69,0,78,83,116,51,95,95,49,50,48,95,95,118,101,99,116,111,114,95,98,97,115,101,95,99,111,109,109,111,110,73,76,98,49,69,69,69,0,78,53,103,117,105,100,111,50,51,112,105,116,99,104,72,105,103,104,65,112,112,108,121,79,112,101,114,97,116,105,111,110,73,78,83,95,49,48,102,119,98,119,118,101,99,116,111,114,73,78,83,95,49,50,112,105,116,99,104,118,105,115,105,116,111,114,54,84,80,105,116,99,104,69,69,69,69,69,0,78,53,103,117,105,100,111,49,57,112,105,116,99,104,65,112,112,108,121,79,112,101,114,97,116,105,111,110,73,78,83,95,49,48,102,119,98,119,118,101,99,116,111,114,73,78,83,95,49,50,112,105,116,99,104,118,105,115,105,116,111,114,54,84,80,105,116,99,104,69,69,69,69,69,0,78,53,103,117,105,100,111,49,50,102,119,98,119,73,116,101,114,97,116,111,114,73,78,83,95,49,50,112,105,116,99,104,118,105,115,105,116,111,114,54,84,80,105,116,99,104,69,69,69,0,78,83,116,51,95,95,49,56,105,116,101,114,97,116,111,114,73,78,83,95,49,56,105,110,112,117,116,95,105,116,101,114,97,116,111,114,95,116,97,103,69,78,53,103,117,105,100,111,49,50,112,105,116,99,104,118,105,115,105,116,111,114,54,84,80,105,116,99,104,69,105,80,83,52,95,82,83,52,95,69,69,0,78,53,103,117,105,100,111,49,48,114,105,110,103,118,101,99,116,111,114,73,78,83,95,49,50,112,105,116,99,104,118,105,115,105,116,111,114,54,84,80,105,116,99,104,69,69,69,0,78,53,103,117,105,100,111,50,51,112,105,116,99,104,72,105,103,104,65,112,112,108,121,79,112,101,114,97,116,105,111,110,73,78,83,95,49,48,114,105,110,103,118,101,99,116,111,114,73,78,83,95,49,50,112,105,116,99,104,118,105,115,105,116,111,114,54,84,80,105,116,99,104,69,69,69,69,69,0,78,53,103,117,105,100,111,49,57,112,105,116,99,104,65,112,112,108,121,79,112,101,114,97,116,105,111,110,73,78,83,95,49,48,114,105,110,103,118,101,99,116,111,114,73,78,83,95,49,50,112,105,116,99,104,118,105,115,105,116,111,114,54,84,80,105,116,99,104,69,69,69,69,69,0,78,53,103,117,105,100,111,49,56,114,105,110,103,118,101,99,116,111,114,73,116,101,114,97,116,111,114,73,78,83,95,49,50,112,105,116,99,104,118,105,115,105,116,111,114,54,84,80,105,116,99,104,69,69,69,0,78,53,103,117,105,100,111,50,51,112,105,116,99,104,72,105,103,104,65,112,112,108,121,79,112,101,114,97,116,105,111,110,73,78,83,116,51,95,95,49,54,118,101,99,116,111,114,73,78,83,95,49,50,112,105,116,99,104,118,105,115,105,116,111,114,54,84,80,105,116,99,104,69,78,83,49,95,57,97,108,108,111,99,97,116,111,114,73,83,52,95,69,69,69,69,69,69,0,78,53,103,117,105,100,111,49,57,112,105,116,99,104,65,112,112,108,121,79,112,101,114,97,116,105,111,110,73,78,83,116,51,95,95,49,54,118,101,99,116,111,114,73,78,83,95,49,50,112,105,116,99,104,118,105,115,105,116,111,114,54,84,80,105,116,99,104,69,78,83,49,95,57,97,108,108,111,99,97,116,111,114,73,83,52,95,69,69,69,69,69,69,0,78,53,103,117,105,100,111,50,50,112,105,116,99,104,76,111,119,65,112,112,108,121,79,112,101,114,97,116,105,111,110,73,78,83,95,49,48,102,119,98,119,118,101,99,116,111,114,73,78,83,95,49,50,112,105,116,99,104,118,105,115,105,116,111,114,54,84,80,105,116,99,104,69,69,69,69,69,0,78,53,103,117,105,100,111,50,50,112,105,116,99,104,76,111,119,65,112,112,108,121,79,112,101,114,97,116,105,111,110,73,78,83,95,49,48,114,105,110,103,118,101,99,116,111,114,73,78,83,95,49,50,112,105,116,99,104,118,105,115,105,116,111,114,54,84,80,105,116,99,104,69,69,69,69,69,0,78,53,103,117,105,100,111,50,50,112,105,116,99,104,76,111,119,65,112,112,108,121,79,112,101,114,97,116,105,111,110,73,78,83,116,51,95,95,49,54,118,101,99,116,111,114,73,78,83,95,49,50,112,105,116,99,104,118,105,115,105,116,111,114,54,84,80,105,116,99,104,69,78,83,49,95,57,97,108,108,111,99,97,116,111,114,73,83,52,95,69,69,69,69,69,69,0,78,53,103,117,105,100,111,49,48,102,119,98,119,118,101,99,116,111,114,73,56,114,97,116,105,111,110,97,108,69,69,0,78,83,116,51,95,95,49,54,118,101,99,116,111,114,73,56,114,97,116,105,111,110,97,108,78,83,95,57,97,108,108,111,99,97,116,111,114,73,83,49,95,69,69,69,69,0,78,83,116,51,95,95,49,49,51,95,95,118,101,99,116,111,114,95,98,97,115,101,73,56,114,97,116,105,111,110,97,108,78,83,95,57,97,108,108,111,99,97,116,111,114,73,83,49,95,69,69,69,69,0,78,53,103,117,105,100,111,49,50,102,119,98,119,73,116,101,114,97,116,111,114,73,56,114,97,116,105,111,110,97,108,69,69,0,78,83,116,51,95,95,49,56,105,116,101,114,97,116,111,114,73,78,83,95,49,56,105,110,112,117,116,95,105,116,101,114,97,116,111,114,95,116,97,103,69,56,114,97,116,105,111,110,97,108,105,80,83,50,95,82,83,50,95,69,69,0,78,53,103,117,105,100,111,49,57,114,121,116,104,109,65,112,112,108,121,79,112,101,114,97,116,105,111,110,73,78,83,95,49,48,102,119,98,119,118,101,99,116,111,114,73,56,114,97,116,105,111,110,97,108,69,69,69,69,0,78,53,103,117,105,100,111,49,48,114,105,110,103,118,101,99,116,111,114,73,56,114,97,116,105,111,110,97,108,69,69,0,78,53,103,117,105,100,111,49,56,114,105,110,103,118,101,99,116,111,114,73,116,101,114,97,116,111,114,73,56,114,97,116,105,111,110,97,108,69,69,0,78,53,103,117,105,100,111,49,57,114,121,116,104,109,65,112,112,108,121,79,112,101,114,97,116,105,111,110,73,78,83,95,49,48,114,105,110,103,118,101,99,116,111,114,73,56,114,97,116,105,111,110,97,108,69,69,69,69,0,78,53,103,117,105,100,111,49,57,114,121,116,104,109,65,112,112,108,121,79,112,101,114,97,116,105,111,110,73,78,83,116,51,95,95,49,54,118,101,99,116,111,114,73,56,114,97,116,105,111,110,97,108,78,83,49,95,57,97,108,108,111,99,97,116,111,114,73,83,51,95,69,69,69,69,69,69,0,49,56,115,116,114,101,97,109,98,101,97,117,116,105,102,117,108,108,101,114,0,78,53,103,117,105,100,111,49,53,98,111,116,116,111,109,79,112,101,114,97,116,105,111,110,69,0,78,53,103,117,105,100,111,49,55,100,117,114,97,116,105,111,110,79,112,101,114,97,116,105,111,110,69,0,78,53,103,117,105,100,111,49,52,101,104,101,97,100,79,112,101,114,97,116,105,111,110,69,0,78,53,103,117,105,100,111,49,52,101,116,97,105,108,79,112,101,114,97,116,105,111,110,69,0,78,53,103,117,105,100,111,49,51,104,101,97,100,79,112,101,114,97,116,105,111,110,69,0,111,112,101,110,101,100,0,98,101,103,105,110,0,101,110,100,0,98,101,103,105,110,45,101,110,100,0,99,108,111,115,101,100,0,78,53,103,117,105,100,111,49,53,109,105,114,114,111,114,79,112,101,114,97,116,105,111,110,69,0,78,53,103,117,105,100,111,49,50,112,97,114,79,112,101,114,97,116,105,111,110,69,0,78,53,103,117,105,100,111,49,54,102,105,114,115,116,110,111,116,101,99,104,101,99,107,101,114,69,0,78,53,103,117,105,100,111,50,51,112,105,116,99,104,65,112,112,108,121,66,97,115,101,79,112,101,114,97,116,105,111,110,69,0,78,53,103,117,105,100,111,49,51,111,99,116,97,118,101,86,105,115,105,116,111,114,69,0,78,53,103,117,105,100,111,50,51,114,121,116,104,109,65,112,112,108,121,66,97,115,101,79,112,101,114,97,116,105,111,110,69,0,78,53,103,117,105,100,111,49,50,115,101,113,79,112,101,114,97,116,105,111,110,69,0,78,53,103,117,105,100,111,49,48,115,101,113,67,108,101,97,110,101,114,69,0,107,101,121,0,78,53,103,117,105,100,111,49,51,99,108,111,115,101,100,82,101,109,111,118,101,114,69,0,78,53,103,117,105,100,111,49,50,99,111,117,110,116,118,105,115,105,116,111,114,73,78,83,95,54,83,77,65,82,84,80,73,78,83,95,53,65,82,84,97,103,73,76,105,54,50,69,69,69,69,69,69,69,0,78,53,103,117,105,100,111,49,51,116,97,105,108,79,112,101,114,97,116,105,111,110,69,0,116,105,101,0,78,53,103,117,105,100,111,49,50,116,111,112,79,112,101,114,97,116,105,111,110,69,0,78,53,103,117,105,100,111,49,56,116,114,97,110,115,112,111,115,101,79,112,101,114,97,116,105,111,110,69,0,116,114,97,110,115,112,111,115,101,58,32,112,105,116,99,104,32,111,117,116,32,111,102,32,102,105,102,116,104,32,99,121,99,108,101,32,116,97,98,108,101,32,40,0,41,0,67,38,0,97,38,0,97,0,67,35,0,97,35,0,68,38,0,98,38,0,104,38,0,68,0,98,0,104,0,68,35,0,98,35,0,104,35,0,69,38,0,99,0,69,0,99,35,0,69,35,0,70,38,0,100,38,0,70,0,100,0,70,35,0,100,35,0,71,38,0,101,38,0,71,0,101,0,71,35,0,101,35,0,65,38,0,102,0,65,0,102,35,0,65,35,0,66,38,0,72,38,0,103,0,66,0,72,0,103,35,0,66,35,0,72,35,0,101,109,112,116,121,0,102,114,101,101,0,78,53,103,117,105,100,111,49,49,103,117,105,100,111,112,97,114,115,101,114,69,0,95,0,32,111,110,32,108,105,110,101,32,0,78,53,103,117,105,100,111,57,103,109,110,114,101,97,100,101,114,69,0,111,117,116,32,111,102,32,100,121,110,97,109,105,99,32,109,101,109,111,114,121,32,105,110,32,103,117,105,100,111,97,114,101,110,115,117,114,101,95,98,117,102,102,101,114,95,115,116,97,99,107,40,41,0,0,103,117,105,100,111,32,101,120,116,114,97,32,116,101,120,116,32,105,115,32,58,32,37,115,10,0,102,97,116,97,108,32,102,108,101,120,32,115,99,97,110,110,101,114,32,105,110,116,101,114,110,97,108,32,101,114,114,111,114,45,45,101,110,100,32,111,102,32,98,117,102,102,101,114,32,109,105,115,115,101,100,0,102,97,116,97,108,32,101,114,114,111,114,32,45,32,115,99,97,110,110,101,114,32,105,110,112,117,116,32,98,117,102,102,101,114,32,111,118,101,114,102,108,111,119,0,105,110,112,117,116,32,105,110,32,102,108,101,120,32,115,99,97,110,110,101,114,32,102,97,105,108,101,100,0,111,117,116,32,111,102,32,100,121,110,97,109,105,99,32,109,101,109,111,114,121,32,105,110,32,121,121,95,103,101,116,95,110,101,120,116,95,98,117,102,102,101,114,40,41,0,102,97,116,97,108,32,102,108,101,120,32,115,99,97,110,110,101,114,32,105,110,116,101,114,110,97,108,32,101,114,114,111,114,45,45,110,111,32,97,99,116,105,111,110,32,102,111,117,110,100,0,111,117,116,32,111,102,32,100,121,110,97,109,105,99,32,109,101,109,111,114,121,32,105,110,32,103,117,105,100,111,97,114,95,99,114,101,97,116,101,95,98,117,102,102,101,114,40,41,0,111,117,116,32,111,102,32,100,121,110,97,109,105,99,32,109,101,109,111,114,121,32,105,110,32,103,117,105,100,111,97,114,95,115,99,97,110,95,98,117,102,102,101,114,40,41,0,111,117,116,32,111,102,32,100,121,110,97,109,105,99,32,109,101,109,111,114,121,32,105,110,32,103,117,105,100,111,97,114,95,115,99,97,110,95,98,121,116,101,115,40,41,0,98,97,100,32,98,117,102,102,101,114,32,105,110,32,103,117,105,100,111,97,114,95,115,99,97,110,95,98,121,116,101,115,40,41,0,52,5,188,63,188,188,188,7,188,50,188,188,10,58,188,188,188,188,188,188,188,255,188,16,188,61,73,188,188,188,188,13,76,188,56,40,188,8,188,58,188,85,86,86,19,188,87,2,188,188,188,188,188,13,188,53,188,188,188,188,88,58,188,58,188,8,56,8,80,60,188,188,188,188,29,188,188,188,188,188,188,12,62,64,66,188,53,19,82,84,188,188,8,53,86,188,188,2,2,188,188,19,188,188,188,19,188,188,188,188,188,188,0,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,9,9,42,43,55,3,4,5,6,37,11,31,1,8,9,8,3,4,5,9,87,19,15,12,12,17,18,15,37,13,39,32,33,53,101,86,7,35,105,67,27,28,93,14,25,26,17,18,8,20,21,22,23,24,94,15,65,7,67,7,10,9,61,0,63,74,74,17,18,13,20,21,22,23,24,17,18,16,20,21,22,23,24,92,11,32,33,11,3,3,3,3,12,33,12,31,34,31,14,45,53,98,53,97,39,255,255,98,23,28,69,70,87,48,49,50,76,65,41,59,8,6,2,11,48,49,50,2,102,77,12,33,96,15,16,97,64,45,66,42,43,59,110,101,13,78,111,92,51,52,105,95,71,72,15,16,62,17,18,19,20,21,106,63,91,13,64,1,14,2,89,10,90,23,28,15,16,61,17,18,19,20,21,15,16,46,17,18,19,20,21,91,47,42,43,60,68,48,75,88,93,94,103,99,98,100,104,74,85,108,86,107,67,0,0,109,0,0,9,0,2,5,3,0,6,0,1,4,0,0,8,21,18,52,53,54,55,62,11,13,14,19,15,12,10,45,44,60,50,7,42,0,33,35,40,0,39,0,0,0,66,9,0,0,70,71,72,58,59,60,56,62,74,75,76,61,0,0,32,0,42,37,43,36,0,64,65,67,68,46,0,20,73,69,26,28,30,0,27,23,22,57,62,66,0,0,34,43,38,62,0,17,16,0,0,25,24,66,48,51,41,66,63,31,29,27,49,47,0,2,1,2,3,1,1,3,3,0,2,2,2,1,1,1,4,4,1,1,3,1,1,1,2,2,1,1,1,3,1,3,3,1,3,1,2,2,3,1,1,4,1,2,1,1,3,6,4,5,1,4,1,1,1,1,1,2,1,1,0,1,0,4,2,2,0,1,1,1,1,1,1,1,1,1,1,117,110,107,110,111,119,110,32,116,97,103,0,98,97,114,0,0,37,38,39,39,39,40,40,41,42,42,42,42,43,43,44,44,45,46,47,47,47,48,48,48,48,48,48,49,49,50,50,51,52,52,53,53,53,53,54,54,55,56,56,57,57,58,58,59,59,60,60,61,61,61,61,62,62,63,63,64,64,65,65,65,65,66,66,66,67,68,69,70,71,72,72,72,188,188,188,188,11,54,188,247,188,188,188,3,6,188,188,188,1,65,188,228,248,188,188,188,188,188,47,49,205,189,9,216,188,188,188,236,255,3,4,7,5,9,22,34,24,25,26,79,80,81,27,35,36,37,38,39,40,29,30,31,32,53,54,55,44,73,82,56,57,58,83,84,115,121,110,116,97,120,32,101,114,114,111,114,0,109,101,109,111,114,121,32,101,120,104,97,117,115,116,101,100,0,37,115,10,0,78,53,103,117,105,100,111,49,50,99,108,111,110,101,118,105,115,105,116,111,114,69,0,78,53,103,117,105,100,111,49,56,99,111,117,110,116,101,118,101,110,116,115,118,105,115,105,116,111,114,69,0,78,53,103,117,105,100,111,49,53,100,117,114,97,116,105,111,110,118,105,115,105,116,111,114,69,0,78,53,103,117,105,100,111,49,55,101,118,101,110,116,50,116,105,109,101,118,105,115,105,116,111,114,69,0,78,53,103,117,105,100,111,49,55,102,105,114,115,116,112,105,116,99,104,118,105,115,105,116,111,114,69,0,78,53,103,117,105,100,111,49,48,103,109,110,118,105,115,105,116,111,114,69,0,41,32,0,44,32,0,10,124,32,0,10,32,0,32,0,123,0,10,0,125,0,123,32,0,125,32,0,91,0,44,10,10,0,78,53,103,117,105,100,111,49,50,116,114,101,101,73,116,101,114,97,116,111,114,73,78,83,95,54,83,77,65,82,84,80,73,78,83,95,49,50,103,117,105,100,111,101,108,101,109,101,110,116,69,69,69,69,69,0,78,83,116,51,95,95,49,56,105,116,101,114,97,116,111,114,73,78,83,95,49,56,105,110,112,117,116,95,105,116,101,114,97,116,111,114,95,116,97,103,69,78,53,103,117,105,100,111,54,83,77,65,82,84,80,73,78,83,50,95,49,50,103,117,105,100,111,101,108,101,109,101,110,116,69,69,69,105,80,83,53,95,82,83,53,95,69,69,0,78,53,103,117,105,100,111,49,50,112,105,116,99,104,118,105,115,105,116,111,114,69,0,78,53,103,117,105,100,111,49,50,114,121,116,104,109,118,105,115,105,116,111,114,69,0,111,112,101,114,97,116,111,114,42,0,78,53,103,117,105,100,111,50,50,117,110,114,111,108,108,101,100,95,103,117,105,100,111,95,98,114,111,119,115,101,114,69,0,102,83,109,97,114,116,80,116,114,32,33,61,32,48,0,46,46,47,46,46,47,115,114,99,47,108,105,98,47,115,109,97,114,116,112,111,105,110,116,101,114,46,104,0,111,112,101,114,97,116,111,114,45,62,0,114,101,102,67,111,117,110,116,32,33,61,32,48,0,97,100,100,82,101,102,101,114,101,110,99,101,0,78,53,103,117,105,100,111,55,98,114,111,119,115,101,114,73,78,83,95,54,83,77,65,82,84,80,73,78,83,95,49,50,103,117,105,100,111,101,108,101,109,101,110,116,69,69,69,69,69,0,103,97,114,79,117,116,0,118,105,0,101,114,114,0,105,105,105,0,118,105,105,105,0,115,116,114,0,114,97,116,105,111,110,97,108,0,110,117,109,0,100,101,110,111,109,0,103,97,114,69,114,114,0,107,78,111,69,114,114,0,107,73,110,118,97,108,105,100,70,105,108,101,0,107,73,110,118,97,108,105,100,65,114,103,117,109,101,110,116,0,107,79,112,101,114,97,116,105,111,110,70,97,105,108,101,100,0,84,65,112,112,108,121,77,111,100,101,0,107,65,112,112,108,121,79,110,99,101,0,107,65,112,112,108,121,70,111,114,119,97,114,100,76,111,111,112,0,107,65,112,112,108,121,70,111,114,119,97,114,100,66,97,99,107,119,97,114,100,76,111,111,112,0,99,104,111,114,100,80,105,116,99,104,77,111,100,101,0,107,85,115,101,76,111,119,101,115,116,0,107,85,115,101,72,105,103,104,101,115,116,0,103,117,105,100,111,97,114,86,101,114,115,105,111,110,0,102,105,0,103,117,105,100,111,97,114,86,101,114,115,105,111,110,83,116,114,105,110,103,0,105,105,0,103,109,110,50,117,110,114,111,108,108,101,100,0,103,109,110,86,84,114,97,110,112,111,115,101,0,105,105,105,105,0,103,109,110,71,84,114,97,110,112,111,115,101,0,103,109,110,86,84,111,112,0,103,109,110,71,84,111,112,0,103,109,110,86,66,111,116,116,111,109,0,103,109,110,71,66,111,116,116,111,109,0,103,109,110,86,72,101,97,100,0,103,109,110,71,72,101,97,100,0,103,109,110,86,69,72,101,97,100,0,103,109,110,71,69,72,101,97,100,0,103,109,110,86,84,97,105,108,0,103,109,110,71,84,97,105,108,0,103,109,110,86,69,84,97,105,108,0,103,109,110,71,69,84,97,105,108,0,103,109,110,71,83,101,113,0,103,109,110,71,80,97,114,0,103,109,110,71,82,80,97,114,0,103,109,110,71,77,105,114,114,111,114,0,103,109,110,71,83,101,116,68,117,114,97,116,105,111,110,0,103,109,110,65,112,112,108,121,82,121,116,104,109,0,105,105,105,105,105,0,103,109,110,65,112,112,108,121,80,105,116,99,104,0,105,105,105,105,105,105,0,103,109,110,86,83,101,116,68,117,114,97,116,105,111,110,0,103,109,110,86,77,117,108,116,68,117,114,97,116,105,111,110,0,105,105,105,102,0,103,109,110,99,104,101,99,107,0,103,109,110,68,117,114,97,116,105,111,110,0,103,109,110,69,118,50,84,105,109,101,0,78,53,103,117,105,100,111,49,52,99,104,111,114,100,80,105,116,99,104,77,111,100,101,69,0,78,53,103,117,105,100,111,49,48,84,65,112,112,108,121,77,111,100,101,69,0,56,114,97,116,105,111,110,97,108,0,78,83,116,51,95,95,49,49,50,98,97,115,105,99,95,115,116,114,105,110,103,73,99,78,83,95,49,49,99,104,97,114,95,116,114,97,105,116,115,73,99,69,69,78,83,95,57,97,108,108,111,99,97,116,111,114,73,99,69,69,69,69,0,78,83,116,51,95,95,49,50,49,95,95,98,97,115,105,99,95,115,116,114,105,110,103,95,99,111,109,109,111,110,73,76,98,49,69,69,69,0,78,53,103,117,105,100,111,54,103,97,114,69,114,114,69,0,54,103,97,114,79,117,116,0,118,111,105,100,0,98,111,111,108,0,99,104,97,114,0,115,105,103,110,101,100,32,99,104,97,114,0,117,110,115,105,103,110,101,100,32,99,104,97,114,0,115,104,111,114,116,0,117,110,115,105,103,110,101,100,32,115,104,111,114,116,0,105,110,116,0,117,110,115,105,103,110,101,100,32,105,110,116,0,108,111,110,103,0,117,110,115,105,103,110,101,100,32,108,111,110,103,0,102,108,111,97,116,0,100,111,117,98,108,101,0,115,116,100,58,58,115,116,114,105,110,103,0,115,116,100,58,58,98,97,115,105,99,95,115,116,114,105,110,103,60,117,110,115,105,103,110,101,100,32,99,104,97,114,62,0,115,116,100,58,58,119,115,116,114,105,110,103,0,101,109,115,99,114,105,112,116,101,110,58,58,118,97,108,0,101,109,115,99,114,105,112,116,101,110,58,58,109,101,109,111,114,121,95,118,105,101,119,60,99,104,97,114,62,0,101,109,115,99,114,105,112,116,101,110,58,58,109,101,109,111,114,121,95,118,105,101,119,60,115,105,103,110,101,100,32,99,104,97,114,62,0,101,109,115,99,114,105,112,116,101,110,58,58,109,101,109,111,114,121,95,118,105,101,119,60,117,110,115,105,103,110,101,100,32,99,104,97,114,62,0,101,109,115,99,114,105,112,116,101,110,58,58,109,101,109,111,114,121,95,118,105,101,119,60,115,104,111,114,116,62,0,101,109,115,99,114,105,112,116,101,110,58,58,109,101,109,111,114,121,95,118,105,101,119,60,117,110,115,105,103,110,101,100,32,115,104,111,114,116,62,0,101,109,115,99,114,105,112,116,101,110,58,58,109,101,109,111,114,121,95,118,105,101,119,60,105,110,116,62,0,101,109,115,99,114,105,112,116,101,110,58,58,109,101,109,111,114,121,95,118,105,101,119,60,117,110,115,105,103,110,101,100,32,105,110,116,62,0,101,109,115,99,114,105,112,116,101,110,58,58,109,101,109,111,114,121,95,118,105,101,119,60,108,111,110,103,62,0,101,109,115,99,114,105,112,116,101,110,58,58,109,101,109,111,114,121,95,118,105,101,119,60,117,110,115,105,103,110,101,100,32,108,111,110,103,62,0,101,109,115,99,114,105,112,116,101,110,58,58,109,101,109,111,114,121,95,118,105,101,119,60,105,110,116,56,95,116,62,0,101,109,115,99,114,105,112,116,101,110,58,58,109,101,109,111,114,121,95,118,105,101,119,60,117,105,110,116,56,95,116,62,0,101,109,115,99,114,105,112,116,101,110,58,58,109,101,109,111,114,121,95,118,105,101,119,60,105,110,116,49,54,95,116,62,0,101,109,115,99,114,105,112,116,101,110,58,58,109,101,109,111,114,121,95,118,105,101,119,60,117,105,110,116,49,54,95,116,62,0,101,109,115,99,114,105,112,116,101,110,58,58,109,101,109,111,114,121,95,118,105,101,119,60,105,110,116,51,50,95,116,62,0,101,109,115,99,114,105,112,116,101,110,58,58,109,101,109,111,114,121,95,118,105,101,119,60,117,105,110,116,51,50,95,116,62,0,101,109,115,99,114,105,112,116,101,110,58,58,109,101,109,111,114,121,95,118,105,101,119,60,102,108,111,97,116,62,0,101,109,115,99,114,105,112,116,101,110,58,58,109,101,109,111,114,121,95,118,105,101,119,60,100,111,117,98,108,101,62,0,101,109,115,99,114,105,112,116,101,110,58,58,109,101,109,111,114,121,95,118,105,101,119,60,108,111,110,103,32,100,111,117,98,108,101,62,0,78,49,48,101,109,115,99,114,105,112,116,101,110,49,49,109,101,109,111,114,121,95,118,105,101,119,73,101,69,69,0,78,49,48,101,109,115,99,114,105,112,116,101,110,49,49,109,101,109,111,114,121,95,118,105,101,119,73,100,69,69,0,78,49,48,101,109,115,99,114,105,112,116,101,110,49,49,109,101,109,111,114,121,95,118,105,101,119,73,102,69,69,0,78,49,48,101,109,115,99,114,105,112,116,101,110,49,49,109,101,109,111,114,121,95,118,105,101,119,73,109,69,69,0,78,49,48,101,109,115,99,114,105,112,116,101,110,49,49,109,101,109,111,114,121,95,118,105,101,119,73,108,69,69,0,78,49,48,101,109,115,99,114,105,112,116,101,110,49,49,109,101,109,111,114,121,95,118,105,101,119,73,106,69,69,0,78,49,48,101,109,115,99,114,105,112,116,101,110,49,49,109,101,109,111,114,121,95,118,105,101,119,73,105,69,69,0,78,49,48,101,109,115,99,114,105,112,116,101,110,49,49,109,101,109,111,114,121,95,118,105,101,119,73,116,69,69,0,78,49,48,101,109,115,99,114,105,112,116,101,110,49,49,109,101,109,111,114,121,95,118,105,101,119,73,115,69,69,0,78,49,48,101,109,115,99,114,105,112,116,101,110,49,49,109,101,109,111,114,121,95,118,105,101,119,73,104,69,69,0,78,49,48,101,109,115,99,114,105,112,116,101,110,49,49,109,101,109,111,114,121,95,118,105,101,119,73,97,69,69,0,78,49,48,101,109,115,99,114,105,112,116,101,110,49,49,109,101,109,111,114,121,95,118,105,101,119,73,99,69,69,0,78,49,48,101,109,115,99,114,105,112,116,101,110,51,118,97,108,69,0,78,83,116,51,95,95,49,49,50,98,97,115,105,99,95,115,116,114,105,110,103,73,119,78,83,95,49,49,99,104,97,114,95,116,114,97,105,116,115,73,119,69,69,78,83,95,57,97,108,108,111,99,97,116,111,114,73,119,69,69,69,69,0,78,83,116,51,95,95,49,49,50,98,97,115,105,99,95,115,116,114,105,110,103,73,104,78,83,95,49,49,99,104,97,114,95,116,114,97,105,116,115,73,104,69,69,78,83,95,57,97,108,108,111,99,97,116,111,114,73,104,69,69,69,69,0,83,116,57,98,97,100,95,97,108,108,111,99,0,83,116,57,101,120,99,101,112,116,105,111,110,0,83,116,57,116,121,112,101,95,105,110,102,111,0,78,49,48,95,95,99,120,120,97,98,105,118,49,49,54,95,95,115,104,105,109,95,116,121,112,101,95,105,110,102,111,69,0,78,49,48,95,95,99,120,120,97,98,105,118,49,49,55,95,95,99,108,97,115,115,95,116,121,112,101,95,105,110,102,111,69,0,78,49,48,95,95,99,120,120,97,98,105,118,49,49,57,95,95,112,111,105,110,116,101,114,95,116,121,112,101,95,105,110,102,111,69,0,78,49,48,95,95,99,120,120,97,98,105,118,49,49,55,95,95,112,98,97,115,101,95,116,121,112,101,95,105,110,102,111,69,0,78,49,48,95,95,99,120,120,97,98,105,118,49,50,51,95,95,102,117,110,100,97,109,101,110,116,97,108,95,116,121,112,101,95,105,110,102,111,69,0,118,0,115,0,105,0,106,0,109,0,78,49,48,95,95,99,120,120,97,98,105,118,49,49,54,95,95,101,110,117,109,95,116,121,112,101,95,105,110,102,111,69,0,78,49,48,95,95,99,120,120,97,98,105,118,49,50,48,95,95,115,105,95,99,108,97,115,115,95,116,121,112,101,95,105,110,102,111,69,0,78,49,48,95,95,99,120,120,97,98,105,118,49,50,49,95,95,118,109,105,95,99,108,97,115,115,95,116,121,112,101,95,105,110,102,111,69,0,33,34,98,97,115,105,99,95,115,116,114,105,110,103,32,108,101,110,103,116,104,95,101,114,114,111,114,34,0,47,85,115,101,114,115,47,102,111,98,101,114,47,115,114,99,47,101,109,115,100,107,95,112,111,114,116,97,98,108,101,47,101,109,115,99,114,105,112,116,101,110,47,49,46,51,53,46,48,47,115,121,115,116,101,109,47,105,110,99,108,117,100,101,47,108,105,98,99,120,120,47,115,116,114,105,110,103,0,95,95,116,104,114,111,119,95,108,101,110,103,116,104,95,101,114,114,111,114,0,33,34,118,101,99,116,111,114,32,108,101,110,103,116,104,95,101,114,114,111,114,34,0,47,85,115,101,114,115,47,102,111,98,101,114,47,115,114,99,47,101,109,115,100,107,95,112,111,114,116,97,98,108,101,47,101,109,115,99,114,105,112,116,101,110,47,49,46,51,53,46,48,47,115,121,115,116,101,109,47,105,110,99,108,117,100,101,47,108,105,98,99,120,120,47,118,101,99,116,111,114,0,112,116,104,114,101,97,100,95,111,110,99,101,32,102,97,105,108,117,114,101,32,105,110,32,95,95,99,120,97,95,103,101,116,95,103,108,111,98,97,108,115,95,102,97,115,116,40,41,0,115,116,100,58,58,98,97,100,95,97,108,108,111,99,0,116,101,114,109,105,110,97,116,101,95,104,97,110,100,108,101,114,32,117,110,101,120,112,101,99,116,101,100,108,121,32,114,101,116,117,114,110,101,100,0,99,97,110,110,111,116,32,99,114,101,97,116,101,32,112,116,104,114,101,97,100,32,107,101,121,32,102,111,114,32,95,95,99,120,97,95,103,101,116,95,103,108,111,98,97,108,115,40,41,0,99,97,110,110,111,116,32,122,101,114,111,32,111,117,116,32,116,104,114,101,97,100,32,118,97,108,117,101,32,102,111,114,32,95,95,99,120,97,95,103,101,116,95,103,108,111,98,97,108,115,40,41,0,33,34,98,97,115,105,99,95,115,116,114,105,110,103,32,111,117,116,95,111,102,95,114,97,110,103,101,34,0,95,95,116,104,114,111,119,95,111,117,116,95,111,102,95,114,97,110,103,101,0,116,101,114,109,105,110,97,116,105,110,103,32,119,105,116,104,32,37,115,32,101,120,99,101,112,116,105,111,110,32,111,102,32,116,121,112,101,32,37,115,58,32,37,115,0,116,101,114,109,105,110,97,116,105,110,103,32,119,105,116,104,32,37,115,32,101,120,99,101,112,116,105,111,110,32,111,102,32,116,121,112,101,32,37,115,0,116,101,114,109,105,110,97,116,105,110,103,32,119,105,116,104,32,37,115,32,102,111,114,101,105,103,110,32,101,120,99,101,112,116,105,111,110,0,116,101,114,109,105,110,97,116,105,110,103,0,117,110,99,97,117,103,104,116,0,84,33,34,25,13,1,2,3,17,75,28,12,16,4,11,29,18,30,39,104,110,111,112,113,98,32,5,6,15,19,20,21,26,8,22,7,40,36,23,24,9,10,14,27,31,37,35,131,130,125,38,42,43,60,61,62,63,67,71,74,77,88,89,90,91,92,93,94,95,96,97,99,100,101,102,103,105,106,107,108,114,115,116,121,122,123,124,0,73,108,108,101,103,97,108,32,98,121,116,101,32,115,101,113,117,101,110,99,101,0,68,111,109,97,105,110,32,101,114,114,111,114,0,82,101,115,117,108,116,32,110,111,116,32,114,101,112,114,101,115,101,110,116,97,98,108,101,0,78,111,116,32,97,32,116,116,121,0,80,101,114,109,105,115,115,105,111,110,32,100,101,110,105,101,100,0,79,112,101,114,97,116,105,111,110,32,110,111,116,32,112,101,114,109,105,116,116,101,100,0,78,111,32,115,117,99,104,32,102,105,108,101,32,111,114,32,100,105,114,101,99,116,111,114,121,0,78,111,32,115,117,99,104,32,112,114,111,99,101,115,115,0,70,105,108,101,32,101,120,105,115,116,115,0,86,97,108,117,101,32,116,111,111,32,108,97,114,103,101,32,102,111,114,32,100,97,116,97,32,116,121,112,101,0,78,111,32,115,112,97,99,101,32,108,101,102,116,32,111,110,32,100,101,118,105,99,101,0,79,117,116,32,111,102,32,109,101,109,111,114,121,0,82,101,115,111,117,114,99,101,32,98,117,115,121,0,73,110,116,101,114,114,117,112,116,101,100,32,115,121,115,116,101,109,32,99,97,108,108,0,82,101,115,111,117,114,99,101,32,116,101,109,112,111,114,97,114,105,108,121,32,117,110,97,118,97,105,108,97,98,108,101,0,73,110,118,97,108,105,100,32,115,101,101,107,0,67,114,111,115,115,45,100,101,118,105,99,101,32,108,105,110,107,0,82,101,97,100,45,111,110,108,121,32,102,105,108,101,32,115,121,115,116,101,109,0,68,105,114,101,99,116,111,114,121,32,110,111,116,32,101,109,112,116,121,0,67,111,110,110,101,99,116,105,111,110,32,114,101,115,101,116,32,98,121,32,112,101,101,114,0,79,112,101,114,97,116,105,111,110,32,116,105,109,101,100,32,111,117,116,0,67,111,110,110,101,99,116,105,111,110,32,114,101,102,117,115,101,100,0,72,111,115,116,32,105,115,32,100,111,119,110,0,72,111,115,116,32,105,115,32,117,110,114,101,97,99,104,97,98,108,101,0,65,100,100,114,101,115,115,32,105,110,32,117,115,101,0,66,114,111,107,101,110,32,112,105,112,101,0,73,47,79,32,101,114,114,111,114,0,78,111,32,115,117,99,104,32,100,101,118,105,99,101,32,111,114,32,97,100,100,114,101,115,115,0,66,108,111,99,107,32,100,101,118,105,99,101,32,114,101,113,117,105,114,101,100,0,78,111,32,115,117,99,104,32,100,101,118,105,99,101,0,78,111,116,32,97,32,100,105,114,101,99,116,111,114,121,0,73,115,32,97,32,100,105,114,101,99,116,111,114,121,0,84,101,120,116,32,102,105,108,101,32,98,117,115,121,0,69,120,101,99,32,102,111,114,109,97,116,32,101,114,114,111,114,0,73,110,118,97,108,105,100,32,97,114,103,117,109,101,110,116,0,65,114,103,117,109,101,110,116,32,108,105,115,116,32,116,111,111,32,108,111,110,103,0,83,121,109,98,111,108,105,99,32,108,105,110,107,32,108,111,111,112,0,70,105,108,101,110,97,109,101,32,116,111,111,32,108,111,110,103,0,84,111,111,32,109,97,110,121,32,111,112,101,110,32,102,105,108,101,115,32,105,110,32,115,121,115,116,101,109,0,78,111,32,102,105,108,101,32,100,101,115,99,114,105,112,116,111,114,115,32,97,118,97,105,108,97,98,108,101,0,66,97,100,32,102,105,108,101,32,100,101,115,99,114,105,112,116,111,114,0,78,111,32,99,104,105,108,100,32,112,114,111,99,101,115,115,0,66,97,100,32,97,100,100,114,101,115,115,0,70,105,108,101,32,116,111,111,32,108,97,114,103,101,0,84,111,111,32,109,97,110,121,32,108,105,110,107,115,0,78,111,32,108,111,99,107,115,32,97,118,97,105,108,97,98,108,101,0,82,101,115,111,117,114,99,101,32,100,101,97,100,108,111,99,107,32,119,111,117,108,100,32,111,99,99,117,114,0,83,116,97,116,101,32,110,111,116,32,114,101,99,111,118,101,114,97,98,108,101,0,80,114,101,118,105,111,117,115,32,111,119,110,101,114,32,100,105,101,100,0,79,112,101,114,97,116,105,111,110,32,99,97,110,99,101,108,101,100,0,70,117,110,99,116,105,111,110,32,110,111,116,32,105,109,112,108,101,109,101,110,116,101,100,0,78,111,32,109,101,115,115,97,103,101,32,111,102,32,100,101,115,105,114,101,100,32,116,121,112,101,0,73,100,101,110,116,105,102,105,101,114,32,114,101,109,111,118,101,100,0,68,101,118,105,99,101,32,110,111,116,32,97,32,115,116,114,101,97,109,0,78,111,32,100,97,116,97,32,97,118,97,105,108,97,98,108,101,0,68,101,118,105,99,101,32,116,105,109,101,111,117,116,0,79,117,116,32,111,102,32,115,116,114,101,97,109,115,32,114,101,115,111,117,114,99,101,115,0,76,105,110,107,32,104,97,115,32,98,101,101,110,32,115,101,118,101,114,101,100,0,80,114,111,116,111,99,111,108,32,101,114,114,111,114,0,66,97,100,32,109,101,115,115,97,103,101,0,70,105,108,101,32,100,101,115,99,114,105,112,116,111,114,32,105,110,32,98,97,100,32,115,116,97,116,101,0,78,111,116,32,97,32,115,111,99,107,101,116,0,68,101,115,116,105,110,97,116,105,111,110,32,97,100,100,114,101,115,115,32,114,101,113,117,105,114,101,100,0,77,101,115,115,97,103,101,32,116,111,111,32,108,97,114,103,101,0,80,114,111,116,111,99,111,108,32,119,114,111,110,103,32,116,121,112,101,32,102,111,114,32,115,111,99,107,101,116,0,80,114,111,116,111,99,111,108,32,110,111,116,32,97,118,97,105,108,97,98,108,101,0,80,114,111,116,111,99,111,108,32,110,111,116,32,115,117,112,112,111,114,116,101,100,0,83,111,99,107,101,116,32,116,121,112,101,32,110,111,116,32,115,117,112,112,111,114,116,101,100,0,78,111],"i8",ALLOC_NONE,Runtime.GLOBAL_BASE+73364);allocate([116,32,115,117,112,112,111,114,116,101,100,0,80,114,111,116,111,99,111,108,32,102,97,109,105,108,121,32,110,111,116,32,115,117,112,112,111,114,116,101,100,0,65,100,100,114,101,115,115,32,102,97,109,105,108,121,32,110,111,116,32,115,117,112,112,111,114,116,101,100,32,98,121,32,112,114,111,116,111,99,111,108,0,65,100,100,114,101,115,115,32,110,111,116,32,97,118,97,105,108,97,98,108,101,0,78,101,116,119,111,114,107,32,105,115,32,100,111,119,110,0,78,101,116,119,111,114,107,32,117,110,114,101,97,99,104,97,98,108,101,0,67,111,110,110,101,99,116,105,111,110,32,114,101,115,101,116,32,98,121,32,110,101,116,119,111,114,107,0,67,111,110,110,101,99,116,105,111,110,32,97,98,111,114,116,101,100,0,78,111,32,98,117,102,102,101,114,32,115,112,97,99,101,32,97,118,97,105,108,97,98,108,101,0,83,111,99,107,101,116,32,105,115,32,99,111,110,110,101,99,116,101,100,0,83,111,99,107,101,116,32,110,111,116,32,99,111,110,110,101,99,116,101,100,0,67,97,110,110,111,116,32,115,101,110,100,32,97,102,116,101,114,32,115,111,99,107,101,116,32,115,104,117,116,100,111,119,110,0,79,112,101,114,97,116,105,111,110,32,97,108,114,101,97,100,121,32,105,110,32,112,114,111,103,114,101,115,115,0,79,112,101,114,97,116,105,111,110,32,105,110,32,112,114,111,103,114,101,115,115,0,83,116,97,108,101,32,102,105,108,101,32,104,97,110,100,108,101,0,82,101,109,111,116,101,32,73,47,79,32,101,114,114,111,114,0,81,117,111,116,97,32,101,120,99,101,101,100,101,100,0,78,111,32,109,101,100,105,117,109,32,102,111,117,110,100,0,87,114,111,110,103,32,109,101,100,105,117,109,32,116,121,112,101,0,78,111,32,101,114,114,111,114,32,105,110,102,111,114,109,97,116,105,111,110,0,0,105,110,102,105,110,105,116,121,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,0,1,2,3,4,5,6,7,8,9,255,255,255,255,255,255,255,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,255,255,255,255,255,255,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,0,1,2,4,7,3,6,5,0,80,79,83,73,88,0,67,46,85,84,70,45,56],"i8",ALLOC_NONE,Runtime.GLOBAL_BASE+83604);allocate([17,0,10,0,17,17,17,0,0,0,0,5,0,0,0,0,0,0,9,0,0,0,0,11,0,0,0,0,0,0,0,0,17,0,15,10,17,17,17,3,10,7,0,1,19,9,11,11,0,0,9,6,11,0,0,11,0,6,17,0,0,0,17,17,17,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,11,0,0,0,0,0,0,0,0,17,0,10,10,17,17,17,0,10,0,0,2,0,9,11,0,0,0,9,0,11,0,0,11,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,12,0,0,0,0,0,0,0,0,0,0,0,12,0,0,0,0,12,0,0,0,0,9,12,0,0,0,0,0,12,0,0,12,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,14,0,0,0,0,0,0,0,0,0,0,0,13,0,0,0,4,13,0,0,0,0,9,14,0,0,0,0,0,14,0,0,14,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,16,0,0,0,0,0,0,0,0,0,0,0,15,0,0,0,0,15,0,0,0,0,9,16,0,0,0,0,0,16,0,0,16,0,0,18,0,0,0,18,18,18,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,18,0,0,0,18,18,18,0,0,0,0,0,0,9,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,11,0,0,0,0,0,0,0,0,0,0,0,10,0,0,0,0,10,0,0,0,0,9,11,0,0,0,0,0,11,0,0,11,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,12,0,0,0,0,0,0,0,0,0,0,0,12,0,0,0,0,12,0,0,0,0,9,12,0,0,0,0,0,12,0,0,12,0,0,48,49,50,51,52,53,54,55,56,57,65,66,67,68,69,70,45,43,32,32,32,48,88,48,120,0,40,110,117,108,108,41,0,45,48,88,43,48,88,32,48,88,45,48,120,43,48,120,32,48,120,0,105,110,102,0,73,78,70,0,110,97,110,0,78,65,78,0,46,0,0,78,83,116,51,95,95,49,49,49,95,95,115,116,100,111,117,116,98,117,102,73,119,69,69,0,117,110,115,117,112,112,111,114,116,101,100,32,108,111,99,97,108,101,32,102,111,114,32,115,116,97,110,100,97,114,100,32,105,110,112,117,116,0,78,83,116,51,95,95,49,49,48,95,95,115,116,100,105,110,98,117,102,73,119,69,69,0,78,83,116,51,95,95,49,49,49,95,95,115,116,100,111,117,116,98,117,102,73,99,69,69,0,78,83,116,51,95,95,49,49,48,95,95,115,116,100,105,110,98,117,102,73,99,69,69,0,78,83,116,51,95,95,49,56,105,111,115,95,98,97,115,101,69,0,78,83,116,51,95,95,49,57,98,97,115,105,99,95,105,111,115,73,99,78,83,95,49,49,99,104,97,114,95,116,114,97,105,116,115,73,99,69,69,69,69,0,78,83,116,51,95,95,49,57,98,97,115,105,99,95,105,111,115,73,119,78,83,95,49,49,99,104,97,114,95,116,114,97,105,116,115,73,119,69,69,69,69,0,78,83,116,51,95,95,49,49,53,98,97,115,105,99,95,115,116,114,101,97,109,98,117,102,73,99,78,83,95,49,49,99,104,97,114,95,116,114,97,105,116,115,73,99,69,69,69,69,0,78,83,116,51,95,95,49,49,53,98,97,115,105,99,95,115,116,114,101,97,109,98,117,102,73,119,78,83,95,49,49,99,104,97,114,95,116,114,97,105,116,115,73,119,69,69,69,69,0,78,83,116,51,95,95,49,49,51,98,97,115,105,99,95,105,115,116,114,101,97,109,73,99,78,83,95,49,49,99,104,97,114,95,116,114,97,105,116,115,73,99,69,69,69,69,0,78,83,116,51,95,95,49,49,51,98,97,115,105,99,95,105,115,116,114,101,97,109,73,119,78,83,95,49,49,99,104,97,114,95,116,114,97,105,116,115,73,119,69,69,69,69,0,78,83,116,51,95,95,49,49,51,98,97,115,105,99,95,111,115,116,114,101,97,109,73,99,78,83,95,49,49,99,104,97,114,95,116,114,97,105,116,115,73,99,69,69,69,69,0,78,83,116,51,95,95,49,49,51,98,97,115,105,99,95,111,115,116,114,101,97,109,73,119,78,83,95,49,49,99,104,97,114,95,116,114,97,105,116,115,73,119,69,69,69,69,0,78,83,116,51,95,95,49,49,52,98,97,115,105,99,95,105,111,115,116,114,101,97,109,73,99,78,83,95,49,49,99,104,97,114,95,116,114,97,105,116,115,73,99,69,69,69,69,0,48,49,50,51,52,53,54,55,56,57,97,98,99,100,101,102,65,66,67,68,69,70,120,88,43,45,112,80,105,73,110,78,0,78,83,116,51,95,95,49,54,108,111,99,97,108,101,53,102,97,99,101,116,69,0,78,83,116,51,95,95,49,53,99,116,121,112,101,73,119,69,69,0,78,83,116,51,95,95,49,55,99,111,100,101,99,118,116,73,99,99,49,49,95,95,109,98,115,116,97,116,101,95,116,69,69,0,78,83,116,51,95,95,49,55,99,111,100,101,99,118,116,73,68,115,99,49,49,95,95,109,98,115,116,97,116,101,95,116,69,69,0,78,83,116,51,95,95,49,55,99,111,100,101,99,118,116,73,68,105,99,49,49,95,95,109,98,115,116,97,116,101,95,116,69,69,0,78,83,116,51,95,95,49,49,54,95,95,110,97,114,114,111,119,95,116,111,95,117,116,102,56,73,76,106,51,50,69,69,69,0,78,83,116,51,95,95,49,49,55,95,95,119,105,100,101,110,95,102,114,111,109,95,117,116,102,56,73,76,106,51,50,69,69,69,0,78,83,116,51,95,95,49,55,99,111,100,101,99,118,116,73,119,99,49,49,95,95,109,98,115,116,97,116,101,95,116,69,69,0,78,83,116,51,95,95,49,54,108,111,99,97,108,101,53,95,95,105,109,112,69,0,78,83,116,51,95,95,49,55,99,111,108,108,97,116,101,73,99,69,69,0,78,83,116,51,95,95,49,55,99,111,108,108,97,116,101,73,119,69,69,0,78,83,116,51,95,95,49,53,99,116,121,112,101,73,99,69,69,0,78,83,116,51,95,95,49,56,110,117,109,112,117,110,99,116,73,99,69,69,0,78,83,116,51,95,95,49,56,110,117,109,112,117,110,99,116,73,119,69,69,0,78,83,116,51,95,95,49,55,110,117,109,95,103,101,116,73,99,78,83,95,49,57,105,115,116,114,101,97,109,98,117,102,95,105,116,101,114,97,116,111,114,73,99,78,83,95,49,49,99,104,97,114,95,116,114,97,105,116,115,73,99,69,69,69,69,69,69,0,78,83,116,51,95,95,49,55,110,117,109,95,103,101,116,73,119,78,83,95,49,57,105,115,116,114,101,97,109,98,117,102,95,105,116,101,114,97,116,111,114,73,119,78,83,95,49,49,99,104,97,114,95,116,114,97,105,116,115,73,119,69,69,69,69,69,69,0,78,83,116,51,95,95,49,55,110,117,109,95,112,117,116,73,99,78,83,95,49,57,111,115,116,114,101,97,109,98,117,102,95,105,116,101,114,97,116,111,114,73,99,78,83,95,49,49,99,104,97,114,95,116,114,97,105,116,115,73,99,69,69,69,69,69,69,0,78,83,116,51,95,95,49,55,110,117,109,95,112,117,116,73,119,78,83,95,49,57,111,115,116,114,101,97,109,98,117,102,95,105,116,101,114,97,116,111,114,73,119,78,83,95,49,49,99,104,97,114,95,116,114,97,105,116,115,73,119,69,69,69,69,69,69,0,78,83,116,51,95,95,49,56,116,105,109,101,95,103,101,116,73,99,78,83,95,49,57,105,115,116,114,101,97,109,98,117,102,95,105,116,101,114,97,116,111,114,73,99,78,83,95,49,49,99,104,97,114,95,116,114,97,105,116,115,73,99,69,69,69,69,69,69,0,78,83,116,51,95,95,49,56,116,105,109,101,95,103,101,116,73,119,78,83,95,49,57,105,115,116,114,101,97,109,98,117,102,95,105,116,101,114,97,116,111,114,73,119,78,83,95,49,49,99,104,97,114,95,116,114,97,105,116,115,73,119,69,69,69,69,69,69,0,78,83,116,51,95,95,49,56,116,105,109,101,95,112,117,116,73,99,78,83,95,49,57,111,115,116,114,101,97,109,98,117,102,95,105,116,101,114,97,116,111,114,73,99,78,83,95,49,49,99,104,97,114,95,116,114,97,105,116,115,73,99,69,69,69,69,69,69,0,78,83,116,51,95,95,49,56,116,105,109,101,95,112,117,116,73,119,78,83,95,49,57,111,115,116,114,101,97,109,98,117,102,95,105,116,101,114,97,116,111,114,73,119,78,83,95,49,49,99,104,97,114,95,116,114,97,105,116,115,73,119,69,69,69,69,69,69,0,78,83,116,51,95,95,49,49,48,109,111,110,101,121,112,117,110,99,116,73,99,76,98,48,69,69,69,0,78,83,116,51,95,95,49,49,48,109,111,110,101,121,112,117,110,99,116,73,99,76,98,49,69,69,69,0,78,83,116,51,95,95,49,49,48,109,111,110,101,121,112,117,110,99,116,73,119,76,98,48,69,69,69,0,78,83,116,51,95,95,49,49,48,109,111,110,101,121,112,117,110,99,116,73,119,76,98,49,69,69,69,0,78,83,116,51,95,95,49,57,109,111,110,101,121,95,103,101,116,73,99,78,83,95,49,57,105,115,116,114,101,97,109,98,117,102,95,105,116,101,114,97,116,111,114,73,99,78,83,95,49,49,99,104,97,114,95,116,114,97,105,116,115,73,99,69,69,69,69,69,69,0,78,83,116,51,95,95,49,57,109,111,110,101,121,95,103,101,116,73,119,78,83,95,49,57,105,115,116,114,101,97,109,98,117,102,95,105,116,101,114,97,116,111,114,73,119,78,83,95,49,49,99,104,97,114,95,116,114,97,105,116,115,73,119,69,69,69,69,69,69,0,78,83,116,51,95,95,49,57,109,111,110,101,121,95,112,117,116,73,99,78,83,95,49,57,111,115,116,114,101,97,109,98,117,102,95,105,116,101,114,97,116,111,114,73,99,78,83,95,49,49,99,104,97,114,95,116,114,97,105,116,115,73,99,69,69,69,69,69,69,0,78,83,116,51,95,95,49,57,109,111,110,101,121,95,112,117,116,73,119,78,83,95,49,57,111,115,116,114,101,97,109,98,117,102,95,105,116,101,114,97,116,111,114,73,119,78,83,95,49,49,99,104,97,114,95,116,114,97,105,116,115,73,119,69,69,69,69,69,69,0,78,83,116,51,95,95,49,56,109,101,115,115,97,103,101,115,73,99,69,69,0,78,83,116,51,95,95,49,56,109,101,115,115,97,103,101,115,73,119,69,69,0,37,112,0,67,0,37,0,0,0,0,0,108,0,108,108,0,0,76,0,37,112,0,0,0,0,37,72,58,37,77,58,37,83,37,109,47,37,100,47,37,121,37,89,45,37,109,45,37,100,37,73,58,37,77,58,37,83,32,37,112,37,72,58,37,77,37,72,58,37,77,58,37,83,48,49,50,51,52,53,54,55,56,57,0,37,76,102,0,48,49,50,51,52,53,54,55,56,57,0,37,46,48,76,102,0,116,114,117,101,0,102,97,108,115,101,0,83,117,110,100,97,121,0,77,111,110,100,97,121,0,84,117,101,115,100,97,121,0,87,101,100,110,101,115,100,97,121,0,84,104,117,114,115,100,97,121,0,70,114,105,100,97,121,0,83,97,116,117,114,100,97,121,0,83,117,110,0,77,111,110,0,84,117,101,0,87,101,100,0,84,104,117,0,70,114,105,0,83,97,116,0,74,97,110,117,97,114,121,0,70,101,98,114,117,97,114,121,0,77,97,114,99,104,0,65,112,114,105,108,0,77,97,121,0,74,117,110,101,0,74,117,108,121,0,65,117,103,117,115,116,0,83,101,112,116,101,109,98,101,114,0,79,99,116,111,98,101,114,0,78,111,118,101,109,98,101,114,0,68,101,99,101,109,98,101,114,0,74,97,110,0,70,101,98,0,77,97,114,0,65,112,114,0,74,117,110,0,74,117,108,0,65,117,103,0,83,101,112,0,79,99,116,0,78,111,118,0,68,101,99,0,65,77,0,80,77,0,37,109,47,37,100,47,37,121,0,37,72,58,37,77,58,37,83,0,37,97,32,37,98,32,37,100,32,37,72,58,37,77,58,37,83,32,37,89,0,37,73,58,37,77,58,37,83,32,37,112,0,78,83,116,51,95,95,49,49,51,109,101,115,115,97,103,101,115,95,98,97,115,101,69,0,78,83,116,51,95,95,49,49,49,95,95,109,111,110,101,121,95,112,117,116,73,119,69,69,0,78,83,116,51,95,95,49,49,49,95,95,109,111,110,101,121,95,112,117,116,73,99,69,69,0,78,83,116,51,95,95,49,49,49,95,95,109,111,110,101,121,95,103,101,116,73,119,69,69,0,78,83,116,51,95,95,49,49,49,95,95,109,111,110,101,121,95,103,101,116,73,99,69,69,0,78,83,116,51,95,95,49,49,48,109,111,110,101,121,95,98,97,115,101,69,0,78,83,116,51,95,95,49,49,48,95,95,116,105,109,101,95,112,117,116,69,0,78,83,116,51,95,95,49,50,48,95,95,116,105,109,101,95,103,101,116,95,99,95,115,116,111,114,97,103,101,73,119,69,69,0,78,83,116,51,95,95,49,50,48,95,95,116,105,109,101,95,103,101,116,95,99,95,115,116,111,114,97,103,101,73,99,69,69,0,78,83,116,51,95,95,49,57,116,105,109,101,95,98,97,115,101,69,0,78,83,116,51,95,95,49,57,95,95,110,117,109,95,112,117,116,73,119,69,69,0,78,83,116,51,95,95,49,49,52,95,95,110,117,109,95,112,117,116,95,98,97,115,101,69,0,78,83,116,51,95,95,49,57,95,95,110,117,109,95,112,117,116,73,99,69,69,0,78,83,116,51,95,95,49,57,95,95,110,117,109,95,103,101,116,73,119,69,69,0,78,83,116,51,95,95,49,49,52,95,95,110,117,109,95,103,101,116,95,98,97,115,101,69,0,78,83,116,51,95,95,49,57,95,95,110,117,109,95,103,101,116,73,99,69,69,0,78,83,116,51,95,95,49,49,50,99,111,100,101,99,118,116,95,98,97,115,101,69,0,78,83,116,51,95,95,49,49,48,99,116,121,112,101,95,98,97,115,101,69,0,78,83,116,51,95,95,49,49,52,95,95,115,104,97,114,101,100,95,99,111,117,110,116,69,0],"i8",ALLOC_NONE,Runtime.GLOBAL_BASE+86412);var tempDoublePtr=Runtime.alignMemory(allocate(12,"i8",ALLOC_STATIC),8);assert(tempDoublePtr%8==0);function copyTempFloat(ptr){HEAP8[tempDoublePtr]=HEAP8[ptr];HEAP8[tempDoublePtr+1]=HEAP8[ptr+1];HEAP8[tempDoublePtr+2]=HEAP8[ptr+2];HEAP8[tempDoublePtr+3]=HEAP8[ptr+3]}function copyTempDouble(ptr){HEAP8[tempDoublePtr]=HEAP8[ptr];HEAP8[tempDoublePtr+1]=HEAP8[ptr+1];HEAP8[tempDoublePtr+2]=HEAP8[ptr+2];HEAP8[tempDoublePtr+3]=HEAP8[ptr+3];HEAP8[tempDoublePtr+4]=HEAP8[ptr+4];HEAP8[tempDoublePtr+5]=HEAP8[ptr+5];HEAP8[tempDoublePtr+6]=HEAP8[ptr+6];HEAP8[tempDoublePtr+7]=HEAP8[ptr+7]}function _atexit(func,arg){__ATEXIT__.unshift({func:func,arg:arg})}function ___cxa_atexit(){return _atexit.apply(null,arguments)}var structRegistrations={};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 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)}function requireFunction(signature,rawFunction){signature=readLatin1String(signature);function makeDynCaller(dynCall){var args=[];for(var i=1;i0);info.refcount--;if(info.refcount===0){if(info.destructor){Runtime.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 ___resumeException(ptr){if(!EXCEPTIONS.last){EXCEPTIONS.last=ptr}EXCEPTIONS.clearRef(EXCEPTIONS.deAdjust(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(asm["setTempRet0"](0),0)|0}var info=EXCEPTIONS.infos[thrown];var throwntype=info.type;if(!throwntype){return(asm["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(asm["setTempRet0"](typeArray[i]),thrown)|0}}thrown=HEAP32[thrown>>2];return(asm["setTempRet0"](throwntype),thrown)|0}function ___cxa_throw(ptr,type,destructor){EXCEPTIONS.infos[ptr]={ptr:ptr,adjusted:ptr,type:type,destructor:destructor,refcount:0};EXCEPTIONS.last=ptr;if(!("uncaught_exception"in __ZSt18uncaught_exceptionv)){__ZSt18uncaught_exceptionv.uncaught_exception=1}else{__ZSt18uncaught_exceptionv.uncaught_exception++}throw ptr+" - Exception catching is disabled, this exception cannot be caught. Compile with -s DISABLE_EXCEPTION_CATCHING=0 or DISABLE_EXCEPTION_CATCHING=2 to catch."}Module["_memset"]=_memset;var _BDtoILow=true;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_register_bool(rawType,name,size,trueValue,falseValue){var shift=getShiftFromSize(size);name=readLatin1String(name);registerType(rawType,{name:name,"fromWireType":(function(wt){return!!wt}),"toWireType":(function(destructors,o){return o?trueValue:falseValue}),"argPackAdvance":8,"readValueFromPointer":(function(pointer){var heap;if(size===1){heap=HEAP8}else if(size===2){heap=HEAP16}else if(size===4){heap=HEAP32}else{throw new TypeError("Unknown boolean type size: "+name)}return this["fromWireType"](heap[pointer>>shift])}),destructorFunction:null})}function _pthread_mutex_lock(){}function __isLeapYear(year){return year%4===0&&(year%100!==0||year%400===0)}function __arraySum(array,index){var sum=0;for(var i=0;i<=index;sum+=array[i++]);return sum}var __MONTH_DAYS_LEAP=[31,29,31,30,31,30,31,31,30,31,30,31];var __MONTH_DAYS_REGULAR=[31,28,31,30,31,30,31,31,30,31,30,31];function __addDays(date,days){var newDate=new Date(date.getTime());while(days>0){var leap=__isLeapYear(newDate.getFullYear());var currentMonth=newDate.getMonth();var daysInCurrentMonth=(leap?__MONTH_DAYS_LEAP:__MONTH_DAYS_REGULAR)[currentMonth];if(days>daysInCurrentMonth-newDate.getDate()){days-=daysInCurrentMonth-newDate.getDate()+1;newDate.setDate(1);if(currentMonth<11){newDate.setMonth(currentMonth+1)}else{newDate.setMonth(0);newDate.setFullYear(newDate.getFullYear()+1)}}else{newDate.setDate(newDate.getDate()+days);return newDate}}return newDate}function _strftime(s,maxsize,format,tm){var tm_zone=HEAP32[tm+40>>2];var date={tm_sec:HEAP32[tm>>2],tm_min:HEAP32[tm+4>>2],tm_hour:HEAP32[tm+8>>2],tm_mday:HEAP32[tm+12>>2],tm_mon:HEAP32[tm+16>>2],tm_year:HEAP32[tm+20>>2],tm_wday:HEAP32[tm+24>>2],tm_yday:HEAP32[tm+28>>2],tm_isdst:HEAP32[tm+32>>2],tm_gmtoff:HEAP32[tm+36>>2],tm_zone:tm_zone?Pointer_stringify(tm_zone):""};var pattern=Pointer_stringify(format);var EXPANSION_RULES_1={"%c":"%a %b %d %H:%M:%S %Y","%D":"%m/%d/%y","%F":"%Y-%m-%d","%h":"%b","%r":"%I:%M:%S %p","%R":"%H:%M","%T":"%H:%M:%S","%x":"%m/%d/%y","%X":"%H:%M:%S"};for(var rule in EXPANSION_RULES_1){pattern=pattern.replace(new RegExp(rule,"g"),EXPANSION_RULES_1[rule])}var WEEKDAYS=["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"];var MONTHS=["January","February","March","April","May","June","July","August","September","October","November","December"];function leadingSomething(value,digits,character){var str=typeof value==="number"?value.toString():value||"";while(str.length0?1:0}var compare;if((compare=sgn(date1.getFullYear()-date2.getFullYear()))===0){if((compare=sgn(date1.getMonth()-date2.getMonth()))===0){compare=sgn(date1.getDate()-date2.getDate())}}return compare}function getFirstWeekStartDate(janFourth){switch(janFourth.getDay()){case 0:return new Date(janFourth.getFullYear()-1,11,29);case 1:return janFourth;case 2:return new Date(janFourth.getFullYear(),0,3);case 3:return new Date(janFourth.getFullYear(),0,2);case 4:return new Date(janFourth.getFullYear(),0,1);case 5:return new Date(janFourth.getFullYear()-1,11,31);case 6:return new Date(janFourth.getFullYear()-1,11,30)}}function getWeekBasedYear(date){var thisDate=__addDays(new Date(date.tm_year+1900,0,1),date.tm_yday);var janFourthThisYear=new Date(thisDate.getFullYear(),0,4);var janFourthNextYear=new Date(thisDate.getFullYear()+1,0,4);var firstWeekStartThisYear=getFirstWeekStartDate(janFourthThisYear);var firstWeekStartNextYear=getFirstWeekStartDate(janFourthNextYear);if(compareByDay(firstWeekStartThisYear,thisDate)<=0){if(compareByDay(firstWeekStartNextYear,thisDate)<=0){return thisDate.getFullYear()+1}else{return thisDate.getFullYear()}}else{return thisDate.getFullYear()-1}}var EXPANSION_RULES_2={"%a":(function(date){return WEEKDAYS[date.tm_wday].substring(0,3)}),"%A":(function(date){return WEEKDAYS[date.tm_wday]}),"%b":(function(date){return MONTHS[date.tm_mon].substring(0,3)}),"%B":(function(date){return MONTHS[date.tm_mon]}),"%C":(function(date){var year=date.tm_year+1900;return leadingNulls(year/100|0,2)}),"%d":(function(date){return leadingNulls(date.tm_mday,2)}),"%e":(function(date){return leadingSomething(date.tm_mday,2," ")}),"%g":(function(date){return getWeekBasedYear(date).toString().substring(2)}),"%G":(function(date){return getWeekBasedYear(date)}),"%H":(function(date){return leadingNulls(date.tm_hour,2)}),"%I":(function(date){return leadingNulls(date.tm_hour<13?date.tm_hour:date.tm_hour-12,2)}),"%j":(function(date){return leadingNulls(date.tm_mday+__arraySum(__isLeapYear(date.tm_year+1900)?__MONTH_DAYS_LEAP:__MONTH_DAYS_REGULAR,date.tm_mon-1),3)}),"%m":(function(date){return leadingNulls(date.tm_mon+1,2)}),"%M":(function(date){return leadingNulls(date.tm_min,2)}),"%n":(function(){return"\n"}),"%p":(function(date){if(date.tm_hour>0&&date.tm_hour<13){return"AM"}else{return"PM"}}),"%S":(function(date){return leadingNulls(date.tm_sec,2)}),"%t":(function(){return"\t"}),"%u":(function(date){var day=new Date(date.tm_year+1900,date.tm_mon+1,date.tm_mday,0,0,0,0);return day.getDay()||7}),"%U":(function(date){var janFirst=new Date(date.tm_year+1900,0,1);var firstSunday=janFirst.getDay()===0?janFirst:__addDays(janFirst,7-janFirst.getDay());var endDate=new Date(date.tm_year+1900,date.tm_mon,date.tm_mday);if(compareByDay(firstSunday,endDate)<0){var februaryFirstUntilEndMonth=__arraySum(__isLeapYear(endDate.getFullYear())?__MONTH_DAYS_LEAP:__MONTH_DAYS_REGULAR,endDate.getMonth()-1)-31;var firstSundayUntilEndJanuary=31-firstSunday.getDate();var days=firstSundayUntilEndJanuary+februaryFirstUntilEndMonth+endDate.getDate();return leadingNulls(Math.ceil(days/7),2)}return compareByDay(firstSunday,janFirst)===0?"01":"00"}),"%V":(function(date){var janFourthThisYear=new Date(date.tm_year+1900,0,4);var janFourthNextYear=new Date(date.tm_year+1901,0,4);var firstWeekStartThisYear=getFirstWeekStartDate(janFourthThisYear);var firstWeekStartNextYear=getFirstWeekStartDate(janFourthNextYear);var endDate=__addDays(new Date(date.tm_year+1900,0,1),date.tm_yday);if(compareByDay(endDate,firstWeekStartThisYear)<0){return"53"}if(compareByDay(firstWeekStartNextYear,endDate)<=0){return"01"}var daysDifference;if(firstWeekStartThisYear.getFullYear()=0;off=Math.abs(off)/60;off=off/60*100+off%60;return(ahead?"+":"-")+String("0000"+off).slice(-4)}),"%Z":(function(date){return date.tm_zone}),"%%":(function(){return"%"})};for(var rule in EXPANSION_RULES_2){if(pattern.indexOf(rule)>=0){pattern=pattern.replace(new RegExp(rule,"g"),EXPANSION_RULES_2[rule](date))}}var bytes=intArrayFromString(pattern,false);if(bytes.length>maxsize){return 0}writeArrayToMemory(bytes,s);return bytes.length-1}function _strftime_l(s,maxsize,format,tm){return _strftime(s,maxsize,format,tm)}function _abort(){Module["abort"]()}function _free(){}Module["_free"]=_free;function _malloc(bytes){var ptr=Runtime.dynamicAlloc(bytes+8);return ptr+8&4294967288}Module["_malloc"]=_malloc;function simpleReadValueFromPointer(pointer){return this["fromWireType"](HEAPU32[pointer>>2])}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]=value;return value}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 _sysconf(name){switch(name){case 30:return PAGE_SIZE;case 85:return totalMemory/PAGE_SIZE;case 132:case 133:case 12:case 137:case 138:case 15:case 235:case 16:case 17:case 18:case 19:case 20:case 149:case 13:case 10:case 236:case 153:case 9:case 21:case 22:case 159:case 154:case 14:case 77:case 78:case 139:case 80:case 81:case 82:case 68:case 67:case 164:case 11:case 29:case 47:case 48:case 95:case 52:case 51:case 46:return 200809;case 79:return 0;case 27:case 246:case 127:case 128:case 23:case 24:case 160:case 161:case 181:case 182:case 242:case 183:case 184:case 243:case 244:case 245:case 165:case 178:case 179:case 49:case 50:case 168:case 169:case 175:case 170:case 171:case 172:case 97:case 76:case 32:case 173:case 35:return-1;case 176:case 177:case 7:case 155:case 8:case 157:case 125:case 126:case 92:case 93:case 129:case 130:case 131:case 94:case 91:return 1;case 74:case 60:case 69:case 70:case 4:return 1024;case 31:case 42:case 72:return 32;case 87:case 26:case 33:return 2147483647;case 34:case 1:return 47839;case 38:case 36:return 99;case 43:case 37:return 2048;case 0:return 2097152;case 3:return 65536;case 28:return 32768;case 44:return 32767;case 75:return 16384;case 39:return 1e3;case 89:return 700;case 71:return 256;case 40:return 255;case 2:return 100;case 180:return 64;case 25:return 20;case 5:return 16;case 6:return 6;case 73:return 4;case 84:{if(typeof navigator==="object")return navigator["hardwareConcurrency"]||1;return 1}}___setErrNo(ERRNO_CODES.EINVAL);return-1}var _fabs=Math_abs;var PTHREAD_SPECIFIC_NEXT_KEY=1;function _pthread_key_create(key,destructor){if(key==0){return ERRNO_CODES.EINVAL}HEAP32[key>>2]=PTHREAD_SPECIFIC_NEXT_KEY;PTHREAD_SPECIFIC[PTHREAD_SPECIFIC_NEXT_KEY]=0;PTHREAD_SPECIFIC_NEXT_KEY++;return 0}function _embind_repr(v){if(v===null){return"null"}var t=typeof v;if(t==="object"||t==="array"||t==="function"){return v.toString()}else{return""+v}}function 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})}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 value|0}),"argPackAdvance":8,"readValueFromPointer":integerReadValueFromPointer(name,shift,minRange!==0),destructorFunction:null})}var ERRNO_MESSAGES={0:"Success",1:"Not super-user",2:"No such file or directory",3:"No such process",4:"Interrupted system call",5:"I/O error",6:"No such device or address",7:"Arg list too long",8:"Exec format error",9:"Bad file number",10:"No children",11:"No more processes",12:"Not enough core",13:"Permission denied",14:"Bad address",15:"Block device required",16:"Mount device busy",17:"File exists",18:"Cross-device link",19:"No such device",20:"Not a directory",21:"Is a directory",22:"Invalid argument",23:"Too many open files in system",24:"Too many open files",25:"Not a typewriter",26:"Text file busy",27:"File too large",28:"No space left on device",29:"Illegal seek",30:"Read only file system",31:"Too many links",32:"Broken pipe",33:"Math arg out of domain of func",34:"Math result not representable",35:"File locking deadlock error",36:"File or path name too long",37:"No record locks available",38:"Function not implemented",39:"Directory not empty",40:"Too many symbolic links",42:"No message of desired type",43:"Identifier removed",44:"Channel number out of range",45:"Level 2 not synchronized",46:"Level 3 halted",47:"Level 3 reset",48:"Link number out of range",49:"Protocol driver not attached",50:"No CSI structure available",51:"Level 2 halted",52:"Invalid exchange",53:"Invalid request descriptor",54:"Exchange full",55:"No anode",56:"Invalid request code",57:"Invalid slot",59:"Bad font file fmt",60:"Device not a stream",61:"No data (for no delay io)",62:"Timer expired",63:"Out of streams resources",64:"Machine is not on the network",65:"Package not installed",66:"The object is remote",67:"The link has been severed",68:"Advertise error",69:"Srmount error",70:"Communication error on send",71:"Protocol error",72:"Multihop attempted",73:"Cross mount point (not really error)",74:"Trying to read unreadable message",75:"Value too large for defined data type",76:"Given log. name not unique",77:"f.d. invalid for this operation",78:"Remote address changed",79:"Can access a needed shared lib",80:"Accessing a corrupted shared lib",81:".lib section in a.out corrupted",82:"Attempting to link in too many libs",83:"Attempting to exec a shared library",84:"Illegal byte sequence",86:"Streams pipe error",87:"Too many users",88:"Socket operation on non-socket",89:"Destination address required",90:"Message too long",91:"Protocol wrong type for socket",92:"Protocol not available",93:"Unknown protocol",94:"Socket type not supported",95:"Not supported",96:"Protocol family not supported",97:"Address family not supported by protocol family",98:"Address already in use",99:"Address not available",100:"Network interface is not configured",101:"Network is unreachable",102:"Connection reset by network",103:"Connection aborted",104:"Connection reset by peer",105:"No buffer space available",106:"Socket is already connected",107:"Socket is not connected",108:"Can't send after socket shutdown",109:"Too many references",110:"Connection timed out",111:"Connection refused",112:"Host is down",113:"Host is unreachable",114:"Socket already connected",115:"Connection already in progress",116:"Stale file handle",122:"Quota exceeded",123:"No medium (in tape drive)",125:"Operation canceled",130:"Previous owner died",131:"State not recoverable"};var TTY={ttys:[],init:(function(){}),shutdown:(function(){}),register:(function(dev,ops){TTY.ttys[dev]={input:[],output:[],ops:ops};FS.registerDevice(dev,TTY.stream_ops)}),stream_ops:{open:(function(stream){var tty=TTY.ttys[stream.node.rdev];if(!tty){throw new FS.ErrnoError(ERRNO_CODES.ENODEV)}stream.tty=tty;stream.seekable=false}),close:(function(stream){stream.tty.ops.flush(stream.tty)}),flush:(function(stream){stream.tty.ops.flush(stream.tty)}),read:(function(stream,buffer,offset,length,pos){if(!stream.tty||!stream.tty.ops.get_char){throw new FS.ErrnoError(ERRNO_CODES.ENXIO)}var bytesRead=0;for(var i=0;i0){result=buf.slice(0,bytesRead).toString("utf-8")}else{result=null}}else if(typeof window!="undefined"&&typeof window.prompt=="function"){result=window.prompt("Input: ");if(result!==null){result+="\n"}}else if(typeof readline=="function"){result=readline();if(result!==null){result+="\n"}}if(!result){return null}tty.input=intArrayFromString(result,true)}return tty.input.shift()}),put_char:(function(tty,val){if(val===null||val===10){Module["print"](UTF8ArrayToString(tty.output,0));tty.output=[]}else{if(val!=0)tty.output.push(val)}}),flush:(function(tty){if(tty.output&&tty.output.length>0){Module["print"](UTF8ArrayToString(tty.output,0));tty.output=[]}})},default_tty1_ops:{put_char:(function(tty,val){if(val===null||val===10){Module["printErr"](UTF8ArrayToString(tty.output,0));tty.output=[]}else{if(val!=0)tty.output.push(val)}}),flush:(function(tty){if(tty.output&&tty.output.length>0){Module["printErr"](UTF8ArrayToString(tty.output,0));tty.output=[]}})}};var MEMFS={ops_table:null,mount:(function(mount){return MEMFS.createNode(null,"/",16384|511,0)}),createNode:(function(parent,name,mode,dev){if(FS.isBlkdev(mode)||FS.isFIFO(mode)){throw new FS.ErrnoError(ERRNO_CODES.EPERM)}if(!MEMFS.ops_table){MEMFS.ops_table={dir:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr,lookup:MEMFS.node_ops.lookup,mknod:MEMFS.node_ops.mknod,rename:MEMFS.node_ops.rename,unlink:MEMFS.node_ops.unlink,rmdir:MEMFS.node_ops.rmdir,readdir:MEMFS.node_ops.readdir,symlink:MEMFS.node_ops.symlink},stream:{llseek:MEMFS.stream_ops.llseek}},file:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr},stream:{llseek:MEMFS.stream_ops.llseek,read:MEMFS.stream_ops.read,write:MEMFS.stream_ops.write,allocate:MEMFS.stream_ops.allocate,mmap:MEMFS.stream_ops.mmap,msync:MEMFS.stream_ops.msync}},link:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr,readlink:MEMFS.node_ops.readlink},stream:{}},chrdev:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr},stream:FS.chrdev_stream_ops}}}var node=FS.createNode(parent,name,mode,dev);if(FS.isDir(node.mode)){node.node_ops=MEMFS.ops_table.dir.node;node.stream_ops=MEMFS.ops_table.dir.stream;node.contents={}}else if(FS.isFile(node.mode)){node.node_ops=MEMFS.ops_table.file.node;node.stream_ops=MEMFS.ops_table.file.stream;node.usedBytes=0;node.contents=null}else if(FS.isLink(node.mode)){node.node_ops=MEMFS.ops_table.link.node;node.stream_ops=MEMFS.ops_table.link.stream}else if(FS.isChrdev(node.mode)){node.node_ops=MEMFS.ops_table.chrdev.node;node.stream_ops=MEMFS.ops_table.chrdev.stream}node.timestamp=Date.now();if(parent){parent.contents[name]=node}return node}),getFileDataAsRegularArray:(function(node){if(node.contents&&node.contents.subarray){var arr=[];for(var i=0;inode.contents.length){node.contents=MEMFS.getFileDataAsRegularArray(node);node.usedBytes=node.contents.length}if(!node.contents||node.contents.subarray){var prevCapacity=node.contents?node.contents.buffer.byteLength:0;if(prevCapacity>=newCapacity)return;var CAPACITY_DOUBLING_MAX=1024*1024;newCapacity=Math.max(newCapacity,prevCapacity*(prevCapacity0)node.contents.set(oldContents.subarray(0,node.usedBytes),0);return}if(!node.contents&&newCapacity>0)node.contents=[];while(node.contents.lengthnewSize)node.contents.length=newSize;else while(node.contents.length=stream.node.usedBytes)return 0;var size=Math.min(stream.node.usedBytes-position,length);assert(size>=0);if(size>8&&contents.subarray){buffer.set(contents.subarray(position,position+size),offset)}else{for(var i=0;i0||position+lengthe2.timestamp){create.push(key);total++}}));var remove=[];Object.keys(dst.entries).forEach((function(key){var e=dst.entries[key];var e2=src.entries[key];if(!e2){remove.push(key);total++}}));if(!total){return callback(null)}var errored=false;var completed=0;var db=src.type==="remote"?src.db:dst.db;var transaction=db.transaction([IDBFS.DB_STORE_NAME],"readwrite");var store=transaction.objectStore(IDBFS.DB_STORE_NAME);function done(err){if(err){if(!done.errored){done.errored=true;return callback(err)}return}if(++completed>=total){return callback(null)}}transaction.onerror=(function(e){done(this.error);e.preventDefault()});create.sort().forEach((function(path){if(dst.type==="local"){IDBFS.loadRemoteEntry(store,path,(function(err,entry){if(err)return done(err);IDBFS.storeLocalEntry(path,entry,done)}))}else{IDBFS.loadLocalEntry(path,(function(err,entry){if(err)return done(err);IDBFS.storeRemoteEntry(store,path,entry,done)}))}}));remove.sort().reverse().forEach((function(path){if(dst.type==="local"){IDBFS.removeLocalEntry(path,done)}else{IDBFS.removeRemoteEntry(store,path,done)}}))})};var NODEFS={isWindows:false,staticInit:(function(){NODEFS.isWindows=!!process.platform.match(/^win/)}),mount:(function(mount){assert(ENVIRONMENT_IS_NODE);return NODEFS.createNode(null,"/",NODEFS.getMode(mount.opts.root),0)}),createNode:(function(parent,name,mode,dev){if(!FS.isDir(mode)&&!FS.isFile(mode)&&!FS.isLink(mode)){throw new FS.ErrnoError(ERRNO_CODES.EINVAL)}var node=FS.createNode(parent,name,mode);node.node_ops=NODEFS.node_ops;node.stream_ops=NODEFS.stream_ops;return node}),getMode:(function(path){var stat;try{stat=fs.lstatSync(path);if(NODEFS.isWindows){stat.mode=stat.mode|(stat.mode&146)>>1}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(ERRNO_CODES[e.code])}return stat.mode}),realPath:(function(node){var parts=[];while(node.parent!==node){parts.push(node.name);node=node.parent}parts.push(node.mount.opts.root);parts.reverse();return PATH.join.apply(null,parts)}),flagsToPermissionStringMap:{0:"r",1:"r+",2:"r+",64:"r",65:"r+",66:"r+",129:"rx+",193:"rx+",514:"w+",577:"w",578:"w+",705:"wx",706:"wx+",1024:"a",1025:"a",1026:"a+",1089:"a",1090:"a+",1153:"ax",1154:"ax+",1217:"ax",1218:"ax+",4096:"rs",4098:"rs+"},flagsToPermissionString:(function(flags){flags&=~32768;if(flags in NODEFS.flagsToPermissionStringMap){return NODEFS.flagsToPermissionStringMap[flags]}else{throw new FS.ErrnoError(ERRNO_CODES.EINVAL)}}),node_ops:{getattr:(function(node){var path=NODEFS.realPath(node);var stat;try{stat=fs.lstatSync(path)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(ERRNO_CODES[e.code])}if(NODEFS.isWindows&&!stat.blksize){stat.blksize=4096}if(NODEFS.isWindows&&!stat.blocks){stat.blocks=(stat.size+stat.blksize-1)/stat.blksize|0}return{dev:stat.dev,ino:stat.ino,mode:stat.mode,nlink:stat.nlink,uid:stat.uid,gid:stat.gid,rdev:stat.rdev,size:stat.size,atime:stat.atime,mtime:stat.mtime,ctime:stat.ctime,blksize:stat.blksize,blocks:stat.blocks}}),setattr:(function(node,attr){var path=NODEFS.realPath(node);try{if(attr.mode!==undefined){fs.chmodSync(path,attr.mode);node.mode=attr.mode}if(attr.timestamp!==undefined){var date=new Date(attr.timestamp);fs.utimesSync(path,date,date)}if(attr.size!==undefined){fs.truncateSync(path,attr.size)}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(ERRNO_CODES[e.code])}}),lookup:(function(parent,name){var path=PATH.join2(NODEFS.realPath(parent),name);var mode=NODEFS.getMode(path);return NODEFS.createNode(parent,name,mode)}),mknod:(function(parent,name,mode,dev){var node=NODEFS.createNode(parent,name,mode,dev);var path=NODEFS.realPath(node);try{if(FS.isDir(node.mode)){fs.mkdirSync(path,node.mode)}else{fs.writeFileSync(path,"",{mode:node.mode})}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(ERRNO_CODES[e.code])}return node}),rename:(function(oldNode,newDir,newName){var oldPath=NODEFS.realPath(oldNode);var newPath=PATH.join2(NODEFS.realPath(newDir),newName);try{fs.renameSync(oldPath,newPath)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(ERRNO_CODES[e.code])}}),unlink:(function(parent,name){var path=PATH.join2(NODEFS.realPath(parent),name);try{fs.unlinkSync(path)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(ERRNO_CODES[e.code])}}),rmdir:(function(parent,name){var path=PATH.join2(NODEFS.realPath(parent),name);try{fs.rmdirSync(path)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(ERRNO_CODES[e.code])}}),readdir:(function(node){var path=NODEFS.realPath(node);try{return fs.readdirSync(path)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(ERRNO_CODES[e.code])}}),symlink:(function(parent,newName,oldPath){var newPath=PATH.join2(NODEFS.realPath(parent),newName);try{fs.symlinkSync(oldPath,newPath)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(ERRNO_CODES[e.code])}}),readlink:(function(node){var path=NODEFS.realPath(node);try{path=fs.readlinkSync(path);path=NODEJS_PATH.relative(NODEJS_PATH.resolve(node.mount.opts.root),path);return path}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(ERRNO_CODES[e.code])}})},stream_ops:{open:(function(stream){var path=NODEFS.realPath(stream.node);try{if(FS.isFile(stream.node.mode)){stream.nfd=fs.openSync(path,NODEFS.flagsToPermissionString(stream.flags))}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(ERRNO_CODES[e.code])}}),close:(function(stream){try{if(FS.isFile(stream.node.mode)&&stream.nfd){fs.closeSync(stream.nfd)}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(ERRNO_CODES[e.code])}}),read:(function(stream,buffer,offset,length,position){if(length===0)return 0;var nbuffer=new Buffer(length);var res;try{res=fs.readSync(stream.nfd,nbuffer,0,length,position)}catch(e){throw new FS.ErrnoError(ERRNO_CODES[e.code])}if(res>0){for(var i=0;i=stream.node.size)return 0;var chunk=stream.node.contents.slice(position,position+length);var ab=WORKERFS.reader.readAsArrayBuffer(chunk);buffer.set(new Uint8Array(ab),offset);return chunk.size}),write:(function(stream,buffer,offset,length,position){throw new FS.ErrnoError(ERRNO_CODES.EIO)}),llseek:(function(stream,offset,whence){var position=offset;if(whence===1){position+=stream.position}else if(whence===2){if(FS.isFile(stream.node.mode)){position+=stream.node.size}}if(position<0){throw new FS.ErrnoError(ERRNO_CODES.EINVAL)}return position})}};var _stdin=allocate(1,"i32*",ALLOC_STATIC);var _stdout=allocate(1,"i32*",ALLOC_STATIC);var _stderr=allocate(1,"i32*",ALLOC_STATIC);var FS={root:null,mounts:[],devices:[null],streams:[],nextInode:1,nameTable:null,currentPath:"/",initialized:false,ignorePermissions:true,trackingDelegate:{},tracking:{openFlags:{READ:1,WRITE:2}},ErrnoError:null,genericErrors:{},filesystems:null,handleFSError:(function(e){if(!(e instanceof FS.ErrnoError))throw e+" : "+stackTrace();return ___setErrNo(e.errno)}),lookupPath:(function(path,opts){path=PATH.resolve(FS.cwd(),path);opts=opts||{};if(!path)return{path:"",node:null};var defaults={follow_mount:true,recurse_count:0};for(var key in defaults){if(opts[key]===undefined){opts[key]=defaults[key]}}if(opts.recurse_count>8){throw new FS.ErrnoError(ERRNO_CODES.ELOOP)}var parts=PATH.normalizeArray(path.split("/").filter((function(p){return!!p})),false);var current=FS.root;var current_path="/";for(var i=0;i40){throw new FS.ErrnoError(ERRNO_CODES.ELOOP)}}}}return{path:current_path,node:current}}),getPath:(function(node){var path;while(true){if(FS.isRoot(node)){var mount=node.mount.mountpoint;if(!path)return mount;return mount[mount.length-1]!=="/"?mount+"/"+path:mount+path}path=path?node.name+"/"+path:node.name;node=node.parent}}),hashName:(function(parentid,name){var hash=0;for(var i=0;i>>0)%FS.nameTable.length}),hashAddNode:(function(node){var hash=FS.hashName(node.parent.id,node.name);node.name_next=FS.nameTable[hash];FS.nameTable[hash]=node}),hashRemoveNode:(function(node){var hash=FS.hashName(node.parent.id,node.name);if(FS.nameTable[hash]===node){FS.nameTable[hash]=node.name_next}else{var current=FS.nameTable[hash];while(current){if(current.name_next===node){current.name_next=node.name_next;break}current=current.name_next}}}),lookupNode:(function(parent,name){var err=FS.mayLookup(parent);if(err){throw new FS.ErrnoError(err,parent)}var hash=FS.hashName(parent.id,name);for(var node=FS.nameTable[hash];node;node=node.name_next){var nodeName=node.name;if(node.parent.id===parent.id&&nodeName===name){return node}}return FS.lookup(parent,name)}),createNode:(function(parent,name,mode,rdev){if(!FS.FSNode){FS.FSNode=(function(parent,name,mode,rdev){if(!parent){parent=this}this.parent=parent;this.mount=parent.mount;this.mounted=null;this.id=FS.nextInode++;this.name=name;this.mode=mode;this.node_ops={};this.stream_ops={};this.rdev=rdev});FS.FSNode.prototype={};var readMode=292|73;var writeMode=146;Object.defineProperties(FS.FSNode.prototype,{read:{get:(function(){return(this.mode&readMode)===readMode}),set:(function(val){val?this.mode|=readMode:this.mode&=~readMode})},write:{get:(function(){return(this.mode&writeMode)===writeMode}),set:(function(val){val?this.mode|=writeMode:this.mode&=~writeMode})},isFolder:{get:(function(){return FS.isDir(this.mode)})},isDevice:{get:(function(){return FS.isChrdev(this.mode)})}})}var node=new FS.FSNode(parent,name,mode,rdev);FS.hashAddNode(node);return node}),destroyNode:(function(node){FS.hashRemoveNode(node)}),isRoot:(function(node){return node===node.parent}),isMountpoint:(function(node){return!!node.mounted}),isFile:(function(mode){return(mode&61440)===32768}),isDir:(function(mode){return(mode&61440)===16384}),isLink:(function(mode){return(mode&61440)===40960}),isChrdev:(function(mode){return(mode&61440)===8192}),isBlkdev:(function(mode){return(mode&61440)===24576}),isFIFO:(function(mode){return(mode&61440)===4096}),isSocket:(function(mode){return(mode&49152)===49152}),flagModes:{"r":0,"rs":1052672,"r+":2,"w":577,"wx":705,"xw":705,"w+":578,"wx+":706,"xw+":706,"a":1089,"ax":1217,"xa":1217,"a+":1090,"ax+":1218,"xa+":1218},modeStringToFlags:(function(str){var flags=FS.flagModes[str];if(typeof flags==="undefined"){throw new Error("Unknown file open mode: "+str)}return flags}),flagsToPermissionString:(function(flag){var perms=["r","w","rw"][flag&3];if(flag&512){perms+="w"}return perms}),nodePermissions:(function(node,perms){if(FS.ignorePermissions){return 0}if(perms.indexOf("r")!==-1&&!(node.mode&292)){return ERRNO_CODES.EACCES}else if(perms.indexOf("w")!==-1&&!(node.mode&146)){return ERRNO_CODES.EACCES}else if(perms.indexOf("x")!==-1&&!(node.mode&73)){return ERRNO_CODES.EACCES}return 0}),mayLookup:(function(dir){var err=FS.nodePermissions(dir,"x");if(err)return err;if(!dir.node_ops.lookup)return ERRNO_CODES.EACCES;return 0}),mayCreate:(function(dir,name){try{var node=FS.lookupNode(dir,name);return ERRNO_CODES.EEXIST}catch(e){}return FS.nodePermissions(dir,"wx")}),mayDelete:(function(dir,name,isdir){var node;try{node=FS.lookupNode(dir,name)}catch(e){return e.errno}var err=FS.nodePermissions(dir,"wx");if(err){return err}if(isdir){if(!FS.isDir(node.mode)){return ERRNO_CODES.ENOTDIR}if(FS.isRoot(node)||FS.getPath(node)===FS.cwd()){return ERRNO_CODES.EBUSY}}else{if(FS.isDir(node.mode)){return ERRNO_CODES.EISDIR}}return 0}),mayOpen:(function(node,flags){if(!node){return ERRNO_CODES.ENOENT}if(FS.isLink(node.mode)){return ERRNO_CODES.ELOOP}else if(FS.isDir(node.mode)){if((flags&2097155)!==0||flags&512){return ERRNO_CODES.EISDIR}}return FS.nodePermissions(node,FS.flagsToPermissionString(flags))}),MAX_OPEN_FDS:4096,nextfd:(function(fd_start,fd_end){fd_start=fd_start||0;fd_end=fd_end||FS.MAX_OPEN_FDS;for(var fd=fd_start;fd<=fd_end;fd++){if(!FS.streams[fd]){return fd}}throw new FS.ErrnoError(ERRNO_CODES.EMFILE)}),getStream:(function(fd){return FS.streams[fd]}),createStream:(function(stream,fd_start,fd_end){if(!FS.FSStream){FS.FSStream=(function(){});FS.FSStream.prototype={};Object.defineProperties(FS.FSStream.prototype,{object:{get:(function(){return this.node}),set:(function(val){this.node=val})},isRead:{get:(function(){return(this.flags&2097155)!==1})},isWrite:{get:(function(){return(this.flags&2097155)!==0})},isAppend:{get:(function(){return this.flags&1024})}})}var newStream=new FS.FSStream;for(var p in stream){newStream[p]=stream[p]}stream=newStream;var fd=FS.nextfd(fd_start,fd_end);stream.fd=fd;FS.streams[fd]=stream;return stream}),closeStream:(function(fd){FS.streams[fd]=null}),chrdev_stream_ops:{open:(function(stream){var device=FS.getDevice(stream.node.rdev);stream.stream_ops=device.stream_ops;if(stream.stream_ops.open){stream.stream_ops.open(stream)}}),llseek:(function(){throw new FS.ErrnoError(ERRNO_CODES.ESPIPE)})},major:(function(dev){return dev>>8}),minor:(function(dev){return dev&255}),makedev:(function(ma,mi){return ma<<8|mi}),registerDevice:(function(dev,ops){FS.devices[dev]={stream_ops:ops}}),getDevice:(function(dev){return FS.devices[dev]}),getMounts:(function(mount){var mounts=[];var check=[mount];while(check.length){var m=check.pop();mounts.push(m);check.push.apply(check,m.mounts)}return mounts}),syncfs:(function(populate,callback){if(typeof populate==="function"){callback=populate;populate=false}var mounts=FS.getMounts(FS.root.mount);var completed=0;function done(err){if(err){if(!done.errored){done.errored=true;return callback(err)}return}if(++completed>=mounts.length){callback(null)}}mounts.forEach((function(mount){if(!mount.type.syncfs){return done(null)}mount.type.syncfs(mount,populate,done)}))}),mount:(function(type,opts,mountpoint){var root=mountpoint==="/";var pseudo=!mountpoint;var node;if(root&&FS.root){throw new FS.ErrnoError(ERRNO_CODES.EBUSY)}else if(!root&&!pseudo){var lookup=FS.lookupPath(mountpoint,{follow_mount:false});mountpoint=lookup.path;node=lookup.node;if(FS.isMountpoint(node)){throw new FS.ErrnoError(ERRNO_CODES.EBUSY)}if(!FS.isDir(node.mode)){throw new FS.ErrnoError(ERRNO_CODES.ENOTDIR)}}var mount={type:type,opts:opts,mountpoint:mountpoint,mounts:[]};var mountRoot=type.mount(mount);mountRoot.mount=mount;mount.root=mountRoot;if(root){FS.root=mountRoot}else if(node){node.mounted=mount;if(node.mount){node.mount.mounts.push(mount)}}return mountRoot}),unmount:(function(mountpoint){var lookup=FS.lookupPath(mountpoint,{follow_mount:false});if(!FS.isMountpoint(lookup.node)){throw new FS.ErrnoError(ERRNO_CODES.EINVAL)}var node=lookup.node;var mount=node.mounted;var mounts=FS.getMounts(mount);Object.keys(FS.nameTable).forEach((function(hash){var current=FS.nameTable[hash];while(current){var next=current.name_next;if(mounts.indexOf(current.mount)!==-1){FS.destroyNode(current)}current=next}}));node.mounted=null;var idx=node.mount.mounts.indexOf(mount);assert(idx!==-1);node.mount.mounts.splice(idx,1)}),lookup:(function(parent,name){return parent.node_ops.lookup(parent,name)}),mknod:(function(path,mode,dev){var lookup=FS.lookupPath(path,{parent:true});var parent=lookup.node;var name=PATH.basename(path);if(!name||name==="."||name===".."){throw new FS.ErrnoError(ERRNO_CODES.EINVAL)}var err=FS.mayCreate(parent,name);if(err){throw new FS.ErrnoError(err)}if(!parent.node_ops.mknod){throw new FS.ErrnoError(ERRNO_CODES.EPERM)}return parent.node_ops.mknod(parent,name,mode,dev)}),create:(function(path,mode){mode=mode!==undefined?mode:438;mode&=4095;mode|=32768;return FS.mknod(path,mode,0)}),mkdir:(function(path,mode){mode=mode!==undefined?mode:511;mode&=511|512;mode|=16384;return FS.mknod(path,mode,0)}),mkdev:(function(path,mode,dev){if(typeof dev==="undefined"){dev=mode;mode=438}mode|=8192;return FS.mknod(path,mode,dev)}),symlink:(function(oldpath,newpath){if(!PATH.resolve(oldpath)){throw new FS.ErrnoError(ERRNO_CODES.ENOENT)}var lookup=FS.lookupPath(newpath,{parent:true});var parent=lookup.node;if(!parent){throw new FS.ErrnoError(ERRNO_CODES.ENOENT)}var newname=PATH.basename(newpath);var err=FS.mayCreate(parent,newname);if(err){throw new FS.ErrnoError(err)}if(!parent.node_ops.symlink){throw new FS.ErrnoError(ERRNO_CODES.EPERM)}return parent.node_ops.symlink(parent,newname,oldpath)}),rename:(function(old_path,new_path){var old_dirname=PATH.dirname(old_path);var new_dirname=PATH.dirname(new_path);var old_name=PATH.basename(old_path);var new_name=PATH.basename(new_path);var lookup,old_dir,new_dir;try{lookup=FS.lookupPath(old_path,{parent:true});old_dir=lookup.node;lookup=FS.lookupPath(new_path,{parent:true});new_dir=lookup.node}catch(e){throw new FS.ErrnoError(ERRNO_CODES.EBUSY)}if(!old_dir||!new_dir)throw new FS.ErrnoError(ERRNO_CODES.ENOENT);if(old_dir.mount!==new_dir.mount){throw new FS.ErrnoError(ERRNO_CODES.EXDEV)}var old_node=FS.lookupNode(old_dir,old_name);var relative=PATH.relative(old_path,new_dirname);if(relative.charAt(0)!=="."){throw new FS.ErrnoError(ERRNO_CODES.EINVAL)}relative=PATH.relative(new_path,old_dirname);if(relative.charAt(0)!=="."){throw new FS.ErrnoError(ERRNO_CODES.ENOTEMPTY)}var new_node;try{new_node=FS.lookupNode(new_dir,new_name)}catch(e){}if(old_node===new_node){return}var isdir=FS.isDir(old_node.mode);var err=FS.mayDelete(old_dir,old_name,isdir);if(err){throw new FS.ErrnoError(err)}err=new_node?FS.mayDelete(new_dir,new_name,isdir):FS.mayCreate(new_dir,new_name);if(err){throw new FS.ErrnoError(err)}if(!old_dir.node_ops.rename){throw new FS.ErrnoError(ERRNO_CODES.EPERM)}if(FS.isMountpoint(old_node)||new_node&&FS.isMountpoint(new_node)){throw new FS.ErrnoError(ERRNO_CODES.EBUSY)}if(new_dir!==old_dir){err=FS.nodePermissions(old_dir,"w");if(err){throw new FS.ErrnoError(err)}}try{if(FS.trackingDelegate["willMovePath"]){FS.trackingDelegate["willMovePath"](old_path,new_path)}}catch(e){console.log("FS.trackingDelegate['willMovePath']('"+old_path+"', '"+new_path+"') threw an exception: "+e.message)}FS.hashRemoveNode(old_node);try{old_dir.node_ops.rename(old_node,new_dir,new_name)}catch(e){throw e}finally{FS.hashAddNode(old_node)}try{if(FS.trackingDelegate["onMovePath"])FS.trackingDelegate["onMovePath"](old_path,new_path)}catch(e){console.log("FS.trackingDelegate['onMovePath']('"+old_path+"', '"+new_path+"') threw an exception: "+e.message)}}),rmdir:(function(path){var lookup=FS.lookupPath(path,{parent:true});var parent=lookup.node;var name=PATH.basename(path);var node=FS.lookupNode(parent,name);var err=FS.mayDelete(parent,name,true);if(err){throw new FS.ErrnoError(err)}if(!parent.node_ops.rmdir){throw new FS.ErrnoError(ERRNO_CODES.EPERM)}if(FS.isMountpoint(node)){throw new FS.ErrnoError(ERRNO_CODES.EBUSY)}try{if(FS.trackingDelegate["willDeletePath"]){FS.trackingDelegate["willDeletePath"](path)}}catch(e){console.log("FS.trackingDelegate['willDeletePath']('"+path+"') threw an exception: "+e.message)}parent.node_ops.rmdir(parent,name);FS.destroyNode(node);try{if(FS.trackingDelegate["onDeletePath"])FS.trackingDelegate["onDeletePath"](path)}catch(e){console.log("FS.trackingDelegate['onDeletePath']('"+path+"') threw an exception: "+e.message)}}),readdir:(function(path){var lookup=FS.lookupPath(path,{follow:true});var node=lookup.node;if(!node.node_ops.readdir){throw new FS.ErrnoError(ERRNO_CODES.ENOTDIR)}return node.node_ops.readdir(node)}),unlink:(function(path){var lookup=FS.lookupPath(path,{parent:true});var parent=lookup.node;var name=PATH.basename(path);var node=FS.lookupNode(parent,name);var err=FS.mayDelete(parent,name,false);if(err){if(err===ERRNO_CODES.EISDIR)err=ERRNO_CODES.EPERM;throw new FS.ErrnoError(err)}if(!parent.node_ops.unlink){throw new FS.ErrnoError(ERRNO_CODES.EPERM)}if(FS.isMountpoint(node)){throw new FS.ErrnoError(ERRNO_CODES.EBUSY)}try{if(FS.trackingDelegate["willDeletePath"]){FS.trackingDelegate["willDeletePath"](path)}}catch(e){console.log("FS.trackingDelegate['willDeletePath']('"+path+"') threw an exception: "+e.message)}parent.node_ops.unlink(parent,name);FS.destroyNode(node);try{if(FS.trackingDelegate["onDeletePath"])FS.trackingDelegate["onDeletePath"](path)}catch(e){console.log("FS.trackingDelegate['onDeletePath']('"+path+"') threw an exception: "+e.message)}}),readlink:(function(path){var lookup=FS.lookupPath(path);var link=lookup.node;if(!link){throw new FS.ErrnoError(ERRNO_CODES.ENOENT)}if(!link.node_ops.readlink){throw new FS.ErrnoError(ERRNO_CODES.EINVAL)}return PATH.resolve(FS.getPath(link.parent),link.node_ops.readlink(link))}),stat:(function(path,dontFollow){var lookup=FS.lookupPath(path,{follow:!dontFollow});var node=lookup.node;if(!node){throw new FS.ErrnoError(ERRNO_CODES.ENOENT)}if(!node.node_ops.getattr){throw new FS.ErrnoError(ERRNO_CODES.EPERM)}return node.node_ops.getattr(node)}),lstat:(function(path){return FS.stat(path,true)}),chmod:(function(path,mode,dontFollow){var node;if(typeof path==="string"){var lookup=FS.lookupPath(path,{follow:!dontFollow});node=lookup.node}else{node=path}if(!node.node_ops.setattr){throw new FS.ErrnoError(ERRNO_CODES.EPERM)}node.node_ops.setattr(node,{mode:mode&4095|node.mode&~4095,timestamp:Date.now()})}),lchmod:(function(path,mode){FS.chmod(path,mode,true)}),fchmod:(function(fd,mode){var stream=FS.getStream(fd);if(!stream){throw new FS.ErrnoError(ERRNO_CODES.EBADF)}FS.chmod(stream.node,mode)}),chown:(function(path,uid,gid,dontFollow){var node;if(typeof path==="string"){var lookup=FS.lookupPath(path,{follow:!dontFollow});node=lookup.node}else{node=path}if(!node.node_ops.setattr){throw new FS.ErrnoError(ERRNO_CODES.EPERM)}node.node_ops.setattr(node,{timestamp:Date.now()})}),lchown:(function(path,uid,gid){FS.chown(path,uid,gid,true)}),fchown:(function(fd,uid,gid){var stream=FS.getStream(fd);if(!stream){throw new FS.ErrnoError(ERRNO_CODES.EBADF)}FS.chown(stream.node,uid,gid)}),truncate:(function(path,len){if(len<0){throw new FS.ErrnoError(ERRNO_CODES.EINVAL)}var node;if(typeof path==="string"){var lookup=FS.lookupPath(path,{follow:true});node=lookup.node}else{node=path}if(!node.node_ops.setattr){throw new FS.ErrnoError(ERRNO_CODES.EPERM)}if(FS.isDir(node.mode)){throw new FS.ErrnoError(ERRNO_CODES.EISDIR)}if(!FS.isFile(node.mode)){throw new FS.ErrnoError(ERRNO_CODES.EINVAL)}var err=FS.nodePermissions(node,"w");if(err){throw new FS.ErrnoError(err)}node.node_ops.setattr(node,{size:len,timestamp:Date.now()})}),ftruncate:(function(fd,len){var stream=FS.getStream(fd);if(!stream){throw new FS.ErrnoError(ERRNO_CODES.EBADF)}if((stream.flags&2097155)===0){throw new FS.ErrnoError(ERRNO_CODES.EINVAL)}FS.truncate(stream.node,len)}),utime:(function(path,atime,mtime){var lookup=FS.lookupPath(path,{follow:true});var node=lookup.node;node.node_ops.setattr(node,{timestamp:Math.max(atime,mtime)})}),open:(function(path,flags,mode,fd_start,fd_end){if(path===""){throw new FS.ErrnoError(ERRNO_CODES.ENOENT)}flags=typeof flags==="string"?FS.modeStringToFlags(flags):flags;mode=typeof mode==="undefined"?438:mode;if(flags&64){mode=mode&4095|32768}else{mode=0}var node;if(typeof path==="object"){node=path}else{path=PATH.normalize(path);try{var lookup=FS.lookupPath(path,{follow:!(flags&131072)});node=lookup.node}catch(e){}}var created=false;if(flags&64){if(node){if(flags&128){throw new FS.ErrnoError(ERRNO_CODES.EEXIST)}}else{node=FS.mknod(path,mode,0);created=true}}if(!node){throw new FS.ErrnoError(ERRNO_CODES.ENOENT)}if(FS.isChrdev(node.mode)){flags&=~512}if(flags&65536&&!FS.isDir(node.mode)){throw new FS.ErrnoError(ERRNO_CODES.ENOTDIR)}if(!created){var err=FS.mayOpen(node,flags);if(err){throw new FS.ErrnoError(err)}}if(flags&512){FS.truncate(node,0)}flags&=~(128|512);var stream=FS.createStream({node:node,path:FS.getPath(node),flags:flags,seekable:true,position:0,stream_ops:node.stream_ops,ungotten:[],error:false},fd_start,fd_end);if(stream.stream_ops.open){stream.stream_ops.open(stream)}if(Module["logReadFiles"]&&!(flags&1)){if(!FS.readFiles)FS.readFiles={};if(!(path in FS.readFiles)){FS.readFiles[path]=1;Module["printErr"]("read file: "+path)}}try{if(FS.trackingDelegate["onOpenFile"]){var trackingFlags=0;if((flags&2097155)!==1){trackingFlags|=FS.tracking.openFlags.READ}if((flags&2097155)!==0){trackingFlags|=FS.tracking.openFlags.WRITE}FS.trackingDelegate["onOpenFile"](path,trackingFlags)}}catch(e){console.log("FS.trackingDelegate['onOpenFile']('"+path+"', flags) threw an exception: "+e.message)}return stream}),close:(function(stream){if(stream.getdents)stream.getdents=null;try{if(stream.stream_ops.close){stream.stream_ops.close(stream)}}catch(e){throw e}finally{FS.closeStream(stream.fd)}}),llseek:(function(stream,offset,whence){if(!stream.seekable||!stream.stream_ops.llseek){throw new FS.ErrnoError(ERRNO_CODES.ESPIPE)}stream.position=stream.stream_ops.llseek(stream,offset,whence);stream.ungotten=[];return stream.position}),read:(function(stream,buffer,offset,length,position){if(length<0||position<0){throw new FS.ErrnoError(ERRNO_CODES.EINVAL)}if((stream.flags&2097155)===1){throw new FS.ErrnoError(ERRNO_CODES.EBADF)}if(FS.isDir(stream.node.mode)){throw new FS.ErrnoError(ERRNO_CODES.EISDIR)}if(!stream.stream_ops.read){throw new FS.ErrnoError(ERRNO_CODES.EINVAL)}var seeking=true;if(typeof position==="undefined"){position=stream.position;seeking=false}else if(!stream.seekable){throw new FS.ErrnoError(ERRNO_CODES.ESPIPE)}var bytesRead=stream.stream_ops.read(stream,buffer,offset,length,position);if(!seeking)stream.position+=bytesRead;return bytesRead}),write:(function(stream,buffer,offset,length,position,canOwn){if(length<0||position<0){throw new FS.ErrnoError(ERRNO_CODES.EINVAL)}if((stream.flags&2097155)===0){throw new FS.ErrnoError(ERRNO_CODES.EBADF)}if(FS.isDir(stream.node.mode)){throw new FS.ErrnoError(ERRNO_CODES.EISDIR)}if(!stream.stream_ops.write){throw new FS.ErrnoError(ERRNO_CODES.EINVAL)}if(stream.flags&1024){FS.llseek(stream,0,2)}var seeking=true;if(typeof position==="undefined"){position=stream.position;seeking=false}else if(!stream.seekable){throw new FS.ErrnoError(ERRNO_CODES.ESPIPE)}var bytesWritten=stream.stream_ops.write(stream,buffer,offset,length,position,canOwn);if(!seeking)stream.position+=bytesWritten;try{if(stream.path&&FS.trackingDelegate["onWriteToFile"])FS.trackingDelegate["onWriteToFile"](stream.path)}catch(e){console.log("FS.trackingDelegate['onWriteToFile']('"+path+"') threw an exception: "+e.message)}return bytesWritten}),allocate:(function(stream,offset,length){if(offset<0||length<=0){throw new FS.ErrnoError(ERRNO_CODES.EINVAL)}if((stream.flags&2097155)===0){throw new FS.ErrnoError(ERRNO_CODES.EBADF)}if(!FS.isFile(stream.node.mode)&&!FS.isDir(node.mode)){throw new FS.ErrnoError(ERRNO_CODES.ENODEV)}if(!stream.stream_ops.allocate){throw new FS.ErrnoError(ERRNO_CODES.EOPNOTSUPP)}stream.stream_ops.allocate(stream,offset,length)}),mmap:(function(stream,buffer,offset,length,position,prot,flags){if((stream.flags&2097155)===1){throw new FS.ErrnoError(ERRNO_CODES.EACCES)}if(!stream.stream_ops.mmap){throw new FS.ErrnoError(ERRNO_CODES.ENODEV)}return stream.stream_ops.mmap(stream,buffer,offset,length,position,prot,flags)}),msync:(function(stream,buffer,offset,length,mmapFlags){if(!stream||!stream.stream_ops.msync){return 0}return stream.stream_ops.msync(stream,buffer,offset,length,mmapFlags)}),munmap:(function(stream){return 0}),ioctl:(function(stream,cmd,arg){if(!stream.stream_ops.ioctl){throw new FS.ErrnoError(ERRNO_CODES.ENOTTY)}return stream.stream_ops.ioctl(stream,cmd,arg)}),readFile:(function(path,opts){opts=opts||{};opts.flags=opts.flags||"r";opts.encoding=opts.encoding||"binary";if(opts.encoding!=="utf8"&&opts.encoding!=="binary"){throw new Error('Invalid encoding type "'+opts.encoding+'"')}var ret;var stream=FS.open(path,opts.flags);var stat=FS.stat(path);var length=stat.size;var buf=new Uint8Array(length);FS.read(stream,buf,0,length,0);if(opts.encoding==="utf8"){ret=UTF8ArrayToString(buf,0)}else if(opts.encoding==="binary"){ret=buf}FS.close(stream);return ret}),writeFile:(function(path,data,opts){opts=opts||{};opts.flags=opts.flags||"w";opts.encoding=opts.encoding||"utf8";if(opts.encoding!=="utf8"&&opts.encoding!=="binary"){throw new Error('Invalid encoding type "'+opts.encoding+'"')}var stream=FS.open(path,opts.flags,opts.mode);if(opts.encoding==="utf8"){var buf=new Uint8Array(lengthBytesUTF8(data)+1);var actualNumBytes=stringToUTF8Array(data,buf,0,buf.length);FS.write(stream,buf,0,actualNumBytes,0,opts.canOwn)}else if(opts.encoding==="binary"){FS.write(stream,data,0,data.length,0,opts.canOwn)}FS.close(stream)}),cwd:(function(){return FS.currentPath}),chdir:(function(path){var lookup=FS.lookupPath(path,{follow:true});if(!FS.isDir(lookup.node.mode)){throw new FS.ErrnoError(ERRNO_CODES.ENOTDIR)}var err=FS.nodePermissions(lookup.node,"x");if(err){throw new FS.ErrnoError(err)}FS.currentPath=lookup.path}),createDefaultDirectories:(function(){FS.mkdir("/tmp");FS.mkdir("/home");FS.mkdir("/home/web_user")}),createDefaultDevices:(function(){FS.mkdir("/dev");FS.registerDevice(FS.makedev(1,3),{read:(function(){return 0}),write:(function(stream,buffer,offset,length,pos){return length})});FS.mkdev("/dev/null",FS.makedev(1,3));TTY.register(FS.makedev(5,0),TTY.default_tty_ops);TTY.register(FS.makedev(6,0),TTY.default_tty1_ops);FS.mkdev("/dev/tty",FS.makedev(5,0));FS.mkdev("/dev/tty1",FS.makedev(6,0));var random_device;if(typeof crypto!=="undefined"){var randomBuffer=new Uint8Array(1);random_device=(function(){crypto.getRandomValues(randomBuffer);return randomBuffer[0]})}else if(ENVIRONMENT_IS_NODE){random_device=(function(){return require("crypto").randomBytes(1)[0]})}else{random_device=(function(){return Math.random()*256|0})}FS.createDevice("/dev","random",random_device);FS.createDevice("/dev","urandom",random_device);FS.mkdir("/dev/shm");FS.mkdir("/dev/shm/tmp")}),createSpecialDirectories:(function(){FS.mkdir("/proc");FS.mkdir("/proc/self");FS.mkdir("/proc/self/fd");FS.mount({mount:(function(){var node=FS.createNode("/proc/self","fd",16384|511,73);node.node_ops={lookup:(function(parent,name){var fd=+name;var stream=FS.getStream(fd);if(!stream)throw new FS.ErrnoError(ERRNO_CODES.EBADF);var ret={parent:null,mount:{mountpoint:"fake"},node_ops:{readlink:(function(){return stream.path})}};ret.parent=ret;return ret})};return node})},{},"/proc/self/fd")}),createStandardStreams:(function(){if(Module["stdin"]){FS.createDevice("/dev","stdin",Module["stdin"])}else{FS.symlink("/dev/tty","/dev/stdin")}if(Module["stdout"]){FS.createDevice("/dev","stdout",null,Module["stdout"])}else{FS.symlink("/dev/tty","/dev/stdout")}if(Module["stderr"]){FS.createDevice("/dev","stderr",null,Module["stderr"])}else{FS.symlink("/dev/tty1","/dev/stderr")}var stdin=FS.open("/dev/stdin","r");assert(stdin.fd===0,"invalid handle for stdin ("+stdin.fd+")");var stdout=FS.open("/dev/stdout","w");assert(stdout.fd===1,"invalid handle for stdout ("+stdout.fd+")");var stderr=FS.open("/dev/stderr","w");assert(stderr.fd===2,"invalid handle for stderr ("+stderr.fd+")")}),ensureErrnoError:(function(){if(FS.ErrnoError)return;FS.ErrnoError=function ErrnoError(errno,node){this.node=node;this.setErrno=(function(errno){this.errno=errno;for(var key in ERRNO_CODES){if(ERRNO_CODES[key]===errno){this.code=key;break}}});this.setErrno(errno);this.message=ERRNO_MESSAGES[errno]};FS.ErrnoError.prototype=new Error;FS.ErrnoError.prototype.constructor=FS.ErrnoError;[ERRNO_CODES.ENOENT].forEach((function(code){FS.genericErrors[code]=new FS.ErrnoError(code);FS.genericErrors[code].stack=""}))}),staticInit:(function(){FS.ensureErrnoError();FS.nameTable=new Array(4096);FS.mount(MEMFS,{},"/");FS.createDefaultDirectories();FS.createDefaultDevices();FS.createSpecialDirectories();FS.filesystems={"MEMFS":MEMFS,"IDBFS":IDBFS,"NODEFS":NODEFS,"WORKERFS":WORKERFS}}),init:(function(input,output,error){assert(!FS.init.initialized,"FS.init was previously called. If you want to initialize later with custom parameters, remove any earlier calls (note that one is automatically added to the generated code)");FS.init.initialized=true;FS.ensureErrnoError();Module["stdin"]=input||Module["stdin"];Module["stdout"]=output||Module["stdout"];Module["stderr"]=error||Module["stderr"];FS.createStandardStreams()}),quit:(function(){FS.init.initialized=false;var fflush=Module["_fflush"];if(fflush)fflush(0);for(var i=0;ithis.length-1||idx<0){return undefined}var chunkOffset=idx%this.chunkSize;var chunkNum=idx/this.chunkSize|0;return this.getter(chunkNum)[chunkOffset]};LazyUint8Array.prototype.setDataGetter=function LazyUint8Array_setDataGetter(getter){this.getter=getter};LazyUint8Array.prototype.cacheLength=function LazyUint8Array_cacheLength(){var xhr=new XMLHttpRequest;xhr.open("HEAD",url,false);xhr.send(null);if(!(xhr.status>=200&&xhr.status<300||xhr.status===304))throw new Error("Couldn't load "+url+". Status: "+xhr.status);var datalength=Number(xhr.getResponseHeader("Content-length"));var header;var hasByteServing=(header=xhr.getResponseHeader("Accept-Ranges"))&&header==="bytes";var chunkSize=1024*1024;if(!hasByteServing)chunkSize=datalength;var doXHR=(function(from,to){if(from>to)throw new Error("invalid range ("+from+", "+to+") or no bytes requested!");if(to>datalength-1)throw new Error("only "+datalength+" bytes available! programmer error!");var xhr=new XMLHttpRequest;xhr.open("GET",url,false);if(datalength!==chunkSize)xhr.setRequestHeader("Range","bytes="+from+"-"+to);if(typeof Uint8Array!="undefined")xhr.responseType="arraybuffer";if(xhr.overrideMimeType){xhr.overrideMimeType("text/plain; charset=x-user-defined")}xhr.send(null);if(!(xhr.status>=200&&xhr.status<300||xhr.status===304))throw new Error("Couldn't load "+url+". Status: "+xhr.status);if(xhr.response!==undefined){return new Uint8Array(xhr.response||[])}else{return intArrayFromString(xhr.responseText||"",true)}});var lazyArray=this;lazyArray.setDataGetter((function(chunkNum){var start=chunkNum*chunkSize;var end=(chunkNum+1)*chunkSize-1;end=Math.min(end,datalength-1);if(typeof lazyArray.chunks[chunkNum]==="undefined"){lazyArray.chunks[chunkNum]=doXHR(start,end)}if(typeof lazyArray.chunks[chunkNum]==="undefined")throw new Error("doXHR failed!");return lazyArray.chunks[chunkNum]}));this._length=datalength;this._chunkSize=chunkSize;this.lengthKnown=true};if(typeof XMLHttpRequest!=="undefined"){if(!ENVIRONMENT_IS_WORKER)throw"Cannot do synchronous binary XHRs outside webworkers in modern browsers. Use --embed-file or --preload-file in emcc";var lazyArray=new LazyUint8Array;Object.defineProperty(lazyArray,"length",{get:(function(){if(!this.lengthKnown){this.cacheLength()}return this._length})});Object.defineProperty(lazyArray,"chunkSize",{get:(function(){if(!this.lengthKnown){this.cacheLength()}return this._chunkSize})});var properties={isDevice:false,contents:lazyArray}}else{var properties={isDevice:false,url:url}}var node=FS.createFile(parent,name,properties,canRead,canWrite);if(properties.contents){node.contents=properties.contents}else if(properties.url){node.contents=null;node.url=properties.url}Object.defineProperty(node,"usedBytes",{get:(function(){return this.contents.length})});var stream_ops={};var keys=Object.keys(node.stream_ops);keys.forEach((function(key){var fn=node.stream_ops[key];stream_ops[key]=function forceLoadLazyFile(){if(!FS.forceLoadFile(node)){throw new FS.ErrnoError(ERRNO_CODES.EIO)}return fn.apply(null,arguments)}}));stream_ops.read=function stream_ops_read(stream,buffer,offset,length,position){if(!FS.forceLoadFile(node)){throw new FS.ErrnoError(ERRNO_CODES.EIO)}var contents=stream.node.contents;if(position>=contents.length)return 0;var size=Math.min(contents.length-position,length);assert(size>=0);if(contents.slice){for(var i=0;i=0;i--){var last=parts[i];if(last==="."){parts.splice(i,1)}else if(last===".."){parts.splice(i,1);up++}else if(up){parts.splice(i,1);up--}}if(allowAboveRoot){for(;up--;up){parts.unshift("..")}}return parts}),normalize:(function(path){var isAbsolute=path.charAt(0)==="/",trailingSlash=path.substr(-1)==="/";path=PATH.normalizeArray(path.split("/").filter((function(p){return!!p})),!isAbsolute).join("/");if(!path&&!isAbsolute){path="."}if(path&&trailingSlash){path+="/"}return(isAbsolute?"/":"")+path}),dirname:(function(path){var result=PATH.splitPath(path),root=result[0],dir=result[1];if(!root&&!dir){return"."}if(dir){dir=dir.substr(0,dir.length-1)}return root+dir}),basename:(function(path){if(path==="/")return"/";var lastSlash=path.lastIndexOf("/");if(lastSlash===-1)return path;return path.substr(lastSlash+1)}),extname:(function(path){return PATH.splitPath(path)[3]}),join:(function(){var paths=Array.prototype.slice.call(arguments,0);return PATH.normalize(paths.join("/"))}),join2:(function(l,r){return PATH.normalize(l+"/"+r)}),resolve:(function(){var resolvedPath="",resolvedAbsolute=false;for(var i=arguments.length-1;i>=-1&&!resolvedAbsolute;i--){var path=i>=0?arguments[i]:FS.cwd();if(typeof path!=="string"){throw new TypeError("Arguments to path.resolve must be strings")}else if(!path){return""}resolvedPath=path+"/"+resolvedPath;resolvedAbsolute=path.charAt(0)==="/"}resolvedPath=PATH.normalizeArray(resolvedPath.split("/").filter((function(p){return!!p})),!resolvedAbsolute).join("/");return(resolvedAbsolute?"/":"")+resolvedPath||"."}),relative:(function(from,to){from=PATH.resolve(from).substr(1);to=PATH.resolve(to).substr(1);function trim(arr){var start=0;for(;start=0;end--){if(arr[end]!=="")break}if(start>end)return[];return arr.slice(start,end-start+1)}var fromParts=trim(from.split("/"));var toParts=trim(to.split("/"));var length=Math.min(fromParts.length,toParts.length);var samePartsLength=length;for(var i=0;i0){var start=Date.now();var blocker=Browser.mainLoop.queue.shift();blocker.func(blocker.arg);if(Browser.mainLoop.remainingBlockers){var remaining=Browser.mainLoop.remainingBlockers;var next=remaining%1==0?remaining-1:Math.floor(remaining);if(blocker.counted){Browser.mainLoop.remainingBlockers=next}else{next=next+.5;Browser.mainLoop.remainingBlockers=(8*remaining+next)/9}}console.log('main loop blocker "'+blocker.name+'" took '+(Date.now()-start)+" ms");Browser.mainLoop.updateStatus();setTimeout(Browser.mainLoop.runner,0);return}if(thisMainLoopId1&&Browser.mainLoop.currentFrameNumber%Browser.mainLoop.timingValue!=0){Browser.mainLoop.scheduler();return}if(Browser.mainLoop.method==="timeout"&&Module.ctx){Module.printErr("Looks like you are rendering without using requestAnimationFrame for the main loop. You should use 0 for the frame rate in emscripten_set_main_loop in order to use requestAnimationFrame, as that can greatly improve your frame rates!");Browser.mainLoop.method=""}Browser.mainLoop.runIter((function(){if(typeof arg!=="undefined"){Runtime.dynCall("vi",func,[arg])}else{Runtime.dynCall("v",func)}}));if(thisMainLoopId0)_emscripten_set_main_loop_timing(0,1e3/fps);else _emscripten_set_main_loop_timing(1,1);Browser.mainLoop.scheduler()}if(simulateInfiniteLoop){throw"SimulateInfiniteLoop"}}var Browser={mainLoop:{scheduler:null,method:"",currentlyRunningMainloop:0,func:null,arg:0,timingMode:0,timingValue:0,currentFrameNumber:0,queue:[],pause:(function(){Browser.mainLoop.scheduler=null;Browser.mainLoop.currentlyRunningMainloop++}),resume:(function(){Browser.mainLoop.currentlyRunningMainloop++;var timingMode=Browser.mainLoop.timingMode;var timingValue=Browser.mainLoop.timingValue;var func=Browser.mainLoop.func;Browser.mainLoop.func=null;_emscripten_set_main_loop(func,0,false,Browser.mainLoop.arg,true);_emscripten_set_main_loop_timing(timingMode,timingValue);Browser.mainLoop.scheduler()}),updateStatus:(function(){if(Module["setStatus"]){var message=Module["statusMessage"]||"Please wait...";var remaining=Browser.mainLoop.remainingBlockers;var expected=Browser.mainLoop.expectedBlockers;if(remaining){if(remaining=6){var curr=leftchar>>leftbits-6&63;leftbits-=6;ret+=BASE[curr]}}if(leftbits==2){ret+=BASE[(leftchar&3)<<4];ret+=PAD+PAD}else if(leftbits==4){ret+=BASE[(leftchar&15)<<2];ret+=PAD}return ret}audio.src="data:audio/x-"+name.substr(-3)+";base64,"+encode64(byteArray);finish(audio)};audio.src=url;Browser.safeSetTimeout((function(){finish(audio)}),1e4)}else{return fail()}};Module["preloadPlugins"].push(audioPlugin);var canvas=Module["canvas"];function pointerLockChange(){Browser.pointerLock=document["pointerLockElement"]===canvas||document["mozPointerLockElement"]===canvas||document["webkitPointerLockElement"]===canvas||document["msPointerLockElement"]===canvas}if(canvas){canvas.requestPointerLock=canvas["requestPointerLock"]||canvas["mozRequestPointerLock"]||canvas["webkitRequestPointerLock"]||canvas["msRequestPointerLock"]||(function(){});canvas.exitPointerLock=document["exitPointerLock"]||document["mozExitPointerLock"]||document["webkitExitPointerLock"]||document["msExitPointerLock"]||(function(){});canvas.exitPointerLock=canvas.exitPointerLock.bind(document);document.addEventListener("pointerlockchange",pointerLockChange,false);document.addEventListener("mozpointerlockchange",pointerLockChange,false);document.addEventListener("webkitpointerlockchange",pointerLockChange,false);document.addEventListener("mspointerlockchange",pointerLockChange,false);if(Module["elementPointerLock"]){canvas.addEventListener("click",(function(ev){if(!Browser.pointerLock&&canvas.requestPointerLock){canvas.requestPointerLock();ev.preventDefault()}}),false)}}}),createContext:(function(canvas,useWebGL,setInModule,webGLContextAttributes){if(useWebGL&&Module.ctx&&canvas==Module.canvas)return Module.ctx;var ctx;var contextHandle;if(useWebGL){var contextAttributes={antialias:false,alpha:false};if(webGLContextAttributes){for(var attribute in webGLContextAttributes){contextAttributes[attribute]=webGLContextAttributes[attribute]}}contextHandle=GL.createContext(canvas,contextAttributes);if(contextHandle){ctx=GL.getContext(contextHandle).GLctx}canvas.style.backgroundColor="black"}else{ctx=canvas.getContext("2d")}if(!ctx)return null;if(setInModule){if(!useWebGL)assert(typeof GLctx==="undefined","cannot set in module if GLctx is used, but we are a non-GL context that would replace it");Module.ctx=ctx;if(useWebGL)GL.makeContextCurrent(contextHandle);Module.useWebGL=useWebGL;Browser.moduleContextCreatedCallbacks.forEach((function(callback){callback()}));Browser.init()}return ctx}),destroyContext:(function(canvas,useWebGL,setInModule){}),fullScreenHandlersInstalled:false,lockPointer:undefined,resizeCanvas:undefined,requestFullScreen:(function(lockPointer,resizeCanvas,vrDevice){Browser.lockPointer=lockPointer;Browser.resizeCanvas=resizeCanvas;Browser.vrDevice=vrDevice;if(typeof Browser.lockPointer==="undefined")Browser.lockPointer=true;if(typeof Browser.resizeCanvas==="undefined")Browser.resizeCanvas=false;if(typeof Browser.vrDevice==="undefined")Browser.vrDevice=null;var canvas=Module["canvas"];function fullScreenChange(){Browser.isFullScreen=false;var canvasContainer=canvas.parentNode;if((document["webkitFullScreenElement"]||document["webkitFullscreenElement"]||document["mozFullScreenElement"]||document["mozFullscreenElement"]||document["fullScreenElement"]||document["fullscreenElement"]||document["msFullScreenElement"]||document["msFullscreenElement"]||document["webkitCurrentFullScreenElement"])===canvasContainer){canvas.cancelFullScreen=document["cancelFullScreen"]||document["mozCancelFullScreen"]||document["webkitCancelFullScreen"]||document["msExitFullscreen"]||document["exitFullscreen"]||(function(){});canvas.cancelFullScreen=canvas.cancelFullScreen.bind(document);if(Browser.lockPointer)canvas.requestPointerLock();Browser.isFullScreen=true;if(Browser.resizeCanvas)Browser.setFullScreenCanvasSize()}else{canvasContainer.parentNode.insertBefore(canvas,canvasContainer);canvasContainer.parentNode.removeChild(canvasContainer);if(Browser.resizeCanvas)Browser.setWindowedCanvasSize()}if(Module["onFullScreen"])Module["onFullScreen"](Browser.isFullScreen);Browser.updateCanvasDimensions(canvas)}if(!Browser.fullScreenHandlersInstalled){Browser.fullScreenHandlersInstalled=true;document.addEventListener("fullscreenchange",fullScreenChange,false);document.addEventListener("mozfullscreenchange",fullScreenChange,false);document.addEventListener("webkitfullscreenchange",fullScreenChange,false);document.addEventListener("MSFullscreenChange",fullScreenChange,false)}var canvasContainer=document.createElement("div");canvas.parentNode.insertBefore(canvasContainer,canvas);canvasContainer.appendChild(canvas);canvasContainer.requestFullScreen=canvasContainer["requestFullScreen"]||canvasContainer["mozRequestFullScreen"]||canvasContainer["msRequestFullscreen"]||(canvasContainer["webkitRequestFullScreen"]?(function(){canvasContainer["webkitRequestFullScreen"](Element["ALLOW_KEYBOARD_INPUT"])}):null);if(vrDevice){canvasContainer.requestFullScreen({vrDisplay:vrDevice})}else{canvasContainer.requestFullScreen()}}),nextRAF:0,fakeRequestAnimationFrame:(function(func){var now=Date.now();if(Browser.nextRAF===0){Browser.nextRAF=now+1e3/60}else{while(now+2>=Browser.nextRAF){Browser.nextRAF+=1e3/60}}var delay=Math.max(Browser.nextRAF-now,0);setTimeout(func,delay)}),requestAnimationFrame:function requestAnimationFrame(func){if(typeof window==="undefined"){Browser.fakeRequestAnimationFrame(func)}else{if(!window.requestAnimationFrame){window.requestAnimationFrame=window["requestAnimationFrame"]||window["mozRequestAnimationFrame"]||window["webkitRequestAnimationFrame"]||window["msRequestAnimationFrame"]||window["oRequestAnimationFrame"]||Browser.fakeRequestAnimationFrame}window.requestAnimationFrame(func)}},safeCallback:(function(func){return(function(){if(!ABORT)return func.apply(null,arguments)})}),allowAsyncCallbacks:true,queuedAsyncCallbacks:[],pauseAsyncCallbacks:(function(){Browser.allowAsyncCallbacks=false}),resumeAsyncCallbacks:(function(){Browser.allowAsyncCallbacks=true;if(Browser.queuedAsyncCallbacks.length>0){var callbacks=Browser.queuedAsyncCallbacks;Browser.queuedAsyncCallbacks=[];callbacks.forEach((function(func){func()}))}}),safeRequestAnimationFrame:(function(func){return Browser.requestAnimationFrame((function(){if(ABORT)return;if(Browser.allowAsyncCallbacks){func()}else{Browser.queuedAsyncCallbacks.push(func)}}))}),safeSetTimeout:(function(func,timeout){Module["noExitRuntime"]=true;return setTimeout((function(){if(ABORT)return;if(Browser.allowAsyncCallbacks){func()}else{Browser.queuedAsyncCallbacks.push(func)}}),timeout)}),safeSetInterval:(function(func,timeout){Module["noExitRuntime"]=true;return setInterval((function(){if(ABORT)return;if(Browser.allowAsyncCallbacks){func()}}),timeout)}),getMimetype:(function(name){return{"jpg":"image/jpeg","jpeg":"image/jpeg","png":"image/png","bmp":"image/bmp","ogg":"audio/ogg","wav":"audio/wav","mp3":"audio/mpeg"}[name.substr(name.lastIndexOf(".")+1)]}),getUserMedia:(function(func){if(!window.getUserMedia){window.getUserMedia=navigator["getUserMedia"]||navigator["mozGetUserMedia"]}window.getUserMedia(func)}),getMovementX:(function(event){return event["movementX"]||event["mozMovementX"]||event["webkitMovementX"]||0}),getMovementY:(function(event){return event["movementY"]||event["mozMovementY"]||event["webkitMovementY"]||0}),getMouseWheelDelta:(function(event){var delta=0;switch(event.type){case"DOMMouseScroll":delta=event.detail;break;case"mousewheel":delta=event.wheelDelta;break;case"wheel":delta=event["deltaY"];break;default:throw"unrecognized mouse wheel event: "+event.type}return delta}),mouseX:0,mouseY:0,mouseMovementX:0,mouseMovementY:0,touches:{},lastTouches:{},calculateMouseEvent:(function(event){if(Browser.pointerLock){if(event.type!="mousemove"&&"mozMovementX"in event){Browser.mouseMovementX=Browser.mouseMovementY=0}else{Browser.mouseMovementX=Browser.getMovementX(event);Browser.mouseMovementY=Browser.getMovementY(event)}if(typeof SDL!="undefined"){Browser.mouseX=SDL.mouseX+Browser.mouseMovementX;Browser.mouseY=SDL.mouseY+Browser.mouseMovementY}else{Browser.mouseX+=Browser.mouseMovementX;Browser.mouseY+=Browser.mouseMovementY}}else{var rect=Module["canvas"].getBoundingClientRect();var cw=Module["canvas"].width;var ch=Module["canvas"].height;var scrollX=typeof window.scrollX!=="undefined"?window.scrollX:window.pageXOffset;var scrollY=typeof window.scrollY!=="undefined"?window.scrollY:window.pageYOffset;if(event.type==="touchstart"||event.type==="touchend"||event.type==="touchmove"){var touch=event.touch;if(touch===undefined){return}var adjustedX=touch.pageX-(scrollX+rect.left);var adjustedY=touch.pageY-(scrollY+rect.top);adjustedX=adjustedX*(cw/rect.width);adjustedY=adjustedY*(ch/rect.height);var coords={x:adjustedX,y:adjustedY};if(event.type==="touchstart"){Browser.lastTouches[touch.identifier]=coords;Browser.touches[touch.identifier]=coords}else if(event.type==="touchend"||event.type==="touchmove"){var last=Browser.touches[touch.identifier];if(!last)last=coords;Browser.lastTouches[touch.identifier]=last;Browser.touches[touch.identifier]=coords}return}var x=event.pageX-(scrollX+rect.left);var y=event.pageY-(scrollY+rect.top);x=x*(cw/rect.width);y=y*(ch/rect.height);Browser.mouseMovementX=x-Browser.mouseX;Browser.mouseMovementY=y-Browser.mouseY;Browser.mouseX=x;Browser.mouseY=y}}),xhrLoad:(function(url,onload,onerror){var xhr=new XMLHttpRequest;xhr.open("GET",url,true);xhr.responseType="arraybuffer";xhr.onload=function xhr_onload(){if(xhr.status==200||xhr.status==0&&xhr.response){onload(xhr.response)}else{onerror()}};xhr.onerror=onerror;xhr.send(null)}),asyncLoad:(function(url,onload,onerror,noRunDep){Browser.xhrLoad(url,(function(arrayBuffer){assert(arrayBuffer,'Loading data file "'+url+'" failed (no arrayBuffer).');onload(new Uint8Array(arrayBuffer));if(!noRunDep)removeRunDependency("al "+url)}),(function(event){if(onerror){onerror()}else{throw'Loading data file "'+url+'" failed.'}}));if(!noRunDep)addRunDependency("al "+url)}),resizeListeners:[],updateResizeListeners:(function(){var canvas=Module["canvas"];Browser.resizeListeners.forEach((function(listener){listener(canvas.width,canvas.height)}))}),setCanvasSize:(function(width,height,noUpdates){var canvas=Module["canvas"];Browser.updateCanvasDimensions(canvas,width,height);if(!noUpdates)Browser.updateResizeListeners()}),windowedWidth:0,windowedHeight:0,setFullScreenCanvasSize:(function(){if(typeof SDL!="undefined"){var flags=HEAPU32[SDL.screen+Runtime.QUANTUM_SIZE*0>>2];flags=flags|8388608;HEAP32[SDL.screen+Runtime.QUANTUM_SIZE*0>>2]=flags}Browser.updateResizeListeners()}),setWindowedCanvasSize:(function(){if(typeof SDL!="undefined"){var flags=HEAPU32[SDL.screen+Runtime.QUANTUM_SIZE*0>>2];flags=flags&~8388608;HEAP32[SDL.screen+Runtime.QUANTUM_SIZE*0>>2]=flags}Browser.updateResizeListeners()}),updateCanvasDimensions:(function(canvas,wNative,hNative){if(wNative&&hNative){canvas.widthNative=wNative;canvas.heightNative=hNative}else{wNative=canvas.widthNative;hNative=canvas.heightNative}var w=wNative;var h=hNative;if(Module["forcedAspectRatio"]&&Module["forcedAspectRatio"]>0){if(w/h>2]=stat.dev;HEAP32[buf+4>>2]=0;HEAP32[buf+8>>2]=stat.ino;HEAP32[buf+12>>2]=stat.mode;HEAP32[buf+16>>2]=stat.nlink;HEAP32[buf+20>>2]=stat.uid;HEAP32[buf+24>>2]=stat.gid;HEAP32[buf+28>>2]=stat.rdev;HEAP32[buf+32>>2]=0;HEAP32[buf+36>>2]=stat.size;HEAP32[buf+40>>2]=4096;HEAP32[buf+44>>2]=stat.blocks;HEAP32[buf+48>>2]=stat.atime.getTime()/1e3|0;HEAP32[buf+52>>2]=0;HEAP32[buf+56>>2]=stat.mtime.getTime()/1e3|0;HEAP32[buf+60>>2]=0;HEAP32[buf+64>>2]=stat.ctime.getTime()/1e3|0;HEAP32[buf+68>>2]=0;HEAP32[buf+72>>2]=stat.ino;return 0}),doMsync:(function(addr,stream,len,flags){var buffer=new Uint8Array(HEAPU8.subarray(addr,addr+len));FS.msync(stream,buffer,0,len,flags)}),doMkdir:(function(path,mode){path=PATH.normalize(path);if(path[path.length-1]==="/")path=path.substr(0,path.length-1);FS.mkdir(path,mode,0);return 0}),doMknod:(function(path,mode,dev){switch(mode&61440){case 32768:case 8192:case 24576:case 4096:case 49152:break;default:return-ERRNO_CODES.EINVAL}FS.mknod(path,mode,dev);return 0}),doReadlink:(function(path,buf,bufsize){if(bufsize<=0)return-ERRNO_CODES.EINVAL;var ret=FS.readlink(path);ret=ret.slice(0,Math.max(0,bufsize));writeStringToMemory(ret,buf,true);return ret.length}),doAccess:(function(path,amode){if(amode&~7){return-ERRNO_CODES.EINVAL}var node;var lookup=FS.lookupPath(path,{follow:true});node=lookup.node;var perms="";if(amode&4)perms+="r";if(amode&2)perms+="w";if(amode&1)perms+="x";if(perms&&FS.nodePermissions(node,perms)){return-ERRNO_CODES.EACCES}return 0}),doDup:(function(path,flags,suggestFD){var suggest=FS.getStream(suggestFD);if(suggest)FS.close(suggest);return FS.open(path,flags,0,suggestFD,suggestFD).fd}),doReadv:(function(stream,iov,iovcnt,offset){var ret=0;for(var i=0;i>2];var len=HEAP32[iov+(i*8+4)>>2];var curr=FS.read(stream,HEAP8,ptr,len,offset);if(curr<0)return-1;ret+=curr;if(curr>2];var len=HEAP32[iov+(i*8+4)>>2];var curr=FS.write(stream,HEAP8,ptr,len,offset);if(curr<0)return-1;ret+=curr}return ret}),varargs:0,get:(function(varargs){SYSCALLS.varargs+=4;var ret=HEAP32[SYSCALLS.varargs-4>>2];return ret}),getStr:(function(){var ret=Pointer_stringify(SYSCALLS.get());return ret}),getStreamFromFD:(function(){var stream=FS.getStream(SYSCALLS.get());if(!stream)throw new FS.ErrnoError(ERRNO_CODES.EBADF);return stream}),getSocketFromFD:(function(){var socket=SOCKFS.getSocket(SYSCALLS.get());if(!socket)throw new FS.ErrnoError(ERRNO_CODES.EBADF);return socket}),getSocketAddress:(function(allowNull){var addrp=SYSCALLS.get(),addrlen=SYSCALLS.get();if(allowNull&&addrp===0)return null;var info=__read_sockaddr(addrp,addrlen);if(info.errno)throw new FS.ErrnoError(info.errno);info.addr=DNS.lookup_addr(info.addr)||info.addr;return info}),get64:(function(){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 ___syscall54(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),op=SYSCALLS.get();switch(op){case 21505:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;return 0};case 21506:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;return 0};case 21519:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;var argp=SYSCALLS.get();HEAP32[argp>>2]=0;return 0};case 21520:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;return-ERRNO_CODES.EINVAL};case 21531:{var argp=SYSCALLS.get();return FS.ioctl(stream,op,argp)};default:abort("bad ioctl syscall "+op)}}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}Module["_i64Add"]=_i64Add;Module["_bitshift64Lshr"]=_bitshift64Lshr;function ___cxa_pure_virtual(){ABORT=true;throw"Pure virtual function called!"}function _pthread_cleanup_pop(){assert(_pthread_cleanup_push.level==__ATEXIT__.length,"cannot pop if something else added meanwhile!");__ATEXIT__.pop();_pthread_cleanup_push.level=__ATEXIT__.length}function floatReadValueFromPointer(name,shift){switch(shift){case 2:return(function(pointer){return this["fromWireType"](HEAPF32[pointer>>2])});case 3:return(function(pointer){return this["fromWireType"](HEAPF64[pointer>>3])});default:throw new TypeError("Unknown float type: "+name)}}function __embind_register_float(rawType,name,size){var shift=getShiftFromSize(size);name=readLatin1String(name);registerType(rawType,{name:name,"fromWireType":(function(value){return value}),"toWireType":(function(destructors,value){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})}var _BDtoIHigh=true;function _pthread_cleanup_push(routine,arg){__ATEXIT__.push((function(){Runtime.dynCall("vi",routine,[arg])}));_pthread_cleanup_push.level=__ATEXIT__.length}function _pthread_cond_broadcast(){return 0}function ___cxa_guard_acquire(variable){if(!HEAP8[variable>>0]){HEAP8[variable>>0]=1;return 1}return 0}function new_(constructor,argumentList){if(!(constructor instanceof Function)){throw new TypeError("new_ called with constructor type "+typeof constructor+" which is not a function")}var dummy=createNamedFunction(constructor.name||"unknownFunctionName",(function(){}));dummy.prototype=constructor.prototype;var obj=new dummy;var r=constructor.apply(obj,argumentList);return r instanceof Object?r:obj}function runDestructors(destructors){while(destructors.length){var ptr=destructors.pop();var del=destructors.pop();del(ptr)}}function craftInvokerFunction(humanName,argTypes,classType,cppInvokerFunc,cppTargetFunc){var argCount=argTypes.length;if(argCount<2){throwBindingError("argTypes array size mismatch! Must at least get return value and 'this' types!")}var isClassMethodFunc=argTypes[1]!==null&&classType!==null;var argsList="";var argsListWired="";for(var i=0;i0?", ":"")+argsListWired}var returns=argTypes[0].name!=="void";invokerFnBody+=(returns?"var rv = ":"")+"invoker(fn"+(argsListWired.length>0?", ":"")+argsListWired+");\n";if(needsDestructorStack){invokerFnBody+="runDestructors(destructors);\n"}else{for(var i=isClassMethodFunc?1:2;i>2)+i])}return array}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}}var UnboundTypeError=undefined;function getTypeName(type){var ptr=___getTypeName(type);var rv=readLatin1String(ptr);_free(ptr);return rv}function throwUnboundTypeError(message,types){var unboundTypes=[];var seen={};function visit(type){if(seen[type]){return}if(registeredTypes[type]){return}if(typeDependencies[type]){typeDependencies[type].forEach(visit);return}unboundTypes.push(type);seen[type]=true}types.forEach(visit);throw new UnboundTypeError(message+": "+unboundTypes.map(getTypeName).join([", "]))}function __embind_register_function(name,argCount,rawArgTypesAddr,signature,rawInvoker,fn){var argTypes=heap32VectorToArray(argCount,rawArgTypesAddr);name=readLatin1String(name);rawInvoker=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 ___cxa_guard_release(){}var emval_free_list=[];var emval_handle_array=[{},{value:undefined},{value:null},{value:true},{value:false}];function __emval_decref(handle){if(handle>4&&0===--emval_handle_array[handle].refcount){emval_handle_array[handle]=undefined;emval_free_list.push(handle)}}function count_emval_handles(){var count=0;for(var i=5;i>>0}return ret}Module["_bitshift64Shl"]=_bitshift64Shl;function __embind_finalize_value_object(structType){var reg=structRegistrations[structType];delete structRegistrations[structType];var rawConstructor=reg.rawConstructor;var rawDestructor=reg.rawDestructor;var fieldRecords=reg.fields;var fieldTypes=fieldRecords.map((function(field){return field.getterReturnType})).concat(fieldRecords.map((function(field){return field.setterArgumentType})));whenDependentTypesAreResolved([structType],fieldTypes,(function(fieldTypes){var fields={};fieldRecords.forEach((function(field,i){var fieldName=field.fieldName;var getterReturnType=fieldTypes[i];var getter=field.getter;var getterContext=field.getterContext;var setterArgumentType=fieldTypes[i+fieldRecords.length];var setter=field.setter;var setterContext=field.setterContext;fields[fieldName]={read:(function(ptr){return getterReturnType["fromWireType"](getter(getterContext,ptr))}),write:(function(ptr,o){var destructors=[];setter(setterContext,ptr,setterArgumentType["toWireType"](destructors,o));runDestructors(destructors)})}}));return[{name:reg.name,"fromWireType":(function(ptr){var rv={};for(var i in fields){rv[i]=fields[i].read(ptr)}rawDestructor(ptr);return rv}),"toWireType":(function(destructors,o){for(var fieldName in fields){if(!(fieldName in o)){throw new TypeError("Missing field")}}var ptr=rawConstructor();for(fieldName in fields){fields[fieldName].write(ptr,o[fieldName])}if(destructors!==null){destructors.push(rawDestructor,ptr)}return ptr}),"argPackAdvance":8,"readValueFromPointer":simpleReadValueFromPointer,destructorFunction:rawDestructor}]}))}var _BItoD=true;function _pthread_cond_wait(){return 0}function _pthread_mutex_unlock(){}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 _time(ptr){var ret=Date.now()/1e3|0;if(ptr){HEAP32[ptr>>2]=ret}return ret}function _pthread_self(){return 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;assert(offset_high===0);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 ___syscall146(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),iov=SYSCALLS.get(),iovcnt=SYSCALLS.get();return SYSCALLS.doWritev(stream,iov,iovcnt)}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function enumReadValueFromPointer(name,shift,signed){switch(shift){case 0:return(function(pointer){var heap=signed?HEAP8:HEAPU8;return this["fromWireType"](heap[pointer])});case 1:return(function(pointer){var heap=signed?HEAP16:HEAPU16;return this["fromWireType"](heap[pointer>>1])});case 2:return(function(pointer){var heap=signed?HEAP32:HEAPU32;return this["fromWireType"](heap[pointer>>2])});default:throw new TypeError("Unknown integer type: "+name)}}function __embind_register_enum(rawType,name,size,isSigned){var shift=getShiftFromSize(size);name=readLatin1String(name);function constructor(){}constructor.values={};registerType(rawType,{name:name,constructor:constructor,"fromWireType":(function(c){return this.constructor.values[c]}),"toWireType":(function(destructors,c){return c.value}),"argPackAdvance":8,"readValueFromPointer":enumReadValueFromPointer(name,shift,isSigned),destructorFunction:null});exposePublicSymbol(name,constructor)}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}}var ___dso_handle=allocate(1,"i32*",ALLOC_STATIC);embind_init_charCodes();BindingError=Module["BindingError"]=extendError(Error,"BindingError");InternalError=Module["InternalError"]=extendError(Error,"InternalError");Module["requestFullScreen"]=function Module_requestFullScreen(lockPointer,resizeCanvas,vrDevice){Browser.requestFullScreen(lockPointer,resizeCanvas,vrDevice)};Module["requestAnimationFrame"]=function Module_requestAnimationFrame(func){Browser.requestAnimationFrame(func)};Module["setCanvasSize"]=function Module_setCanvasSize(width,height,noUpdates){Browser.setCanvasSize(width,height,noUpdates)};Module["pauseMainLoop"]=function Module_pauseMainLoop(){Browser.mainLoop.pause()};Module["resumeMainLoop"]=function Module_resumeMainLoop(){Browser.mainLoop.resume()};Module["getUserMedia"]=function Module_getUserMedia(){Browser.getUserMedia()};Module["createContext"]=function Module_createContext(canvas,useWebGL,setInModule,webGLContextAttributes){return Browser.createContext(canvas,useWebGL,setInModule,webGLContextAttributes)};FS.staticInit();__ATINIT__.unshift((function(){if(!Module["noFSInit"]&&!FS.init.initialized)FS.init()}));__ATMAIN__.push((function(){FS.ignorePermissions=false}));__ATEXIT__.push((function(){FS.quit()}));Module["FS_createFolder"]=FS.createFolder;Module["FS_createPath"]=FS.createPath;Module["FS_createDataFile"]=FS.createDataFile;Module["FS_createPreloadedFile"]=FS.createPreloadedFile;Module["FS_createLazyFile"]=FS.createLazyFile;Module["FS_createLink"]=FS.createLink;Module["FS_createDevice"]=FS.createDevice;Module["FS_unlink"]=FS.unlink;__ATINIT__.unshift((function(){TTY.init()}));__ATEXIT__.push((function(){TTY.shutdown()}));if(ENVIRONMENT_IS_NODE){var fs=require("fs");var NODEJS_PATH=require("path");NODEFS.staticInit()}UnboundTypeError=Module["UnboundTypeError"]=extendError(Error,"UnboundTypeError");init_emval();STACK_BASE=STACKTOP=Runtime.alignMemory(STATICTOP);staticSealed=true;STACK_MAX=STACK_BASE+TOTAL_STACK;DYNAMIC_BASE=DYNAMICTOP=Runtime.alignMemory(STACK_MAX);assert(DYNAMIC_BASE>2]|0)+-12>>2]|0;b=a+d|0;_d(b,20624);c[a+(d+56)>>2]=12804;if(!(c[a+(d+60)>>2]|0)){P_(b);return}else Ha(74472,79014,56,74486)}function bn(a){a=a|0;P_(a);return}function cn(b,d){b=b|0;d=d|0;var e=0,f=0;e=O_(64)|0;c[e+4>>2]=0;c[e+8>>2]=0;c[e+12>>2]=0;f=e+20|0;c[f>>2]=0;c[f+4>>2]=0;c[f+8>>2]=0;c[f+12>>2]=0;c[f+16>>2]=0;c[f+20>>2]=0;a[f+24>>0]=0;c[e+48>>2]=d;c[e>>2]=20660;c[e+56>>2]=20756;c[e+16>>2]=20728;c[e+52>>2]=87;c[e+60>>2]=2;f=c[(c[e>>2]|0)+-12>>2]|0;b=e+f|0;f=e+(f+4)|0;d=(c[f>>2]|0)+-1|0;c[f>>2]=d;if((b|0)==0|(d|0)!=0)return e|0;oc[c[(c[b>>2]|0)+4>>2]&2047](b);return e|0}function dn(a){a=a|0;_d(a,20772);c[a+56>>2]=12804;if(!(c[a+60>>2]|0))return;else Ha(74472,79014,56,74486)}function en(a){a=a|0;dn(a);P_(a);return}function fn(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;f=i;i=i+16|0;e=f;d=o$(b,1488,3832,-1)|0;if(!d){DF(a,b);i=f;return}c[e>>2]=a;if((a|0)!=0?(a=a+((c[(c[a>>2]|0)+-12>>2]|0)+4)|0,b=(c[a>>2]|0)+1|0,c[a>>2]=b,(b|0)==0):0)Ha(79054,79014,48,79068);pc[c[(c[d>>2]|0)+8>>2]&1023](d,e);d=c[e>>2]|0;if(!d){i=f;return}a=c[(c[d>>2]|0)+-12>>2]|0;e=d+a|0;a=d+(a+4)|0;b=(c[a>>2]|0)+-1|0;c[a>>2]=b;if((e|0)==0|(b|0)!=0){i=f;return}oc[c[(c[e>>2]|0)+4>>2]&2047](e);i=f;return}function gn(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;f=i;i=i+16|0;e=f;d=o$(b,1488,3832,-1)|0;if(!d){FF(a,b);i=f;return}c[e>>2]=a;if((a|0)!=0?(a=a+((c[(c[a>>2]|0)+-12>>2]|0)+4)|0,b=(c[a>>2]|0)+1|0,c[a>>2]=b,(b|0)==0):0)Ha(79054,79014,48,79068);pc[c[(c[d>>2]|0)+12>>2]&1023](d,e);d=c[e>>2]|0;if(!d){i=f;return}a=c[(c[d>>2]|0)+-12>>2]|0;e=d+a|0;a=d+(a+4)|0;b=(c[a>>2]|0)+-1|0;c[a>>2]=b;if((e|0)==0|(b|0)!=0){i=f;return}oc[c[(c[e>>2]|0)+4>>2]&2047](e);i=f;return}function hn(a){a=a|0;a=a+-16|0;_d(a,20772);c[a+56>>2]=12804;if(!(c[a+60>>2]|0))return;else Ha(74472,79014,56,74486)}function jn(a){a=a|0;a=a+-16|0;_d(a,20772);c[a+56>>2]=12804;if(!(c[a+60>>2]|0)){P_(a);return}else Ha(74472,79014,56,74486)}function kn(a,b){a=a|0;b=b|0;fn(a+-16|0,b);return}function ln(a,b){a=a|0;b=b|0;gn(a+-16|0,b);return}function mn(a){a=a|0;var b=0;b=c[(c[a>>2]|0)+-12>>2]|0;_d(a+b|0,20772);c[a+(b+56)>>2]=12804;if(!(c[a+(b+60)>>2]|0))return;else Ha(74472,79014,56,74486)}function nn(a){a=a|0;var b=0,d=0;d=c[(c[a>>2]|0)+-12>>2]|0;b=a+d|0;_d(b,20772);c[a+(d+56)>>2]=12804;if(!(c[a+(d+60)>>2]|0)){P_(b);return}else Ha(74472,79014,56,74486)}function on(a){a=a|0;P_(a);return}function pn(b,d){b=b|0;d=d|0;var e=0,f=0;e=O_(64)|0;c[e+4>>2]=0;c[e+8>>2]=0;c[e+12>>2]=0;f=e+20|0;c[f>>2]=0;c[f+4>>2]=0;c[f+8>>2]=0;c[f+12>>2]=0;c[f+16>>2]=0;c[f+20>>2]=0;a[f+24>>0]=0;c[e+48>>2]=d;c[e>>2]=20808;c[e+56>>2]=20904;c[e+16>>2]=20876;c[e+52>>2]=86;c[e+60>>2]=2;f=c[(c[e>>2]|0)+-12>>2]|0;b=e+f|0;f=e+(f+4)|0;d=(c[f>>2]|0)+-1|0;c[f>>2]=d;if((b|0)==0|(d|0)!=0)return e|0;oc[c[(c[b>>2]|0)+4>>2]&2047](b);return e|0}function qn(a){a=a|0;_d(a,20920);c[a+56>>2]=12804;if(!(c[a+60>>2]|0))return;else Ha(74472,79014,56,74486)}function rn(a){a=a|0;qn(a);P_(a);return}function sn(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;f=i;i=i+16|0;e=f;d=o$(b,1488,3888,-1)|0;if(!d){DF(a,b);i=f;return}c[e>>2]=a;if((a|0)!=0?(a=a+((c[(c[a>>2]|0)+-12>>2]|0)+4)|0,b=(c[a>>2]|0)+1|0,c[a>>2]=b,(b|0)==0):0)Ha(79054,79014,48,79068);pc[c[(c[d>>2]|0)+8>>2]&1023](d,e);d=c[e>>2]|0;if(!d){i=f;return}a=c[(c[d>>2]|0)+-12>>2]|0;e=d+a|0;a=d+(a+4)|0;b=(c[a>>2]|0)+-1|0;c[a>>2]=b;if((e|0)==0|(b|0)!=0){i=f;return}oc[c[(c[e>>2]|0)+4>>2]&2047](e);i=f;return}function tn(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;f=i;i=i+16|0;e=f;d=o$(b,1488,3888,-1)|0;if(!d){FF(a,b);i=f;return}c[e>>2]=a;if((a|0)!=0?(a=a+((c[(c[a>>2]|0)+-12>>2]|0)+4)|0,b=(c[a>>2]|0)+1|0,c[a>>2]=b,(b|0)==0):0)Ha(79054,79014,48,79068);pc[c[(c[d>>2]|0)+12>>2]&1023](d,e);d=c[e>>2]|0;if(!d){i=f;return}a=c[(c[d>>2]|0)+-12>>2]|0;e=d+a|0;a=d+(a+4)|0;b=(c[a>>2]|0)+-1|0;c[a>>2]=b;if((e|0)==0|(b|0)!=0){i=f;return}oc[c[(c[e>>2]|0)+4>>2]&2047](e);i=f;return}function un(a){a=a|0;a=a+-16|0;_d(a,20920);c[a+56>>2]=12804;if(!(c[a+60>>2]|0))return;else Ha(74472,79014,56,74486)}function vn(a){a=a|0;a=a+-16|0;_d(a,20920);c[a+56>>2]=12804;if(!(c[a+60>>2]|0)){P_(a);return}else Ha(74472,79014,56,74486)}function wn(a,b){a=a|0;b=b|0;sn(a+-16|0,b);return}function xn(a,b){a=a|0;b=b|0;tn(a+-16|0,b);return}function yn(a){a=a|0;var b=0;b=c[(c[a>>2]|0)+-12>>2]|0;_d(a+b|0,20920);c[a+(b+56)>>2]=12804;if(!(c[a+(b+60)>>2]|0))return;else Ha(74472,79014,56,74486)}function zn(a){a=a|0;var b=0,d=0;d=c[(c[a>>2]|0)+-12>>2]|0;b=a+d|0;_d(b,20920);c[a+(d+56)>>2]=12804;if(!(c[a+(d+60)>>2]|0)){P_(b);return}else Ha(74472,79014,56,74486)}function An(a){a=a|0;P_(a);return}function Bn(b,d){b=b|0;d=d|0;var e=0,f=0;e=O_(64)|0;c[e+4>>2]=0;c[e+8>>2]=0;c[e+12>>2]=0;f=e+20|0;c[f>>2]=0;c[f+4>>2]=0;c[f+8>>2]=0;c[f+12>>2]=0;c[f+16>>2]=0;c[f+20>>2]=0;a[f+24>>0]=0;c[e+48>>2]=d;c[e>>2]=20956;c[e+56>>2]=21052;c[e+16>>2]=21024;c[e+52>>2]=85;c[e+60>>2]=2;f=c[(c[e>>2]|0)+-12>>2]|0;b=e+f|0;f=e+(f+4)|0;d=(c[f>>2]|0)+-1|0;c[f>>2]=d;if((b|0)==0|(d|0)!=0)return e|0;oc[c[(c[b>>2]|0)+4>>2]&2047](b);return e|0}function Cn(a){a=a|0;_d(a,21068);c[a+56>>2]=12804;if(!(c[a+60>>2]|0))return;else Ha(74472,79014,56,74486)}function Dn(a){a=a|0;Cn(a);P_(a);return}function En(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;f=i;i=i+16|0;e=f;d=o$(b,1488,3944,-1)|0;if(!d){DF(a,b);i=f;return}c[e>>2]=a;if((a|0)!=0?(a=a+((c[(c[a>>2]|0)+-12>>2]|0)+4)|0,b=(c[a>>2]|0)+1|0,c[a>>2]=b,(b|0)==0):0)Ha(79054,79014,48,79068);pc[c[(c[d>>2]|0)+8>>2]&1023](d,e);d=c[e>>2]|0;if(!d){i=f;return}a=c[(c[d>>2]|0)+-12>>2]|0;e=d+a|0;a=d+(a+4)|0;b=(c[a>>2]|0)+-1|0;c[a>>2]=b;if((e|0)==0|(b|0)!=0){i=f;return}oc[c[(c[e>>2]|0)+4>>2]&2047](e);i=f;return}function Fn(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;f=i;i=i+16|0;e=f;d=o$(b,1488,3944,-1)|0;if(!d){FF(a,b);i=f;return}c[e>>2]=a;if((a|0)!=0?(a=a+((c[(c[a>>2]|0)+-12>>2]|0)+4)|0,b=(c[a>>2]|0)+1|0,c[a>>2]=b,(b|0)==0):0)Ha(79054,79014,48,79068);pc[c[(c[d>>2]|0)+12>>2]&1023](d,e);d=c[e>>2]|0;if(!d){i=f;return}a=c[(c[d>>2]|0)+-12>>2]|0;e=d+a|0;a=d+(a+4)|0;b=(c[a>>2]|0)+-1|0;c[a>>2]=b;if((e|0)==0|(b|0)!=0){i=f;return}oc[c[(c[e>>2]|0)+4>>2]&2047](e);i=f;return}function Gn(a){a=a|0;a=a+-16|0;_d(a,21068);c[a+56>>2]=12804;if(!(c[a+60>>2]|0))return;else Ha(74472,79014,56,74486)}function Hn(a){a=a|0;a=a+-16|0;_d(a,21068);c[a+56>>2]=12804;if(!(c[a+60>>2]|0)){P_(a);return}else Ha(74472,79014,56,74486)}function In(a,b){a=a|0;b=b|0;En(a+-16|0,b);return}function Jn(a,b){a=a|0;b=b|0;Fn(a+-16|0,b);return}function Kn(a){a=a|0;var b=0;b=c[(c[a>>2]|0)+-12>>2]|0;_d(a+b|0,21068);c[a+(b+56)>>2]=12804;if(!(c[a+(b+60)>>2]|0))return;else Ha(74472,79014,56,74486)}function Ln(a){a=a|0;var b=0,d=0;d=c[(c[a>>2]|0)+-12>>2]|0;b=a+d|0;_d(b,21068);c[a+(d+56)>>2]=12804;if(!(c[a+(d+60)>>2]|0)){P_(b);return}else Ha(74472,79014,56,74486)}function Mn(a){a=a|0;P_(a);return}function Nn(b,d){b=b|0;d=d|0;var e=0,f=0;e=O_(64)|0;c[e+4>>2]=0;c[e+8>>2]=0;c[e+12>>2]=0;f=e+20|0;c[f>>2]=0;c[f+4>>2]=0;c[f+8>>2]=0;c[f+12>>2]=0;c[f+16>>2]=0;c[f+20>>2]=0;a[f+24>>0]=0;c[e+48>>2]=d;c[e>>2]=21104;c[e+56>>2]=21200;c[e+16>>2]=21172;c[e+52>>2]=84;c[e+60>>2]=2;f=c[(c[e>>2]|0)+-12>>2]|0;b=e+f|0;f=e+(f+4)|0;d=(c[f>>2]|0)+-1|0;c[f>>2]=d;if((b|0)==0|(d|0)!=0)return e|0;oc[c[(c[b>>2]|0)+4>>2]&2047](b);return e|0}function On(a){a=a|0;_d(a,21216);c[a+56>>2]=12804;if(!(c[a+60>>2]|0))return;else Ha(74472,79014,56,74486)}function Pn(a){a=a|0;On(a);P_(a);return}function Qn(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;f=i;i=i+16|0;e=f;d=o$(b,1488,4e3,-1)|0;if(!d){DF(a,b);i=f;return}c[e>>2]=a;if((a|0)!=0?(a=a+((c[(c[a>>2]|0)+-12>>2]|0)+4)|0,b=(c[a>>2]|0)+1|0,c[a>>2]=b,(b|0)==0):0)Ha(79054,79014,48,79068);pc[c[(c[d>>2]|0)+8>>2]&1023](d,e);d=c[e>>2]|0;if(!d){i=f;return}a=c[(c[d>>2]|0)+-12>>2]|0;e=d+a|0;a=d+(a+4)|0;b=(c[a>>2]|0)+-1|0;c[a>>2]=b;if((e|0)==0|(b|0)!=0){i=f;return}oc[c[(c[e>>2]|0)+4>>2]&2047](e);i=f;return}function Rn(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;f=i;i=i+16|0;e=f;d=o$(b,1488,4e3,-1)|0;if(!d){FF(a,b);i=f;return}c[e>>2]=a;if((a|0)!=0?(a=a+((c[(c[a>>2]|0)+-12>>2]|0)+4)|0,b=(c[a>>2]|0)+1|0,c[a>>2]=b,(b|0)==0):0)Ha(79054,79014,48,79068);pc[c[(c[d>>2]|0)+12>>2]&1023](d,e);d=c[e>>2]|0;if(!d){i=f;return}a=c[(c[d>>2]|0)+-12>>2]|0;e=d+a|0;a=d+(a+4)|0;b=(c[a>>2]|0)+-1|0;c[a>>2]=b;if((e|0)==0|(b|0)!=0){i=f;return}oc[c[(c[e>>2]|0)+4>>2]&2047](e);i=f;return}function Sn(a){a=a|0;a=a+-16|0;_d(a,21216);c[a+56>>2]=12804;if(!(c[a+60>>2]|0))return;else Ha(74472,79014,56,74486)}function Tn(a){a=a|0;a=a+-16|0;_d(a,21216);c[a+56>>2]=12804;if(!(c[a+60>>2]|0)){P_(a);return}else Ha(74472,79014,56,74486)}function Un(a,b){a=a|0;b=b|0;Qn(a+-16|0,b);return}function Vn(a,b){a=a|0;b=b|0;Rn(a+-16|0,b);return}function Wn(a){a=a|0;var b=0;b=c[(c[a>>2]|0)+-12>>2]|0;_d(a+b|0,21216);c[a+(b+56)>>2]=12804;if(!(c[a+(b+60)>>2]|0))return;else Ha(74472,79014,56,74486)}function Xn(a){a=a|0;var b=0,d=0;d=c[(c[a>>2]|0)+-12>>2]|0;b=a+d|0;_d(b,21216);c[a+(d+56)>>2]=12804;if(!(c[a+(d+60)>>2]|0)){P_(b);return}else Ha(74472,79014,56,74486)}function Yn(a){a=a|0;P_(a);return}function Zn(b,d){b=b|0;d=d|0;var e=0,f=0;e=O_(64)|0;c[e+4>>2]=0;c[e+8>>2]=0;c[e+12>>2]=0;f=e+20|0;c[f>>2]=0;c[f+4>>2]=0;c[f+8>>2]=0;c[f+12>>2]=0;c[f+16>>2]=0;c[f+20>>2]=0;a[f+24>>0]=0;c[e+48>>2]=d;c[e>>2]=21252;c[e+56>>2]=21348;c[e+16>>2]=21320;c[e+52>>2]=83;c[e+60>>2]=2;f=c[(c[e>>2]|0)+-12>>2]|0;b=e+f|0;f=e+(f+4)|0;d=(c[f>>2]|0)+-1|0;c[f>>2]=d;if((b|0)==0|(d|0)!=0)return e|0;oc[c[(c[b>>2]|0)+4>>2]&2047](b);return e|0}function _n(a){a=a|0;_d(a,21364);c[a+56>>2]=12804;if(!(c[a+60>>2]|0))return;else Ha(74472,79014,56,74486)}function $n(a){a=a|0;_n(a);P_(a);return}function ao(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;f=i;i=i+16|0;e=f;d=o$(b,1488,4056,-1)|0;if(!d){DF(a,b);i=f;return}c[e>>2]=a;if((a|0)!=0?(a=a+((c[(c[a>>2]|0)+-12>>2]|0)+4)|0,b=(c[a>>2]|0)+1|0,c[a>>2]=b,(b|0)==0):0)Ha(79054,79014,48,79068);pc[c[(c[d>>2]|0)+8>>2]&1023](d,e);d=c[e>>2]|0;if(!d){i=f;return}a=c[(c[d>>2]|0)+-12>>2]|0;e=d+a|0;a=d+(a+4)|0;b=(c[a>>2]|0)+-1|0;c[a>>2]=b;if((e|0)==0|(b|0)!=0){i=f;return}oc[c[(c[e>>2]|0)+4>>2]&2047](e);i=f;return}function bo(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;f=i;i=i+16|0;e=f;d=o$(b,1488,4056,-1)|0;if(!d){FF(a,b);i=f;return}c[e>>2]=a;if((a|0)!=0?(a=a+((c[(c[a>>2]|0)+-12>>2]|0)+4)|0,b=(c[a>>2]|0)+1|0,c[a>>2]=b,(b|0)==0):0)Ha(79054,79014,48,79068);pc[c[(c[d>>2]|0)+12>>2]&1023](d,e);d=c[e>>2]|0;if(!d){i=f;return}a=c[(c[d>>2]|0)+-12>>2]|0;e=d+a|0;a=d+(a+4)|0;b=(c[a>>2]|0)+-1|0;c[a>>2]=b;if((e|0)==0|(b|0)!=0){i=f;return}oc[c[(c[e>>2]|0)+4>>2]&2047](e);i=f;return}function co(a){a=a|0;a=a+-16|0;_d(a,21364);c[a+56>>2]=12804;if(!(c[a+60>>2]|0))return;else Ha(74472,79014,56,74486)}function eo(a){a=a|0;a=a+-16|0;_d(a,21364);c[a+56>>2]=12804;if(!(c[a+60>>2]|0)){P_(a);return}else Ha(74472,79014,56,74486)}function fo(a,b){a=a|0;b=b|0;ao(a+-16|0,b);return}function go(a,b){a=a|0;b=b|0;bo(a+-16|0,b);return}function ho(a){a=a|0;var b=0;b=c[(c[a>>2]|0)+-12>>2]|0;_d(a+b|0,21364);c[a+(b+56)>>2]=12804;if(!(c[a+(b+60)>>2]|0))return;else Ha(74472,79014,56,74486)}function io(a){a=a|0;var b=0,d=0;d=c[(c[a>>2]|0)+-12>>2]|0;b=a+d|0;_d(b,21364);c[a+(d+56)>>2]=12804;if(!(c[a+(d+60)>>2]|0)){P_(b);return}else Ha(74472,79014,56,74486)}function jo(a){a=a|0;P_(a);return}function ko(b,d){b=b|0;d=d|0;var e=0,f=0;e=O_(64)|0;c[e+4>>2]=0;c[e+8>>2]=0;c[e+12>>2]=0;f=e+20|0;c[f>>2]=0;c[f+4>>2]=0;c[f+8>>2]=0;c[f+12>>2]=0;c[f+16>>2]=0;c[f+20>>2]=0;a[f+24>>0]=0;c[e+48>>2]=d;c[e>>2]=21400;c[e+56>>2]=21496;c[e+16>>2]=21468;c[e+52>>2]=82;c[e+60>>2]=2;f=c[(c[e>>2]|0)+-12>>2]|0;b=e+f|0;f=e+(f+4)|0;d=(c[f>>2]|0)+-1|0;c[f>>2]=d;if((b|0)==0|(d|0)!=0)return e|0;oc[c[(c[b>>2]|0)+4>>2]&2047](b);return e|0}function lo(a){a=a|0;_d(a,21512);c[a+56>>2]=12804;if(!(c[a+60>>2]|0))return;else Ha(74472,79014,56,74486)}function mo(a){a=a|0;lo(a);P_(a);return}function no(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;f=i;i=i+16|0;e=f;d=o$(b,1488,4112,-1)|0;if(!d){DF(a,b);i=f;return}c[e>>2]=a;if((a|0)!=0?(a=a+((c[(c[a>>2]|0)+-12>>2]|0)+4)|0,b=(c[a>>2]|0)+1|0,c[a>>2]=b,(b|0)==0):0)Ha(79054,79014,48,79068);pc[c[(c[d>>2]|0)+8>>2]&1023](d,e);d=c[e>>2]|0;if(!d){i=f;return}a=c[(c[d>>2]|0)+-12>>2]|0;e=d+a|0;a=d+(a+4)|0;b=(c[a>>2]|0)+-1|0;c[a>>2]=b;if((e|0)==0|(b|0)!=0){i=f;return}oc[c[(c[e>>2]|0)+4>>2]&2047](e);i=f;return}function oo(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;f=i;i=i+16|0;e=f;d=o$(b,1488,4112,-1)|0;if(!d){FF(a,b);i=f;return}c[e>>2]=a;if((a|0)!=0?(a=a+((c[(c[a>>2]|0)+-12>>2]|0)+4)|0,b=(c[a>>2]|0)+1|0,c[a>>2]=b,(b|0)==0):0)Ha(79054,79014,48,79068);pc[c[(c[d>>2]|0)+12>>2]&1023](d,e);d=c[e>>2]|0;if(!d){i=f;return}a=c[(c[d>>2]|0)+-12>>2]|0;e=d+a|0;a=d+(a+4)|0;b=(c[a>>2]|0)+-1|0;c[a>>2]=b;if((e|0)==0|(b|0)!=0){i=f;return}oc[c[(c[e>>2]|0)+4>>2]&2047](e);i=f;return}function po(a){a=a|0;a=a+-16|0;_d(a,21512);c[a+56>>2]=12804;if(!(c[a+60>>2]|0))return;else Ha(74472,79014,56,74486)}function qo(a){a=a|0;a=a+-16|0;_d(a,21512);c[a+56>>2]=12804;if(!(c[a+60>>2]|0)){P_(a);return}else Ha(74472,79014,56,74486)}function ro(a,b){a=a|0;b=b|0;no(a+-16|0,b);return}function so(a,b){a=a|0;b=b|0;oo(a+-16|0,b);return}function to(a){a=a|0;var b=0;b=c[(c[a>>2]|0)+-12>>2]|0;_d(a+b|0,21512);c[a+(b+56)>>2]=12804;if(!(c[a+(b+60)>>2]|0))return;else Ha(74472,79014,56,74486)}function uo(a){a=a|0;var b=0,d=0;d=c[(c[a>>2]|0)+-12>>2]|0;b=a+d|0;_d(b,21512);c[a+(d+56)>>2]=12804;if(!(c[a+(d+60)>>2]|0)){P_(b);return}else Ha(74472,79014,56,74486)}function vo(a){a=a|0;P_(a);return}function wo(b,d){b=b|0;d=d|0;var e=0,f=0;e=O_(64)|0;c[e+4>>2]=0;c[e+8>>2]=0;c[e+12>>2]=0;f=e+20|0;c[f>>2]=0;c[f+4>>2]=0;c[f+8>>2]=0;c[f+12>>2]=0;c[f+16>>2]=0;c[f+20>>2]=0;a[f+24>>0]=0;c[e+48>>2]=d;c[e>>2]=21548;c[e+56>>2]=21644;c[e+16>>2]=21616;c[e+52>>2]=81;c[e+60>>2]=2;f=c[(c[e>>2]|0)+-12>>2]|0;b=e+f|0;f=e+(f+4)|0;d=(c[f>>2]|0)+-1|0;c[f>>2]=d;if((b|0)==0|(d|0)!=0)return e|0;oc[c[(c[b>>2]|0)+4>>2]&2047](b);return e|0}function xo(a){a=a|0;_d(a,21660);c[a+56>>2]=12804;if(!(c[a+60>>2]|0))return;else Ha(74472,79014,56,74486)}function yo(a){a=a|0;xo(a);P_(a);return}function zo(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;f=i;i=i+16|0;e=f;d=o$(b,1488,4168,-1)|0;if(!d){DF(a,b);i=f;return}c[e>>2]=a;if((a|0)!=0?(a=a+((c[(c[a>>2]|0)+-12>>2]|0)+4)|0,b=(c[a>>2]|0)+1|0,c[a>>2]=b,(b|0)==0):0)Ha(79054,79014,48,79068);pc[c[(c[d>>2]|0)+8>>2]&1023](d,e);d=c[e>>2]|0;if(!d){i=f;return}a=c[(c[d>>2]|0)+-12>>2]|0;e=d+a|0;a=d+(a+4)|0;b=(c[a>>2]|0)+-1|0;c[a>>2]=b;if((e|0)==0|(b|0)!=0){i=f;return}oc[c[(c[e>>2]|0)+4>>2]&2047](e);i=f;return}function Ao(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;f=i;i=i+16|0;e=f;d=o$(b,1488,4168,-1)|0;if(!d){FF(a,b);i=f;return}c[e>>2]=a;if((a|0)!=0?(a=a+((c[(c[a>>2]|0)+-12>>2]|0)+4)|0,b=(c[a>>2]|0)+1|0,c[a>>2]=b,(b|0)==0):0)Ha(79054,79014,48,79068);pc[c[(c[d>>2]|0)+12>>2]&1023](d,e);d=c[e>>2]|0;if(!d){i=f;return}a=c[(c[d>>2]|0)+-12>>2]|0;e=d+a|0;a=d+(a+4)|0;b=(c[a>>2]|0)+-1|0;c[a>>2]=b;if((e|0)==0|(b|0)!=0){i=f;return}oc[c[(c[e>>2]|0)+4>>2]&2047](e);i=f;return}function Bo(a){a=a|0;a=a+-16|0;_d(a,21660);c[a+56>>2]=12804;if(!(c[a+60>>2]|0))return;else Ha(74472,79014,56,74486)}function Co(a){a=a|0;a=a+-16|0;_d(a,21660);c[a+56>>2]=12804;if(!(c[a+60>>2]|0)){P_(a);return}else Ha(74472,79014,56,74486)}function Do(a,b){a=a|0;b=b|0;zo(a+-16|0,b);return}function Eo(a,b){a=a|0;b=b|0;Ao(a+-16|0,b);return}function Fo(a){a=a|0;var b=0;b=c[(c[a>>2]|0)+-12>>2]|0;_d(a+b|0,21660);c[a+(b+56)>>2]=12804;if(!(c[a+(b+60)>>2]|0))return;else Ha(74472,79014,56,74486)}function Go(a){a=a|0;var b=0,d=0;d=c[(c[a>>2]|0)+-12>>2]|0;b=a+d|0;_d(b,21660);c[a+(d+56)>>2]=12804;if(!(c[a+(d+60)>>2]|0)){P_(b);return}else Ha(74472,79014,56,74486)}function Ho(a){a=a|0;P_(a);return}function Io(b,d){b=b|0;d=d|0;var e=0,f=0;e=O_(64)|0;c[e+4>>2]=0;c[e+8>>2]=0;c[e+12>>2]=0;f=e+20|0;c[f>>2]=0;c[f+4>>2]=0;c[f+8>>2]=0;c[f+12>>2]=0;c[f+16>>2]=0;c[f+20>>2]=0;a[f+24>>0]=0;c[e+48>>2]=d;c[e>>2]=21696;c[e+56>>2]=21792;c[e+16>>2]=21764;c[e+52>>2]=80;c[e+60>>2]=2;f=c[(c[e>>2]|0)+-12>>2]|0;b=e+f|0;f=e+(f+4)|0;d=(c[f>>2]|0)+-1|0;c[f>>2]=d;if((b|0)==0|(d|0)!=0)return e|0;oc[c[(c[b>>2]|0)+4>>2]&2047](b);return e|0}function Jo(a){a=a|0;_d(a,21808);c[a+56>>2]=12804;if(!(c[a+60>>2]|0))return;else Ha(74472,79014,56,74486)}function Ko(a){a=a|0;Jo(a);P_(a);return}function Lo(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;f=i;i=i+16|0;e=f;d=o$(b,1488,4224,-1)|0;if(!d){DF(a,b);i=f;return}c[e>>2]=a;if((a|0)!=0?(a=a+((c[(c[a>>2]|0)+-12>>2]|0)+4)|0,b=(c[a>>2]|0)+1|0,c[a>>2]=b,(b|0)==0):0)Ha(79054,79014,48,79068);pc[c[(c[d>>2]|0)+8>>2]&1023](d,e);d=c[e>>2]|0;if(!d){i=f;return}a=c[(c[d>>2]|0)+-12>>2]|0;e=d+a|0;a=d+(a+4)|0;b=(c[a>>2]|0)+-1|0;c[a>>2]=b;if((e|0)==0|(b|0)!=0){i=f;return}oc[c[(c[e>>2]|0)+4>>2]&2047](e);i=f;return}function Mo(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;f=i;i=i+16|0;e=f;d=o$(b,1488,4224,-1)|0;if(!d){FF(a,b);i=f;return}c[e>>2]=a;if((a|0)!=0?(a=a+((c[(c[a>>2]|0)+-12>>2]|0)+4)|0,b=(c[a>>2]|0)+1|0,c[a>>2]=b,(b|0)==0):0)Ha(79054,79014,48,79068);pc[c[(c[d>>2]|0)+12>>2]&1023](d,e);d=c[e>>2]|0;if(!d){i=f;return}a=c[(c[d>>2]|0)+-12>>2]|0;e=d+a|0;a=d+(a+4)|0;b=(c[a>>2]|0)+-1|0;c[a>>2]=b;if((e|0)==0|(b|0)!=0){i=f;return}oc[c[(c[e>>2]|0)+4>>2]&2047](e);i=f;return}function No(a){a=a|0;a=a+-16|0;_d(a,21808);c[a+56>>2]=12804;if(!(c[a+60>>2]|0))return;else Ha(74472,79014,56,74486)}function Oo(a){a=a|0;a=a+-16|0;_d(a,21808);c[a+56>>2]=12804;if(!(c[a+60>>2]|0)){P_(a);return}else Ha(74472,79014,56,74486)}function Po(a,b){a=a|0;b=b|0;Lo(a+-16|0,b);return}function Qo(a,b){a=a|0;b=b|0;Mo(a+-16|0,b);return}function Ro(a){a=a|0;var b=0;b=c[(c[a>>2]|0)+-12>>2]|0;_d(a+b|0,21808);c[a+(b+56)>>2]=12804;if(!(c[a+(b+60)>>2]|0))return;else Ha(74472,79014,56,74486)}function So(a){a=a|0;var b=0,d=0;d=c[(c[a>>2]|0)+-12>>2]|0;b=a+d|0;_d(b,21808);c[a+(d+56)>>2]=12804;if(!(c[a+(d+60)>>2]|0)){P_(b);return}else Ha(74472,79014,56,74486)}function To(a){a=a|0;P_(a);return}function Uo(b,d){b=b|0;d=d|0;var e=0,f=0;e=O_(64)|0;c[e+4>>2]=0;c[e+8>>2]=0;c[e+12>>2]=0;f=e+20|0;c[f>>2]=0;c[f+4>>2]=0;c[f+8>>2]=0;c[f+12>>2]=0;c[f+16>>2]=0;c[f+20>>2]=0;a[f+24>>0]=0;c[e+48>>2]=d;c[e>>2]=21844;c[e+56>>2]=21940;c[e+16>>2]=21912;c[e+52>>2]=79;c[e+60>>2]=2;f=c[(c[e>>2]|0)+-12>>2]|0;b=e+f|0;f=e+(f+4)|0;d=(c[f>>2]|0)+-1|0;c[f>>2]=d;if((b|0)==0|(d|0)!=0)return e|0;oc[c[(c[b>>2]|0)+4>>2]&2047](b);return e|0}function Vo(a){a=a|0;_d(a,21956);c[a+56>>2]=12804;if(!(c[a+60>>2]|0))return;else Ha(74472,79014,56,74486)}function Wo(a){a=a|0;Vo(a);P_(a);return}function Xo(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;f=i;i=i+16|0;e=f;d=o$(b,1488,4280,-1)|0;if(!d){DF(a,b);i=f;return}c[e>>2]=a;if((a|0)!=0?(a=a+((c[(c[a>>2]|0)+-12>>2]|0)+4)|0,b=(c[a>>2]|0)+1|0,c[a>>2]=b,(b|0)==0):0)Ha(79054,79014,48,79068);pc[c[(c[d>>2]|0)+8>>2]&1023](d,e);d=c[e>>2]|0;if(!d){i=f;return}a=c[(c[d>>2]|0)+-12>>2]|0;e=d+a|0;a=d+(a+4)|0;b=(c[a>>2]|0)+-1|0;c[a>>2]=b;if((e|0)==0|(b|0)!=0){i=f;return}oc[c[(c[e>>2]|0)+4>>2]&2047](e);i=f;return}function Yo(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;f=i;i=i+16|0;e=f;d=o$(b,1488,4280,-1)|0;if(!d){FF(a,b);i=f;return}c[e>>2]=a;if((a|0)!=0?(a=a+((c[(c[a>>2]|0)+-12>>2]|0)+4)|0,b=(c[a>>2]|0)+1|0,c[a>>2]=b,(b|0)==0):0)Ha(79054,79014,48,79068);pc[c[(c[d>>2]|0)+12>>2]&1023](d,e);d=c[e>>2]|0;if(!d){i=f;return}a=c[(c[d>>2]|0)+-12>>2]|0;e=d+a|0;a=d+(a+4)|0;b=(c[a>>2]|0)+-1|0;c[a>>2]=b;if((e|0)==0|(b|0)!=0){i=f;return}oc[c[(c[e>>2]|0)+4>>2]&2047](e);i=f;return}function Zo(a){a=a|0;a=a+-16|0;_d(a,21956);c[a+56>>2]=12804;if(!(c[a+60>>2]|0))return;else Ha(74472,79014,56,74486)}function _o(a){a=a|0;a=a+-16|0;_d(a,21956);c[a+56>>2]=12804;if(!(c[a+60>>2]|0)){P_(a);return}else Ha(74472,79014,56,74486)}function $o(a,b){a=a|0;b=b|0;Xo(a+-16|0,b);return}function ap(a,b){a=a|0;b=b|0;Yo(a+-16|0,b);return}function bp(a){a=a|0;var b=0;b=c[(c[a>>2]|0)+-12>>2]|0;_d(a+b|0,21956);c[a+(b+56)>>2]=12804;if(!(c[a+(b+60)>>2]|0))return;else Ha(74472,79014,56,74486)}function cp(a){a=a|0;var b=0,d=0;d=c[(c[a>>2]|0)+-12>>2]|0;b=a+d|0;_d(b,21956);c[a+(d+56)>>2]=12804;if(!(c[a+(d+60)>>2]|0)){P_(b);return}else Ha(74472,79014,56,74486)}function dp(a){a=a|0;P_(a);return}function ep(b,d){b=b|0;d=d|0;var e=0,f=0;e=O_(64)|0;c[e+4>>2]=0;c[e+8>>2]=0;c[e+12>>2]=0;f=e+20|0;c[f>>2]=0;c[f+4>>2]=0;c[f+8>>2]=0;c[f+12>>2]=0;c[f+16>>2]=0;c[f+20>>2]=0;a[f+24>>0]=0;c[e+48>>2]=d;c[e>>2]=21992;c[e+56>>2]=22088;c[e+16>>2]=22060;c[e+52>>2]=78;c[e+60>>2]=2;f=c[(c[e>>2]|0)+-12>>2]|0;b=e+f|0;f=e+(f+4)|0;d=(c[f>>2]|0)+-1|0;c[f>>2]=d;if((b|0)==0|(d|0)!=0)return e|0;oc[c[(c[b>>2]|0)+4>>2]&2047](b);return e|0}function fp(a){a=a|0;_d(a,22104);c[a+56>>2]=12804;if(!(c[a+60>>2]|0))return;else Ha(74472,79014,56,74486)}function gp(a){a=a|0;fp(a);P_(a);return}function hp(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;f=i;i=i+16|0;e=f;d=o$(b,1488,4336,-1)|0;if(!d){DF(a,b);i=f;return}c[e>>2]=a;if((a|0)!=0?(a=a+((c[(c[a>>2]|0)+-12>>2]|0)+4)|0,b=(c[a>>2]|0)+1|0,c[a>>2]=b,(b|0)==0):0)Ha(79054,79014,48,79068);pc[c[(c[d>>2]|0)+8>>2]&1023](d,e);d=c[e>>2]|0;if(!d){i=f;return}a=c[(c[d>>2]|0)+-12>>2]|0;e=d+a|0;a=d+(a+4)|0;b=(c[a>>2]|0)+-1|0;c[a>>2]=b;if((e|0)==0|(b|0)!=0){i=f;return}oc[c[(c[e>>2]|0)+4>>2]&2047](e);i=f;return}function ip(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;f=i;i=i+16|0;e=f;d=o$(b,1488,4336,-1)|0;if(!d){FF(a,b);i=f;return}c[e>>2]=a;if((a|0)!=0?(a=a+((c[(c[a>>2]|0)+-12>>2]|0)+4)|0,b=(c[a>>2]|0)+1|0,c[a>>2]=b,(b|0)==0):0)Ha(79054,79014,48,79068);pc[c[(c[d>>2]|0)+12>>2]&1023](d,e);d=c[e>>2]|0;if(!d){i=f;return}a=c[(c[d>>2]|0)+-12>>2]|0;e=d+a|0;a=d+(a+4)|0;b=(c[a>>2]|0)+-1|0;c[a>>2]=b;if((e|0)==0|(b|0)!=0){i=f;return}oc[c[(c[e>>2]|0)+4>>2]&2047](e);i=f;return}function jp(a){a=a|0;a=a+-16|0;_d(a,22104);c[a+56>>2]=12804;if(!(c[a+60>>2]|0))return;else Ha(74472,79014,56,74486)}function kp(a){a=a|0;a=a+-16|0;_d(a,22104);c[a+56>>2]=12804;if(!(c[a+60>>2]|0)){P_(a);return}else Ha(74472,79014,56,74486)}function lp(a,b){a=a|0;b=b|0;hp(a+-16|0,b);return}function mp(a,b){a=a|0;b=b|0;ip(a+-16|0,b);return}function np(a){a=a|0;var b=0;b=c[(c[a>>2]|0)+-12>>2]|0;_d(a+b|0,22104);c[a+(b+56)>>2]=12804;if(!(c[a+(b+60)>>2]|0))return;else Ha(74472,79014,56,74486)}function op(a){a=a|0;var b=0,d=0;d=c[(c[a>>2]|0)+-12>>2]|0;b=a+d|0;_d(b,22104);c[a+(d+56)>>2]=12804;if(!(c[a+(d+60)>>2]|0)){P_(b);return}else Ha(74472,79014,56,74486)}function pp(a){a=a|0;P_(a);return}function qp(b,d){b=b|0;d=d|0;var e=0,f=0;e=O_(64)|0;c[e+4>>2]=0;c[e+8>>2]=0;c[e+12>>2]=0;f=e+20|0;c[f>>2]=0;c[f+4>>2]=0;c[f+8>>2]=0;c[f+12>>2]=0;c[f+16>>2]=0;c[f+20>>2]=0;a[f+24>>0]=0;c[e+48>>2]=d;c[e>>2]=22140;c[e+56>>2]=22236;c[e+16>>2]=22208;c[e+52>>2]=77;c[e+60>>2]=2;f=c[(c[e>>2]|0)+-12>>2]|0;b=e+f|0;f=e+(f+4)|0;d=(c[f>>2]|0)+-1|0;c[f>>2]=d;if((b|0)==0|(d|0)!=0)return e|0;oc[c[(c[b>>2]|0)+4>>2]&2047](b);return e|0}function rp(a){a=a|0;_d(a,22252);c[a+56>>2]=12804;if(!(c[a+60>>2]|0))return;else Ha(74472,79014,56,74486)}function sp(a){a=a|0;rp(a);P_(a);return}function tp(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;f=i;i=i+16|0;e=f;d=o$(b,1488,4392,-1)|0;if(!d){DF(a,b);i=f;return}c[e>>2]=a;if((a|0)!=0?(a=a+((c[(c[a>>2]|0)+-12>>2]|0)+4)|0,b=(c[a>>2]|0)+1|0,c[a>>2]=b,(b|0)==0):0)Ha(79054,79014,48,79068);pc[c[(c[d>>2]|0)+8>>2]&1023](d,e);d=c[e>>2]|0;if(!d){i=f;return}a=c[(c[d>>2]|0)+-12>>2]|0;e=d+a|0;a=d+(a+4)|0;b=(c[a>>2]|0)+-1|0;c[a>>2]=b;if((e|0)==0|(b|0)!=0){i=f;return}oc[c[(c[e>>2]|0)+4>>2]&2047](e);i=f;return}function up(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;f=i;i=i+16|0;e=f;d=o$(b,1488,4392,-1)|0;if(!d){FF(a,b);i=f;return}c[e>>2]=a;if((a|0)!=0?(a=a+((c[(c[a>>2]|0)+-12>>2]|0)+4)|0,b=(c[a>>2]|0)+1|0,c[a>>2]=b,(b|0)==0):0)Ha(79054,79014,48,79068);pc[c[(c[d>>2]|0)+12>>2]&1023](d,e);d=c[e>>2]|0;if(!d){i=f;return}a=c[(c[d>>2]|0)+-12>>2]|0;e=d+a|0;a=d+(a+4)|0;b=(c[a>>2]|0)+-1|0;c[a>>2]=b;if((e|0)==0|(b|0)!=0){i=f;return}oc[c[(c[e>>2]|0)+4>>2]&2047](e);i=f;return}function vp(a){a=a|0;a=a+-16|0;_d(a,22252);c[a+56>>2]=12804;if(!(c[a+60>>2]|0))return;else Ha(74472,79014,56,74486)}function wp(a){a=a|0;a=a+-16|0;_d(a,22252);c[a+56>>2]=12804;if(!(c[a+60>>2]|0)){P_(a);return}else Ha(74472,79014,56,74486)}function xp(a,b){a=a|0;b=b|0;tp(a+-16|0,b);return}function yp(a,b){a=a|0;b=b|0;up(a+-16|0,b);return}function zp(a){a=a|0;var b=0;b=c[(c[a>>2]|0)+-12>>2]|0;_d(a+b|0,22252);c[a+(b+56)>>2]=12804;if(!(c[a+(b+60)>>2]|0))return;else Ha(74472,79014,56,74486)}function Ap(a){a=a|0;var b=0,d=0;d=c[(c[a>>2]|0)+-12>>2]|0;b=a+d|0;_d(b,22252);c[a+(d+56)>>2]=12804;if(!(c[a+(d+60)>>2]|0)){P_(b);return}else Ha(74472,79014,56,74486)}function Bp(a){a=a|0;P_(a);return}function Cp(b,d){b=b|0;d=d|0;var e=0,f=0;e=O_(64)|0;c[e+4>>2]=0;c[e+8>>2]=0;c[e+12>>2]=0;f=e+20|0;c[f>>2]=0;c[f+4>>2]=0;c[f+8>>2]=0;c[f+12>>2]=0;c[f+16>>2]=0;c[f+20>>2]=0;a[f+24>>0]=0;c[e+48>>2]=d;c[e>>2]=22288;c[e+56>>2]=22384;c[e+16>>2]=22356;c[e+52>>2]=76;c[e+60>>2]=2;f=c[(c[e>>2]|0)+-12>>2]|0;b=e+f|0;f=e+(f+4)|0;d=(c[f>>2]|0)+-1|0;c[f>>2]=d;if((b|0)==0|(d|0)!=0)return e|0;oc[c[(c[b>>2]|0)+4>>2]&2047](b);return e|0}function Dp(a){a=a|0;_d(a,22400);c[a+56>>2]=12804;if(!(c[a+60>>2]|0))return;else Ha(74472,79014,56,74486)}function Ep(a){a=a|0;Dp(a);P_(a);return}function Fp(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;f=i;i=i+16|0;e=f;d=o$(b,1488,4448,-1)|0;if(!d){DF(a,b);i=f;return}c[e>>2]=a;if((a|0)!=0?(a=a+((c[(c[a>>2]|0)+-12>>2]|0)+4)|0,b=(c[a>>2]|0)+1|0,c[a>>2]=b,(b|0)==0):0)Ha(79054,79014,48,79068);pc[c[(c[d>>2]|0)+8>>2]&1023](d,e);d=c[e>>2]|0;if(!d){i=f;return}a=c[(c[d>>2]|0)+-12>>2]|0;e=d+a|0;a=d+(a+4)|0;b=(c[a>>2]|0)+-1|0;c[a>>2]=b;if((e|0)==0|(b|0)!=0){i=f;return}oc[c[(c[e>>2]|0)+4>>2]&2047](e);i=f;return}function Gp(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;f=i;i=i+16|0;e=f;d=o$(b,1488,4448,-1)|0;if(!d){FF(a,b);i=f;return}c[e>>2]=a;if((a|0)!=0?(a=a+((c[(c[a>>2]|0)+-12>>2]|0)+4)|0,b=(c[a>>2]|0)+1|0,c[a>>2]=b,(b|0)==0):0)Ha(79054,79014,48,79068);pc[c[(c[d>>2]|0)+12>>2]&1023](d,e);d=c[e>>2]|0;if(!d){i=f;return}a=c[(c[d>>2]|0)+-12>>2]|0;e=d+a|0;a=d+(a+4)|0;b=(c[a>>2]|0)+-1|0;c[a>>2]=b;if((e|0)==0|(b|0)!=0){i=f;return}oc[c[(c[e>>2]|0)+4>>2]&2047](e);i=f;return}function Hp(a){a=a|0;a=a+-16|0;_d(a,22400);c[a+56>>2]=12804;if(!(c[a+60>>2]|0))return;else Ha(74472,79014,56,74486)}function Ip(a){a=a|0;a=a+-16|0;_d(a,22400);c[a+56>>2]=12804;if(!(c[a+60>>2]|0)){P_(a);return}else Ha(74472,79014,56,74486)}function Jp(a,b){a=a|0;b=b|0;Fp(a+-16|0,b);return}function Kp(a,b){a=a|0;b=b|0;Gp(a+-16|0,b);return}function Lp(a){a=a|0;var b=0;b=c[(c[a>>2]|0)+-12>>2]|0;_d(a+b|0,22400);c[a+(b+56)>>2]=12804;if(!(c[a+(b+60)>>2]|0))return;else Ha(74472,79014,56,74486)}function Mp(a){a=a|0;var b=0,d=0;d=c[(c[a>>2]|0)+-12>>2]|0;b=a+d|0;_d(b,22400);c[a+(d+56)>>2]=12804;if(!(c[a+(d+60)>>2]|0)){P_(b);return}else Ha(74472,79014,56,74486)}function Np(a){a=a|0;P_(a);return}function Op(b,d){b=b|0;d=d|0;var e=0,f=0;e=O_(64)|0;c[e+4>>2]=0;c[e+8>>2]=0;c[e+12>>2]=0;f=e+20|0;c[f>>2]=0;c[f+4>>2]=0;c[f+8>>2]=0;c[f+12>>2]=0;c[f+16>>2]=0;c[f+20>>2]=0;a[f+24>>0]=0;c[e+48>>2]=d;c[e>>2]=22436;c[e+56>>2]=22532;c[e+16>>2]=22504;c[e+52>>2]=75;c[e+60>>2]=2;f=c[(c[e>>2]|0)+-12>>2]|0;b=e+f|0;f=e+(f+4)|0;d=(c[f>>2]|0)+-1|0;c[f>>2]=d;if((b|0)==0|(d|0)!=0)return e|0;oc[c[(c[b>>2]|0)+4>>2]&2047](b);return e|0}function Pp(a){a=a|0;_d(a,22548);c[a+56>>2]=12804;if(!(c[a+60>>2]|0))return;else Ha(74472,79014,56,74486)}function Qp(a){a=a|0;Pp(a);P_(a);return}function Rp(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;f=i;i=i+16|0;e=f;d=o$(b,1488,4504,-1)|0;if(!d){DF(a,b);i=f;return}c[e>>2]=a;if((a|0)!=0?(a=a+((c[(c[a>>2]|0)+-12>>2]|0)+4)|0,b=(c[a>>2]|0)+1|0,c[a>>2]=b,(b|0)==0):0)Ha(79054,79014,48,79068);pc[c[(c[d>>2]|0)+8>>2]&1023](d,e);d=c[e>>2]|0;if(!d){i=f;return}a=c[(c[d>>2]|0)+-12>>2]|0;e=d+a|0;a=d+(a+4)|0;b=(c[a>>2]|0)+-1|0;c[a>>2]=b;if((e|0)==0|(b|0)!=0){i=f;return}oc[c[(c[e>>2]|0)+4>>2]&2047](e);i=f;return}function Sp(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;f=i;i=i+16|0;e=f;d=o$(b,1488,4504,-1)|0;if(!d){FF(a,b);i=f;return}c[e>>2]=a;if((a|0)!=0?(a=a+((c[(c[a>>2]|0)+-12>>2]|0)+4)|0,b=(c[a>>2]|0)+1|0,c[a>>2]=b,(b|0)==0):0)Ha(79054,79014,48,79068);pc[c[(c[d>>2]|0)+12>>2]&1023](d,e);d=c[e>>2]|0;if(!d){i=f;return}a=c[(c[d>>2]|0)+-12>>2]|0;e=d+a|0;a=d+(a+4)|0;b=(c[a>>2]|0)+-1|0;c[a>>2]=b;if((e|0)==0|(b|0)!=0){i=f;return}oc[c[(c[e>>2]|0)+4>>2]&2047](e);i=f;return}function Tp(a){a=a|0;a=a+-16|0;_d(a,22548);c[a+56>>2]=12804;if(!(c[a+60>>2]|0))return;else Ha(74472,79014,56,74486)}function Up(a){a=a|0;a=a+-16|0;_d(a,22548);c[a+56>>2]=12804;if(!(c[a+60>>2]|0)){P_(a);return}else Ha(74472,79014,56,74486)}function Vp(a,b){a=a|0;b=b|0;Rp(a+-16|0,b);return}function Wp(a,b){a=a|0;b=b|0;Sp(a+-16|0,b);return}function Xp(a){a=a|0;var b=0;b=c[(c[a>>2]|0)+-12>>2]|0;_d(a+b|0,22548);c[a+(b+56)>>2]=12804;if(!(c[a+(b+60)>>2]|0))return;else Ha(74472,79014,56,74486)}function Yp(a){a=a|0;var b=0,d=0;d=c[(c[a>>2]|0)+-12>>2]|0;b=a+d|0;_d(b,22548);c[a+(d+56)>>2]=12804;if(!(c[a+(d+60)>>2]|0)){P_(b);return}else Ha(74472,79014,56,74486)}function Zp(a){a=a|0;P_(a);return}function _p(b,d){b=b|0;d=d|0;var e=0,f=0;e=O_(64)|0;c[e+4>>2]=0;c[e+8>>2]=0;c[e+12>>2]=0;f=e+20|0;c[f>>2]=0;c[f+4>>2]=0;c[f+8>>2]=0;c[f+12>>2]=0;c[f+16>>2]=0;c[f+20>>2]=0;a[f+24>>0]=0;c[e+48>>2]=d;c[e>>2]=22584;c[e+56>>2]=22680;c[e+16>>2]=22652;c[e+52>>2]=74;c[e+60>>2]=2;f=c[(c[e>>2]|0)+-12>>2]|0;b=e+f|0;f=e+(f+4)|0;d=(c[f>>2]|0)+-1|0;c[f>>2]=d;if((b|0)==0|(d|0)!=0)return e|0;oc[c[(c[b>>2]|0)+4>>2]&2047](b);return e|0}function $p(a){a=a|0;_d(a,22696);c[a+56>>2]=12804;if(!(c[a+60>>2]|0))return;else Ha(74472,79014,56,74486)}function aq(a){a=a|0;$p(a);P_(a);return}function bq(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;f=i;i=i+16|0;e=f;d=o$(b,1488,4560,-1)|0;if(!d){DF(a,b);i=f;return}c[e>>2]=a;if((a|0)!=0?(a=a+((c[(c[a>>2]|0)+-12>>2]|0)+4)|0,b=(c[a>>2]|0)+1|0,c[a>>2]=b,(b|0)==0):0)Ha(79054,79014,48,79068);pc[c[(c[d>>2]|0)+8>>2]&1023](d,e);d=c[e>>2]|0;if(!d){i=f;return}a=c[(c[d>>2]|0)+-12>>2]|0;e=d+a|0;a=d+(a+4)|0;b=(c[a>>2]|0)+-1|0;c[a>>2]=b;if((e|0)==0|(b|0)!=0){i=f;return}oc[c[(c[e>>2]|0)+4>>2]&2047](e);i=f;return}function cq(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;f=i;i=i+16|0;e=f;d=o$(b,1488,4560,-1)|0;if(!d){FF(a,b);i=f;return}c[e>>2]=a;if((a|0)!=0?(a=a+((c[(c[a>>2]|0)+-12>>2]|0)+4)|0,b=(c[a>>2]|0)+1|0,c[a>>2]=b,(b|0)==0):0)Ha(79054,79014,48,79068);pc[c[(c[d>>2]|0)+12>>2]&1023](d,e);d=c[e>>2]|0;if(!d){i=f;return}a=c[(c[d>>2]|0)+-12>>2]|0;e=d+a|0;a=d+(a+4)|0;b=(c[a>>2]|0)+-1|0;c[a>>2]=b;if((e|0)==0|(b|0)!=0){i=f;return}oc[c[(c[e>>2]|0)+4>>2]&2047](e);i=f;return}function dq(a){a=a|0;a=a+-16|0;_d(a,22696);c[a+56>>2]=12804;if(!(c[a+60>>2]|0))return;else Ha(74472,79014,56,74486)}function eq(a){a=a|0;a=a+-16|0;_d(a,22696);c[a+56>>2]=12804;if(!(c[a+60>>2]|0)){P_(a);return}else Ha(74472,79014,56,74486)}function fq(a,b){a=a|0;b=b|0;bq(a+-16|0,b);return}function gq(a,b){a=a|0;b=b|0;cq(a+-16|0,b);return}function hq(a){a=a|0;var b=0;b=c[(c[a>>2]|0)+-12>>2]|0;_d(a+b|0,22696);c[a+(b+56)>>2]=12804;if(!(c[a+(b+60)>>2]|0))return;else Ha(74472,79014,56,74486)}function iq(a){a=a|0;var b=0,d=0;d=c[(c[a>>2]|0)+-12>>2]|0;b=a+d|0;_d(b,22696);c[a+(d+56)>>2]=12804;if(!(c[a+(d+60)>>2]|0)){P_(b);return}else Ha(74472,79014,56,74486)}function jq(a){a=a|0;P_(a);return}function kq(b,d){b=b|0;d=d|0;var e=0,f=0;e=O_(64)|0;c[e+4>>2]=0;c[e+8>>2]=0;c[e+12>>2]=0;f=e+20|0;c[f>>2]=0;c[f+4>>2]=0;c[f+8>>2]=0;c[f+12>>2]=0;c[f+16>>2]=0;c[f+20>>2]=0;a[f+24>>0]=0;c[e+48>>2]=d;c[e>>2]=22732;c[e+56>>2]=22828;c[e+16>>2]=22800;c[e+52>>2]=73;c[e+60>>2]=2;f=c[(c[e>>2]|0)+-12>>2]|0;b=e+f|0;f=e+(f+4)|0;d=(c[f>>2]|0)+-1|0;c[f>>2]=d;if((b|0)==0|(d|0)!=0)return e|0;oc[c[(c[b>>2]|0)+4>>2]&2047](b);return e|0}function lq(a){a=a|0;_d(a,22844);c[a+56>>2]=12804;if(!(c[a+60>>2]|0))return;else Ha(74472,79014,56,74486)}function mq(a){a=a|0;lq(a);P_(a);return}function nq(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;f=i;i=i+16|0;e=f;d=o$(b,1488,4616,-1)|0;if(!d){DF(a,b);i=f;return}c[e>>2]=a;if((a|0)!=0?(a=a+((c[(c[a>>2]|0)+-12>>2]|0)+4)|0,b=(c[a>>2]|0)+1|0,c[a>>2]=b,(b|0)==0):0)Ha(79054,79014,48,79068);pc[c[(c[d>>2]|0)+8>>2]&1023](d,e);d=c[e>>2]|0;if(!d){i=f;return}a=c[(c[d>>2]|0)+-12>>2]|0;e=d+a|0;a=d+(a+4)|0;b=(c[a>>2]|0)+-1|0;c[a>>2]=b;if((e|0)==0|(b|0)!=0){i=f;return}oc[c[(c[e>>2]|0)+4>>2]&2047](e);i=f;return}function oq(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;f=i;i=i+16|0;e=f;d=o$(b,1488,4616,-1)|0;if(!d){FF(a,b);i=f;return}c[e>>2]=a;if((a|0)!=0?(a=a+((c[(c[a>>2]|0)+-12>>2]|0)+4)|0,b=(c[a>>2]|0)+1|0,c[a>>2]=b,(b|0)==0):0)Ha(79054,79014,48,79068);pc[c[(c[d>>2]|0)+12>>2]&1023](d,e);d=c[e>>2]|0;if(!d){i=f;return}a=c[(c[d>>2]|0)+-12>>2]|0;e=d+a|0;a=d+(a+4)|0;b=(c[a>>2]|0)+-1|0;c[a>>2]=b;if((e|0)==0|(b|0)!=0){i=f;return}oc[c[(c[e>>2]|0)+4>>2]&2047](e);i=f;return}function pq(a){a=a|0;a=a+-16|0;_d(a,22844);c[a+56>>2]=12804;if(!(c[a+60>>2]|0))return;else Ha(74472,79014,56,74486)}function qq(a){a=a|0;a=a+-16|0;_d(a,22844);c[a+56>>2]=12804;if(!(c[a+60>>2]|0)){P_(a);return}else Ha(74472,79014,56,74486)}function rq(a,b){a=a|0;b=b|0;nq(a+-16|0,b);return}function sq(a,b){a=a|0;b=b|0;oq(a+-16|0,b);return}function tq(a){a=a|0;var b=0;b=c[(c[a>>2]|0)+-12>>2]|0;_d(a+b|0,22844);c[a+(b+56)>>2]=12804;if(!(c[a+(b+60)>>2]|0))return;else Ha(74472,79014,56,74486)}function uq(a){a=a|0;var b=0,d=0;d=c[(c[a>>2]|0)+-12>>2]|0;b=a+d|0;_d(b,22844);c[a+(d+56)>>2]=12804;if(!(c[a+(d+60)>>2]|0)){P_(b);return}else Ha(74472,79014,56,74486)}function vq(a){a=a|0;P_(a);return}function wq(b,d){b=b|0;d=d|0;var e=0,f=0;e=O_(64)|0;c[e+4>>2]=0;c[e+8>>2]=0;c[e+12>>2]=0;f=e+20|0;c[f>>2]=0;c[f+4>>2]=0;c[f+8>>2]=0;c[f+12>>2]=0;c[f+16>>2]=0;c[f+20>>2]=0;a[f+24>>0]=0;c[e+48>>2]=d;c[e>>2]=22880;c[e+56>>2]=22976;c[e+16>>2]=22948;c[e+52>>2]=72;c[e+60>>2]=2;f=c[(c[e>>2]|0)+-12>>2]|0;b=e+f|0;f=e+(f+4)|0;d=(c[f>>2]|0)+-1|0;c[f>>2]=d;if((b|0)==0|(d|0)!=0)return e|0;oc[c[(c[b>>2]|0)+4>>2]&2047](b);return e|0}function xq(a){a=a|0;_d(a,22992);c[a+56>>2]=12804;if(!(c[a+60>>2]|0))return;else Ha(74472,79014,56,74486)}function yq(a){a=a|0;xq(a);P_(a);return}function zq(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;f=i;i=i+16|0;e=f;d=o$(b,1488,4672,-1)|0;if(!d){DF(a,b);i=f;return}c[e>>2]=a;if((a|0)!=0?(a=a+((c[(c[a>>2]|0)+-12>>2]|0)+4)|0,b=(c[a>>2]|0)+1|0,c[a>>2]=b,(b|0)==0):0)Ha(79054,79014,48,79068);pc[c[(c[d>>2]|0)+8>>2]&1023](d,e);d=c[e>>2]|0;if(!d){i=f;return}a=c[(c[d>>2]|0)+-12>>2]|0;e=d+a|0;a=d+(a+4)|0;b=(c[a>>2]|0)+-1|0;c[a>>2]=b;if((e|0)==0|(b|0)!=0){i=f;return}oc[c[(c[e>>2]|0)+4>>2]&2047](e);i=f;return}function Aq(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;f=i;i=i+16|0;e=f;d=o$(b,1488,4672,-1)|0;if(!d){FF(a,b);i=f;return}c[e>>2]=a;if((a|0)!=0?(a=a+((c[(c[a>>2]|0)+-12>>2]|0)+4)|0,b=(c[a>>2]|0)+1|0,c[a>>2]=b,(b|0)==0):0)Ha(79054,79014,48,79068);pc[c[(c[d>>2]|0)+12>>2]&1023](d,e);d=c[e>>2]|0;if(!d){i=f;return}a=c[(c[d>>2]|0)+-12>>2]|0;e=d+a|0;a=d+(a+4)|0;b=(c[a>>2]|0)+-1|0;c[a>>2]=b;if((e|0)==0|(b|0)!=0){i=f;return}oc[c[(c[e>>2]|0)+4>>2]&2047](e);i=f;return}function Bq(a){a=a|0;a=a+-16|0;_d(a,22992);c[a+56>>2]=12804;if(!(c[a+60>>2]|0))return;else Ha(74472,79014,56,74486)}function Cq(a){a=a|0;a=a+-16|0;_d(a,22992);c[a+56>>2]=12804;if(!(c[a+60>>2]|0)){P_(a);return}else Ha(74472,79014,56,74486)}function Dq(a,b){a=a|0;b=b|0;zq(a+-16|0,b);return}function Eq(a,b){a=a|0;b=b|0;Aq(a+-16|0,b);return}function Fq(a){a=a|0;var b=0;b=c[(c[a>>2]|0)+-12>>2]|0;_d(a+b|0,22992);c[a+(b+56)>>2]=12804;if(!(c[a+(b+60)>>2]|0))return;else Ha(74472,79014,56,74486)}function Gq(a){a=a|0;var b=0,d=0;d=c[(c[a>>2]|0)+-12>>2]|0;b=a+d|0;_d(b,22992);c[a+(d+56)>>2]=12804;if(!(c[a+(d+60)>>2]|0)){P_(b);return}else Ha(74472,79014,56,74486)}function Hq(a){a=a|0;P_(a);return}function Iq(b,d){b=b|0;d=d|0;var e=0,f=0;e=O_(64)|0;c[e+4>>2]=0;c[e+8>>2]=0;c[e+12>>2]=0;f=e+20|0;c[f>>2]=0;c[f+4>>2]=0;c[f+8>>2]=0;c[f+12>>2]=0;c[f+16>>2]=0;c[f+20>>2]=0;a[f+24>>0]=0;c[e+48>>2]=d;c[e>>2]=23028;c[e+56>>2]=23124;c[e+16>>2]=23096;c[e+52>>2]=71;c[e+60>>2]=2;f=c[(c[e>>2]|0)+-12>>2]|0;b=e+f|0;f=e+(f+4)|0;d=(c[f>>2]|0)+-1|0;c[f>>2]=d;if((b|0)==0|(d|0)!=0)return e|0;oc[c[(c[b>>2]|0)+4>>2]&2047](b);return e|0}function Jq(a){a=a|0;_d(a,23140);c[a+56>>2]=12804;if(!(c[a+60>>2]|0))return;else Ha(74472,79014,56,74486)}function Kq(a){a=a|0;Jq(a);P_(a);return}function Lq(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;f=i;i=i+16|0;e=f;d=o$(b,1488,4728,-1)|0;if(!d){DF(a,b);i=f;return}c[e>>2]=a;if((a|0)!=0?(a=a+((c[(c[a>>2]|0)+-12>>2]|0)+4)|0,b=(c[a>>2]|0)+1|0,c[a>>2]=b,(b|0)==0):0)Ha(79054,79014,48,79068);pc[c[(c[d>>2]|0)+8>>2]&1023](d,e);d=c[e>>2]|0;if(!d){i=f;return}a=c[(c[d>>2]|0)+-12>>2]|0;e=d+a|0;a=d+(a+4)|0;b=(c[a>>2]|0)+-1|0;c[a>>2]=b;if((e|0)==0|(b|0)!=0){i=f;return}oc[c[(c[e>>2]|0)+4>>2]&2047](e);i=f;return}function Mq(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;f=i;i=i+16|0;e=f;d=o$(b,1488,4728,-1)|0;if(!d){FF(a,b);i=f;return}c[e>>2]=a;if((a|0)!=0?(a=a+((c[(c[a>>2]|0)+-12>>2]|0)+4)|0,b=(c[a>>2]|0)+1|0,c[a>>2]=b,(b|0)==0):0)Ha(79054,79014,48,79068);pc[c[(c[d>>2]|0)+12>>2]&1023](d,e);d=c[e>>2]|0;if(!d){i=f;return}a=c[(c[d>>2]|0)+-12>>2]|0;e=d+a|0;a=d+(a+4)|0;b=(c[a>>2]|0)+-1|0;c[a>>2]=b;if((e|0)==0|(b|0)!=0){i=f;return}oc[c[(c[e>>2]|0)+4>>2]&2047](e);i=f;return}function Nq(a){a=a|0;a=a+-16|0;_d(a,23140);c[a+56>>2]=12804;if(!(c[a+60>>2]|0))return;else Ha(74472,79014,56,74486)}function Oq(a){a=a|0;a=a+-16|0;_d(a,23140);c[a+56>>2]=12804;if(!(c[a+60>>2]|0)){P_(a);return}else Ha(74472,79014,56,74486)}function Pq(a,b){a=a|0;b=b|0;Lq(a+-16|0,b);return}function Qq(a,b){a=a|0;b=b|0;Mq(a+-16|0,b);return}function Rq(a){a=a|0;var b=0;b=c[(c[a>>2]|0)+-12>>2]|0;_d(a+b|0,23140);c[a+(b+56)>>2]=12804;if(!(c[a+(b+60)>>2]|0))return;else Ha(74472,79014,56,74486)}function Sq(a){a=a|0;var b=0,d=0;d=c[(c[a>>2]|0)+-12>>2]|0;b=a+d|0;_d(b,23140);c[a+(d+56)>>2]=12804;if(!(c[a+(d+60)>>2]|0)){P_(b);return}else Ha(74472,79014,56,74486)}function Tq(a){a=a|0;P_(a);return}function Uq(b,d){b=b|0;d=d|0;var e=0,f=0;e=O_(64)|0;c[e+4>>2]=0;c[e+8>>2]=0;c[e+12>>2]=0;f=e+20|0;c[f>>2]=0;c[f+4>>2]=0;c[f+8>>2]=0;c[f+12>>2]=0;c[f+16>>2]=0;c[f+20>>2]=0;a[f+24>>0]=0;c[e+48>>2]=d;c[e>>2]=23176;c[e+56>>2]=23272;c[e+16>>2]=23244;c[e+52>>2]=70;c[e+60>>2]=2;f=c[(c[e>>2]|0)+-12>>2]|0;b=e+f|0;f=e+(f+4)|0;d=(c[f>>2]|0)+-1|0;c[f>>2]=d;if((b|0)==0|(d|0)!=0)return e|0;oc[c[(c[b>>2]|0)+4>>2]&2047](b);return e|0}function Vq(a){a=a|0;_d(a,23288);c[a+56>>2]=12804;if(!(c[a+60>>2]|0))return;else Ha(74472,79014,56,74486)}function Wq(a){a=a|0;Vq(a);P_(a);return}function Xq(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;f=i;i=i+16|0;e=f;d=o$(b,1488,4784,-1)|0;if(!d){DF(a,b);i=f;return}c[e>>2]=a;if((a|0)!=0?(a=a+((c[(c[a>>2]|0)+-12>>2]|0)+4)|0,b=(c[a>>2]|0)+1|0,c[a>>2]=b,(b|0)==0):0)Ha(79054,79014,48,79068);pc[c[(c[d>>2]|0)+8>>2]&1023](d,e);d=c[e>>2]|0;if(!d){i=f;return}a=c[(c[d>>2]|0)+-12>>2]|0;e=d+a|0;a=d+(a+4)|0;b=(c[a>>2]|0)+-1|0;c[a>>2]=b;if((e|0)==0|(b|0)!=0){i=f;return}oc[c[(c[e>>2]|0)+4>>2]&2047](e);i=f;return}function Yq(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;f=i;i=i+16|0;e=f;d=o$(b,1488,4784,-1)|0;if(!d){FF(a,b);i=f;return}c[e>>2]=a;if((a|0)!=0?(a=a+((c[(c[a>>2]|0)+-12>>2]|0)+4)|0,b=(c[a>>2]|0)+1|0,c[a>>2]=b,(b|0)==0):0)Ha(79054,79014,48,79068);pc[c[(c[d>>2]|0)+12>>2]&1023](d,e);d=c[e>>2]|0;if(!d){i=f;return}a=c[(c[d>>2]|0)+-12>>2]|0;e=d+a|0;a=d+(a+4)|0;b=(c[a>>2]|0)+-1|0;c[a>>2]=b;if((e|0)==0|(b|0)!=0){i=f;return}oc[c[(c[e>>2]|0)+4>>2]&2047](e);i=f;return}function Zq(a){a=a|0;a=a+-16|0;_d(a,23288);c[a+56>>2]=12804;if(!(c[a+60>>2]|0))return;else Ha(74472,79014,56,74486)}function _q(a){a=a|0;a=a+-16|0;_d(a,23288);c[a+56>>2]=12804;if(!(c[a+60>>2]|0)){P_(a);return}else Ha(74472,79014,56,74486)}function $q(a,b){a=a|0;b=b|0;Xq(a+-16|0,b);return}function ar(a,b){a=a|0;b=b|0;Yq(a+-16|0,b);return}function br(a){a=a|0;var b=0;b=c[(c[a>>2]|0)+-12>>2]|0;_d(a+b|0,23288);c[a+(b+56)>>2]=12804;if(!(c[a+(b+60)>>2]|0))return;else Ha(74472,79014,56,74486)}function cr(a){a=a|0;var b=0,d=0;d=c[(c[a>>2]|0)+-12>>2]|0;b=a+d|0;_d(b,23288);c[a+(d+56)>>2]=12804;if(!(c[a+(d+60)>>2]|0)){P_(b);return}else Ha(74472,79014,56,74486)}function dr(a){a=a|0;P_(a);return}function er(b,d){b=b|0;d=d|0;var e=0,f=0;e=O_(64)|0;c[e+4>>2]=0;c[e+8>>2]=0;c[e+12>>2]=0;f=e+20|0;c[f>>2]=0;c[f+4>>2]=0;c[f+8>>2]=0;c[f+12>>2]=0;c[f+16>>2]=0;c[f+20>>2]=0;a[f+24>>0]=0;c[e+48>>2]=d;c[e>>2]=23324;c[e+56>>2]=23420;c[e+16>>2]=23392;c[e+52>>2]=69;c[e+60>>2]=2;f=c[(c[e>>2]|0)+-12>>2]|0;b=e+f|0;f=e+(f+4)|0;d=(c[f>>2]|0)+-1|0;c[f>>2]=d;if((b|0)==0|(d|0)!=0)return e|0;oc[c[(c[b>>2]|0)+4>>2]&2047](b);return e|0}function fr(a){a=a|0;_d(a,23436);c[a+56>>2]=12804;if(!(c[a+60>>2]|0))return;else Ha(74472,79014,56,74486)}function gr(a){a=a|0;fr(a);P_(a);return}function hr(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;f=i;i=i+16|0;e=f;d=o$(b,1488,4840,-1)|0;if(!d){DF(a,b);i=f;return}c[e>>2]=a;if((a|0)!=0?(a=a+((c[(c[a>>2]|0)+-12>>2]|0)+4)|0,b=(c[a>>2]|0)+1|0,c[a>>2]=b,(b|0)==0):0)Ha(79054,79014,48,79068);pc[c[(c[d>>2]|0)+8>>2]&1023](d,e);d=c[e>>2]|0;if(!d){i=f;return}a=c[(c[d>>2]|0)+-12>>2]|0;e=d+a|0;a=d+(a+4)|0;b=(c[a>>2]|0)+-1|0;c[a>>2]=b;if((e|0)==0|(b|0)!=0){i=f;return}oc[c[(c[e>>2]|0)+4>>2]&2047](e);i=f;return}function ir(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;f=i;i=i+16|0;e=f;d=o$(b,1488,4840,-1)|0;if(!d){FF(a,b);i=f;return}c[e>>2]=a;if((a|0)!=0?(a=a+((c[(c[a>>2]|0)+-12>>2]|0)+4)|0,b=(c[a>>2]|0)+1|0,c[a>>2]=b,(b|0)==0):0)Ha(79054,79014,48,79068);pc[c[(c[d>>2]|0)+12>>2]&1023](d,e);d=c[e>>2]|0;if(!d){i=f;return}a=c[(c[d>>2]|0)+-12>>2]|0;e=d+a|0;a=d+(a+4)|0;b=(c[a>>2]|0)+-1|0;c[a>>2]=b;if((e|0)==0|(b|0)!=0){i=f;return}oc[c[(c[e>>2]|0)+4>>2]&2047](e);i=f;return}function jr(a){a=a|0;a=a+-16|0;_d(a,23436);c[a+56>>2]=12804;if(!(c[a+60>>2]|0))return;else Ha(74472,79014,56,74486)}function kr(a){a=a|0;a=a+-16|0;_d(a,23436);c[a+56>>2]=12804;if(!(c[a+60>>2]|0)){P_(a);return}else Ha(74472,79014,56,74486)}function lr(a,b){a=a|0;b=b|0;hr(a+-16|0,b);return}function mr(a,b){a=a|0;b=b|0;ir(a+-16|0,b);return}function nr(a){a=a|0;var b=0;b=c[(c[a>>2]|0)+-12>>2]|0;_d(a+b|0,23436);c[a+(b+56)>>2]=12804;if(!(c[a+(b+60)>>2]|0))return;else Ha(74472,79014,56,74486)}function or(a){a=a|0;var b=0,d=0;d=c[(c[a>>2]|0)+-12>>2]|0;b=a+d|0;_d(b,23436);c[a+(d+56)>>2]=12804;if(!(c[a+(d+60)>>2]|0)){P_(b);return}else Ha(74472,79014,56,74486)}function pr(a){a=a|0;P_(a);return}function qr(b,d){b=b|0;d=d|0;var e=0,f=0;e=O_(64)|0;c[e+4>>2]=0;c[e+8>>2]=0;c[e+12>>2]=0;f=e+20|0;c[f>>2]=0;c[f+4>>2]=0;c[f+8>>2]=0;c[f+12>>2]=0;c[f+16>>2]=0;c[f+20>>2]=0;a[f+24>>0]=0;c[e+48>>2]=d;c[e>>2]=23472;c[e+56>>2]=23568;c[e+16>>2]=23540;c[e+52>>2]=68;c[e+60>>2]=2;f=c[(c[e>>2]|0)+-12>>2]|0;b=e+f|0;f=e+(f+4)|0;d=(c[f>>2]|0)+-1|0;c[f>>2]=d;if((b|0)==0|(d|0)!=0)return e|0;oc[c[(c[b>>2]|0)+4>>2]&2047](b);return e|0}function rr(a){a=a|0;_d(a,23584);c[a+56>>2]=12804;if(!(c[a+60>>2]|0))return;else Ha(74472,79014,56,74486)}function sr(a){a=a|0;rr(a);P_(a);return}function tr(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;f=i;i=i+16|0;e=f;d=o$(b,1488,4896,-1)|0;if(!d){DF(a,b);i=f;return}c[e>>2]=a;if((a|0)!=0?(a=a+((c[(c[a>>2]|0)+-12>>2]|0)+4)|0,b=(c[a>>2]|0)+1|0,c[a>>2]=b,(b|0)==0):0)Ha(79054,79014,48,79068);pc[c[(c[d>>2]|0)+8>>2]&1023](d,e);d=c[e>>2]|0;if(!d){i=f;return}a=c[(c[d>>2]|0)+-12>>2]|0;e=d+a|0;a=d+(a+4)|0;b=(c[a>>2]|0)+-1|0;c[a>>2]=b;if((e|0)==0|(b|0)!=0){i=f;return}oc[c[(c[e>>2]|0)+4>>2]&2047](e);i=f;return}function ur(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;f=i;i=i+16|0;e=f;d=o$(b,1488,4896,-1)|0;if(!d){FF(a,b);i=f;return}c[e>>2]=a;if((a|0)!=0?(a=a+((c[(c[a>>2]|0)+-12>>2]|0)+4)|0,b=(c[a>>2]|0)+1|0,c[a>>2]=b,(b|0)==0):0)Ha(79054,79014,48,79068);pc[c[(c[d>>2]|0)+12>>2]&1023](d,e);d=c[e>>2]|0;if(!d){i=f;return}a=c[(c[d>>2]|0)+-12>>2]|0;e=d+a|0;a=d+(a+4)|0;b=(c[a>>2]|0)+-1|0;c[a>>2]=b;if((e|0)==0|(b|0)!=0){i=f;return}oc[c[(c[e>>2]|0)+4>>2]&2047](e);i=f;return}function vr(a){a=a|0;a=a+-16|0;_d(a,23584);c[a+56>>2]=12804;if(!(c[a+60>>2]|0))return;else Ha(74472,79014,56,74486)}function wr(a){a=a|0;a=a+-16|0;_d(a,23584);c[a+56>>2]=12804;if(!(c[a+60>>2]|0)){P_(a);return}else Ha(74472,79014,56,74486)}function xr(a,b){a=a|0;b=b|0;tr(a+-16|0,b);return}function yr(a,b){a=a|0;b=b|0;ur(a+-16|0,b);return}function zr(a){a=a|0;var b=0;b=c[(c[a>>2]|0)+-12>>2]|0;_d(a+b|0,23584);c[a+(b+56)>>2]=12804;if(!(c[a+(b+60)>>2]|0))return;else Ha(74472,79014,56,74486)}function Ar(a){a=a|0;var b=0,d=0;d=c[(c[a>>2]|0)+-12>>2]|0;b=a+d|0;_d(b,23584);c[a+(d+56)>>2]=12804;if(!(c[a+(d+60)>>2]|0)){P_(b);return}else Ha(74472,79014,56,74486)}function Br(a){a=a|0;P_(a);return}function Cr(b,d){b=b|0;d=d|0;var e=0,f=0;e=O_(64)|0;c[e+4>>2]=0;c[e+8>>2]=0;c[e+12>>2]=0;f=e+20|0;c[f>>2]=0;c[f+4>>2]=0;c[f+8>>2]=0;c[f+12>>2]=0;c[f+16>>2]=0;c[f+20>>2]=0;a[f+24>>0]=0;c[e+48>>2]=d;c[e>>2]=23620;c[e+56>>2]=23716;c[e+16>>2]=23688;c[e+52>>2]=67;c[e+60>>2]=2;f=c[(c[e>>2]|0)+-12>>2]|0;b=e+f|0;f=e+(f+4)|0;d=(c[f>>2]|0)+-1|0;c[f>>2]=d;if((b|0)==0|(d|0)!=0)return e|0;oc[c[(c[b>>2]|0)+4>>2]&2047](b);return e|0}function Dr(a){a=a|0;_d(a,23732);c[a+56>>2]=12804;if(!(c[a+60>>2]|0))return;else Ha(74472,79014,56,74486)}function Er(a){a=a|0;Dr(a);P_(a);return}function Fr(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;f=i;i=i+16|0;e=f;d=o$(b,1488,4952,-1)|0;if(!d){DF(a,b);i=f;return}c[e>>2]=a;if((a|0)!=0?(a=a+((c[(c[a>>2]|0)+-12>>2]|0)+4)|0,b=(c[a>>2]|0)+1|0,c[a>>2]=b,(b|0)==0):0)Ha(79054,79014,48,79068);pc[c[(c[d>>2]|0)+8>>2]&1023](d,e);d=c[e>>2]|0;if(!d){i=f;return}a=c[(c[d>>2]|0)+-12>>2]|0;e=d+a|0;a=d+(a+4)|0;b=(c[a>>2]|0)+-1|0;c[a>>2]=b;if((e|0)==0|(b|0)!=0){i=f;return}oc[c[(c[e>>2]|0)+4>>2]&2047](e);i=f;return}function Gr(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;f=i;i=i+16|0;e=f;d=o$(b,1488,4952,-1)|0;if(!d){FF(a,b);i=f;return}c[e>>2]=a;if((a|0)!=0?(a=a+((c[(c[a>>2]|0)+-12>>2]|0)+4)|0,b=(c[a>>2]|0)+1|0,c[a>>2]=b,(b|0)==0):0)Ha(79054,79014,48,79068);pc[c[(c[d>>2]|0)+12>>2]&1023](d,e);d=c[e>>2]|0;if(!d){i=f;return}a=c[(c[d>>2]|0)+-12>>2]|0;e=d+a|0;a=d+(a+4)|0;b=(c[a>>2]|0)+-1|0;c[a>>2]=b;if((e|0)==0|(b|0)!=0){i=f;return}oc[c[(c[e>>2]|0)+4>>2]&2047](e);i=f;return}function Hr(a){a=a|0;a=a+-16|0;_d(a,23732);c[a+56>>2]=12804;if(!(c[a+60>>2]|0))return;else Ha(74472,79014,56,74486)}function Ir(a){a=a|0;a=a+-16|0;_d(a,23732);c[a+56>>2]=12804;if(!(c[a+60>>2]|0)){P_(a);return}else Ha(74472,79014,56,74486)}function Jr(a,b){a=a|0;b=b|0;Fr(a+-16|0,b);return}function Kr(a,b){a=a|0;b=b|0;Gr(a+-16|0,b);return}function Lr(a){a=a|0;var b=0;b=c[(c[a>>2]|0)+-12>>2]|0;_d(a+b|0,23732);c[a+(b+56)>>2]=12804;if(!(c[a+(b+60)>>2]|0))return;else Ha(74472,79014,56,74486)}function Mr(a){a=a|0;var b=0,d=0;d=c[(c[a>>2]|0)+-12>>2]|0;b=a+d|0;_d(b,23732);c[a+(d+56)>>2]=12804;if(!(c[a+(d+60)>>2]|0)){P_(b);return}else Ha(74472,79014,56,74486)}function Nr(a){a=a|0;P_(a);return}function Or(b,d){b=b|0;d=d|0;var e=0,f=0;e=O_(64)|0;c[e+4>>2]=0;c[e+8>>2]=0;c[e+12>>2]=0;f=e+20|0;c[f>>2]=0;c[f+4>>2]=0;c[f+8>>2]=0;c[f+12>>2]=0;c[f+16>>2]=0;c[f+20>>2]=0;a[f+24>>0]=0;c[e+48>>2]=d;c[e>>2]=23768;c[e+56>>2]=23864;c[e+16>>2]=23836;c[e+52>>2]=66;c[e+60>>2]=2;f=c[(c[e>>2]|0)+-12>>2]|0;b=e+f|0;f=e+(f+4)|0;d=(c[f>>2]|0)+-1|0;c[f>>2]=d;if((b|0)==0|(d|0)!=0)return e|0;oc[c[(c[b>>2]|0)+4>>2]&2047](b);return e|0}function Pr(a){a=a|0;_d(a,23880);c[a+56>>2]=12804;if(!(c[a+60>>2]|0))return;else Ha(74472,79014,56,74486)}function Qr(a){a=a|0;Pr(a);P_(a);return}function Rr(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;f=i;i=i+16|0;e=f;d=o$(b,1488,5008,-1)|0;if(!d){DF(a,b);i=f;return}c[e>>2]=a;if((a|0)!=0?(a=a+((c[(c[a>>2]|0)+-12>>2]|0)+4)|0,b=(c[a>>2]|0)+1|0,c[a>>2]=b,(b|0)==0):0)Ha(79054,79014,48,79068);pc[c[(c[d>>2]|0)+8>>2]&1023](d,e);d=c[e>>2]|0;if(!d){i=f;return}a=c[(c[d>>2]|0)+-12>>2]|0;e=d+a|0;a=d+(a+4)|0;b=(c[a>>2]|0)+-1|0;c[a>>2]=b;if((e|0)==0|(b|0)!=0){i=f;return}oc[c[(c[e>>2]|0)+4>>2]&2047](e);i=f;return}function Sr(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;f=i;i=i+16|0;e=f;d=o$(b,1488,5008,-1)|0;if(!d){FF(a,b);i=f;return}c[e>>2]=a;if((a|0)!=0?(a=a+((c[(c[a>>2]|0)+-12>>2]|0)+4)|0,b=(c[a>>2]|0)+1|0,c[a>>2]=b,(b|0)==0):0)Ha(79054,79014,48,79068);pc[c[(c[d>>2]|0)+12>>2]&1023](d,e);d=c[e>>2]|0;if(!d){i=f;return}a=c[(c[d>>2]|0)+-12>>2]|0;e=d+a|0;a=d+(a+4)|0;b=(c[a>>2]|0)+-1|0;c[a>>2]=b;if((e|0)==0|(b|0)!=0){i=f;return}oc[c[(c[e>>2]|0)+4>>2]&2047](e);i=f;return}function Tr(a){a=a|0;a=a+-16|0;_d(a,23880);c[a+56>>2]=12804;if(!(c[a+60>>2]|0))return;else Ha(74472,79014,56,74486)}function Ur(a){a=a|0;a=a+-16|0;_d(a,23880);c[a+56>>2]=12804;if(!(c[a+60>>2]|0)){P_(a);return}else Ha(74472,79014,56,74486)}function Vr(a,b){a=a|0;b=b|0;Rr(a+-16|0,b);return}function Wr(a,b){a=a|0;b=b|0;Sr(a+-16|0,b);return}function Xr(a){a=a|0;var b=0;b=c[(c[a>>2]|0)+-12>>2]|0;_d(a+b|0,23880);c[a+(b+56)>>2]=12804;if(!(c[a+(b+60)>>2]|0))return;else Ha(74472,79014,56,74486)}function Yr(a){a=a|0;var b=0,d=0;d=c[(c[a>>2]|0)+-12>>2]|0;b=a+d|0;_d(b,23880);c[a+(d+56)>>2]=12804;if(!(c[a+(d+60)>>2]|0)){P_(b);return}else Ha(74472,79014,56,74486)}function Zr(a){a=a|0;P_(a);return}function _r(b,d){b=b|0;d=d|0;var e=0,f=0;e=O_(64)|0;c[e+4>>2]=0;c[e+8>>2]=0;c[e+12>>2]=0;f=e+20|0;c[f>>2]=0;c[f+4>>2]=0;c[f+8>>2]=0;c[f+12>>2]=0;c[f+16>>2]=0;c[f+20>>2]=0;a[f+24>>0]=0;c[e+48>>2]=d;c[e>>2]=23916;c[e+56>>2]=24012;c[e+16>>2]=23984;c[e+52>>2]=65;c[e+60>>2]=2;f=c[(c[e>>2]|0)+-12>>2]|0;b=e+f|0;f=e+(f+4)|0;d=(c[f>>2]|0)+-1|0;c[f>>2]=d;if((b|0)==0|(d|0)!=0)return e|0;oc[c[(c[b>>2]|0)+4>>2]&2047](b);return e|0}function $r(a){a=a|0;_d(a,24028);c[a+56>>2]=12804;if(!(c[a+60>>2]|0))return;else Ha(74472,79014,56,74486)}function as(a){a=a|0;$r(a);P_(a);return}function bs(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;f=i;i=i+16|0;e=f;d=o$(b,1488,5064,-1)|0;if(!d){DF(a,b);i=f;return}c[e>>2]=a;if((a|0)!=0?(a=a+((c[(c[a>>2]|0)+-12>>2]|0)+4)|0,b=(c[a>>2]|0)+1|0,c[a>>2]=b,(b|0)==0):0)Ha(79054,79014,48,79068);pc[c[(c[d>>2]|0)+8>>2]&1023](d,e);d=c[e>>2]|0;if(!d){i=f;return}a=c[(c[d>>2]|0)+-12>>2]|0;e=d+a|0;a=d+(a+4)|0;b=(c[a>>2]|0)+-1|0;c[a>>2]=b;if((e|0)==0|(b|0)!=0){i=f;return}oc[c[(c[e>>2]|0)+4>>2]&2047](e);i=f;return}function cs(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;f=i;i=i+16|0;e=f;d=o$(b,1488,5064,-1)|0;if(!d){FF(a,b);i=f;return}c[e>>2]=a;if((a|0)!=0?(a=a+((c[(c[a>>2]|0)+-12>>2]|0)+4)|0,b=(c[a>>2]|0)+1|0,c[a>>2]=b,(b|0)==0):0)Ha(79054,79014,48,79068);pc[c[(c[d>>2]|0)+12>>2]&1023](d,e);d=c[e>>2]|0;if(!d){i=f;return}a=c[(c[d>>2]|0)+-12>>2]|0;e=d+a|0;a=d+(a+4)|0;b=(c[a>>2]|0)+-1|0;c[a>>2]=b;if((e|0)==0|(b|0)!=0){i=f;return}oc[c[(c[e>>2]|0)+4>>2]&2047](e);i=f;return}function ds(a){a=a|0;a=a+-16|0;_d(a,24028);c[a+56>>2]=12804;if(!(c[a+60>>2]|0))return;else Ha(74472,79014,56,74486)}function es(a){a=a|0;a=a+-16|0;_d(a,24028);c[a+56>>2]=12804;if(!(c[a+60>>2]|0)){P_(a);return}else Ha(74472,79014,56,74486)}function fs(a,b){a=a|0;b=b|0;bs(a+-16|0,b);return}function gs(a,b){a=a|0;b=b|0;cs(a+-16|0,b);return}function hs(a){a=a|0;var b=0;b=c[(c[a>>2]|0)+-12>>2]|0;_d(a+b|0,24028);c[a+(b+56)>>2]=12804;if(!(c[a+(b+60)>>2]|0))return;else Ha(74472,79014,56,74486)}function is(a){a=a|0;var b=0,d=0;d=c[(c[a>>2]|0)+-12>>2]|0;b=a+d|0;_d(b,24028);c[a+(d+56)>>2]=12804;if(!(c[a+(d+60)>>2]|0)){P_(b);return}else Ha(74472,79014,56,74486)}function js(a){a=a|0;P_(a);return}function ks(b,d){b=b|0;d=d|0;var e=0,f=0;e=O_(64)|0;c[e+4>>2]=0;c[e+8>>2]=0;c[e+12>>2]=0;f=e+20|0;c[f>>2]=0;c[f+4>>2]=0;c[f+8>>2]=0;c[f+12>>2]=0;c[f+16>>2]=0;c[f+20>>2]=0;a[f+24>>0]=0;c[e+48>>2]=d;c[e>>2]=24064;c[e+56>>2]=24160;c[e+16>>2]=24132;c[e+52>>2]=64;c[e+60>>2]=2;f=c[(c[e>>2]|0)+-12>>2]|0;b=e+f|0;f=e+(f+4)|0;d=(c[f>>2]|0)+-1|0;c[f>>2]=d;if((b|0)==0|(d|0)!=0)return e|0;oc[c[(c[b>>2]|0)+4>>2]&2047](b);return e|0}function ls(a){a=a|0;_d(a,24176);c[a+56>>2]=12804;if(!(c[a+60>>2]|0))return;else Ha(74472,79014,56,74486)}function ms(a){a=a|0;ls(a);P_(a);return}function ns(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;f=i;i=i+16|0;e=f;d=o$(b,1488,5120,-1)|0;if(!d){DF(a,b);i=f;return}c[e>>2]=a;if((a|0)!=0?(a=a+((c[(c[a>>2]|0)+-12>>2]|0)+4)|0,b=(c[a>>2]|0)+1|0,c[a>>2]=b,(b|0)==0):0)Ha(79054,79014,48,79068);pc[c[(c[d>>2]|0)+8>>2]&1023](d,e);d=c[e>>2]|0;if(!d){i=f;return}a=c[(c[d>>2]|0)+-12>>2]|0;e=d+a|0;a=d+(a+4)|0;b=(c[a>>2]|0)+-1|0;c[a>>2]=b;if((e|0)==0|(b|0)!=0){i=f;return}oc[c[(c[e>>2]|0)+4>>2]&2047](e);i=f;return}function os(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;f=i;i=i+16|0;e=f;d=o$(b,1488,5120,-1)|0;if(!d){FF(a,b);i=f;return}c[e>>2]=a;if((a|0)!=0?(a=a+((c[(c[a>>2]|0)+-12>>2]|0)+4)|0,b=(c[a>>2]|0)+1|0,c[a>>2]=b,(b|0)==0):0)Ha(79054,79014,48,79068);pc[c[(c[d>>2]|0)+12>>2]&1023](d,e);d=c[e>>2]|0;if(!d){i=f;return}a=c[(c[d>>2]|0)+-12>>2]|0;e=d+a|0;a=d+(a+4)|0;b=(c[a>>2]|0)+-1|0;c[a>>2]=b;if((e|0)==0|(b|0)!=0){i=f;return}oc[c[(c[e>>2]|0)+4>>2]&2047](e);i=f;return}function ps(a){a=a|0;a=a+-16|0;_d(a,24176);c[a+56>>2]=12804;if(!(c[a+60>>2]|0))return;else Ha(74472,79014,56,74486)}function qs(a){a=a|0;a=a+-16|0;_d(a,24176);c[a+56>>2]=12804;if(!(c[a+60>>2]|0)){P_(a);return}else Ha(74472,79014,56,74486)}function rs(a,b){a=a|0;b=b|0;ns(a+-16|0,b);return}function ss(a,b){a=a|0;b=b|0;os(a+-16|0,b);return}function ts(a){a=a|0;var b=0;b=c[(c[a>>2]|0)+-12>>2]|0;_d(a+b|0,24176);c[a+(b+56)>>2]=12804;if(!(c[a+(b+60)>>2]|0))return;else Ha(74472,79014,56,74486)}function us(a){a=a|0;var b=0,d=0;d=c[(c[a>>2]|0)+-12>>2]|0;b=a+d|0;_d(b,24176);c[a+(d+56)>>2]=12804;if(!(c[a+(d+60)>>2]|0)){P_(b);return}else Ha(74472,79014,56,74486)}function vs(a){a=a|0;P_(a);return}function ws(b,d){b=b|0;d=d|0;var e=0,f=0;e=O_(64)|0;c[e+4>>2]=0;c[e+8>>2]=0;c[e+12>>2]=0;f=e+20|0;c[f>>2]=0;c[f+4>>2]=0;c[f+8>>2]=0;c[f+12>>2]=0;c[f+16>>2]=0;c[f+20>>2]=0;a[f+24>>0]=0;c[e+48>>2]=d;c[e>>2]=24212;c[e+56>>2]=24308;c[e+16>>2]=24280;c[e+52>>2]=63;c[e+60>>2]=2;f=c[(c[e>>2]|0)+-12>>2]|0;b=e+f|0;f=e+(f+4)|0;d=(c[f>>2]|0)+-1|0;c[f>>2]=d;if((b|0)==0|(d|0)!=0)return e|0;oc[c[(c[b>>2]|0)+4>>2]&2047](b);return e|0}function xs(a){a=a|0;_d(a,24324);c[a+56>>2]=12804;if(!(c[a+60>>2]|0))return;else Ha(74472,79014,56,74486)}function ys(a){a=a|0;xs(a);P_(a);return}function zs(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;f=i;i=i+16|0;e=f;d=o$(b,1488,5176,-1)|0;if(!d){DF(a,b);i=f;return}c[e>>2]=a;if((a|0)!=0?(a=a+((c[(c[a>>2]|0)+-12>>2]|0)+4)|0,b=(c[a>>2]|0)+1|0,c[a>>2]=b,(b|0)==0):0)Ha(79054,79014,48,79068);pc[c[(c[d>>2]|0)+8>>2]&1023](d,e);d=c[e>>2]|0;if(!d){i=f;return}a=c[(c[d>>2]|0)+-12>>2]|0;e=d+a|0;a=d+(a+4)|0;b=(c[a>>2]|0)+-1|0;c[a>>2]=b;if((e|0)==0|(b|0)!=0){i=f;return}oc[c[(c[e>>2]|0)+4>>2]&2047](e);i=f;return}function As(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;f=i;i=i+16|0;e=f;d=o$(b,1488,5176,-1)|0;if(!d){FF(a,b);i=f;return}c[e>>2]=a;if((a|0)!=0?(a=a+((c[(c[a>>2]|0)+-12>>2]|0)+4)|0,b=(c[a>>2]|0)+1|0,c[a>>2]=b,(b|0)==0):0)Ha(79054,79014,48,79068);pc[c[(c[d>>2]|0)+12>>2]&1023](d,e);d=c[e>>2]|0;if(!d){i=f;return}a=c[(c[d>>2]|0)+-12>>2]|0;e=d+a|0;a=d+(a+4)|0;b=(c[a>>2]|0)+-1|0;c[a>>2]=b;if((e|0)==0|(b|0)!=0){i=f;return}oc[c[(c[e>>2]|0)+4>>2]&2047](e);i=f;return}function Bs(a){a=a|0;a=a+-16|0;_d(a,24324);c[a+56>>2]=12804;if(!(c[a+60>>2]|0))return;else Ha(74472,79014,56,74486)}function Cs(a){a=a|0;a=a+-16|0;_d(a,24324);c[a+56>>2]=12804;if(!(c[a+60>>2]|0)){P_(a);return}else Ha(74472,79014,56,74486)}function Ds(a,b){a=a|0;b=b|0;zs(a+-16|0,b);return}function Es(a,b){a=a|0;b=b|0;As(a+-16|0,b);return}function Fs(a){a=a|0;var b=0;b=c[(c[a>>2]|0)+-12>>2]|0;_d(a+b|0,24324);c[a+(b+56)>>2]=12804;if(!(c[a+(b+60)>>2]|0))return;else Ha(74472,79014,56,74486)}function Gs(a){a=a|0;var b=0,d=0;d=c[(c[a>>2]|0)+-12>>2]|0;b=a+d|0;_d(b,24324);c[a+(d+56)>>2]=12804;if(!(c[a+(d+60)>>2]|0)){P_(b);return}else Ha(74472,79014,56,74486)}function Hs(a){a=a|0;P_(a);return}function Is(b,d){b=b|0;d=d|0;var e=0,f=0;e=O_(64)|0;c[e+4>>2]=0;c[e+8>>2]=0;c[e+12>>2]=0;f=e+20|0;c[f>>2]=0;c[f+4>>2]=0;c[f+8>>2]=0;c[f+12>>2]=0;c[f+16>>2]=0;c[f+20>>2]=0;a[f+24>>0]=0;c[e+48>>2]=d;c[e>>2]=24360;c[e+56>>2]=24456;c[e+16>>2]=24428;c[e+52>>2]=62;c[e+60>>2]=2;f=c[(c[e>>2]|0)+-12>>2]|0;b=e+f|0;f=e+(f+4)|0;d=(c[f>>2]|0)+-1|0;c[f>>2]=d;if((b|0)==0|(d|0)!=0)return e|0;oc[c[(c[b>>2]|0)+4>>2]&2047](b);return e|0}function Js(a){a=a|0;_d(a,24472);c[a+56>>2]=12804;if(!(c[a+60>>2]|0))return;else Ha(74472,79014,56,74486)}function Ks(a){a=a|0;Js(a);P_(a);return}function Ls(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;f=i;i=i+16|0;e=f;d=o$(b,1488,5232,-1)|0;if(!d){DF(a,b);i=f;return}c[e>>2]=a;if((a|0)!=0?(a=a+((c[(c[a>>2]|0)+-12>>2]|0)+4)|0,b=(c[a>>2]|0)+1|0,c[a>>2]=b,(b|0)==0):0)Ha(79054,79014,48,79068);pc[c[(c[d>>2]|0)+8>>2]&1023](d,e);d=c[e>>2]|0;if(!d){i=f;return}a=c[(c[d>>2]|0)+-12>>2]|0;e=d+a|0;a=d+(a+4)|0;b=(c[a>>2]|0)+-1|0;c[a>>2]=b;if((e|0)==0|(b|0)!=0){i=f;return}oc[c[(c[e>>2]|0)+4>>2]&2047](e);i=f;return}function Ms(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;f=i;i=i+16|0;e=f;d=o$(b,1488,5232,-1)|0;if(!d){FF(a,b);i=f;return}c[e>>2]=a;if((a|0)!=0?(a=a+((c[(c[a>>2]|0)+-12>>2]|0)+4)|0,b=(c[a>>2]|0)+1|0,c[a>>2]=b,(b|0)==0):0)Ha(79054,79014,48,79068);pc[c[(c[d>>2]|0)+12>>2]&1023](d,e);d=c[e>>2]|0;if(!d){i=f;return}a=c[(c[d>>2]|0)+-12>>2]|0;e=d+a|0;a=d+(a+4)|0;b=(c[a>>2]|0)+-1|0;c[a>>2]=b;if((e|0)==0|(b|0)!=0){i=f;return}oc[c[(c[e>>2]|0)+4>>2]&2047](e);i=f;return}function Ns(a){a=a|0;a=a+-16|0;_d(a,24472);c[a+56>>2]=12804;if(!(c[a+60>>2]|0))return;else Ha(74472,79014,56,74486)}function Os(a){a=a|0;a=a+-16|0;_d(a,24472);c[a+56>>2]=12804;if(!(c[a+60>>2]|0)){P_(a);return}else Ha(74472,79014,56,74486)}function Ps(a,b){a=a|0;b=b|0;Ls(a+-16|0,b);return}function Qs(a,b){a=a|0;b=b|0;Ms(a+-16|0,b);return}function Rs(a){a=a|0;var b=0;b=c[(c[a>>2]|0)+-12>>2]|0;_d(a+b|0,24472);c[a+(b+56)>>2]=12804;if(!(c[a+(b+60)>>2]|0))return;else Ha(74472,79014,56,74486)}function Ss(a){a=a|0;var b=0,d=0;d=c[(c[a>>2]|0)+-12>>2]|0;b=a+d|0;_d(b,24472);c[a+(d+56)>>2]=12804;if(!(c[a+(d+60)>>2]|0)){P_(b);return}else Ha(74472,79014,56,74486)}function Ts(a){a=a|0;P_(a);return}function Us(b,d){b=b|0;d=d|0;var e=0,f=0;e=O_(64)|0;c[e+4>>2]=0;c[e+8>>2]=0;c[e+12>>2]=0;f=e+20|0;c[f>>2]=0;c[f+4>>2]=0;c[f+8>>2]=0;c[f+12>>2]=0;c[f+16>>2]=0;c[f+20>>2]=0;a[f+24>>0]=0;c[e+48>>2]=d;c[e>>2]=24508;c[e+56>>2]=24604;c[e+16>>2]=24576;c[e+52>>2]=61;c[e+60>>2]=2;f=c[(c[e>>2]|0)+-12>>2]|0;b=e+f|0;f=e+(f+4)|0;d=(c[f>>2]|0)+-1|0;c[f>>2]=d;if((b|0)==0|(d|0)!=0)return e|0;oc[c[(c[b>>2]|0)+4>>2]&2047](b);return e|0}function Vs(a){a=a|0;_d(a,24620);c[a+56>>2]=12804;if(!(c[a+60>>2]|0))return;else Ha(74472,79014,56,74486)}function Ws(a){a=a|0;Vs(a);P_(a);return}function Xs(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;f=i;i=i+16|0;e=f;d=o$(b,1488,5288,-1)|0;if(!d){DF(a,b);i=f;return}c[e>>2]=a;if((a|0)!=0?(a=a+((c[(c[a>>2]|0)+-12>>2]|0)+4)|0,b=(c[a>>2]|0)+1|0,c[a>>2]=b,(b|0)==0):0)Ha(79054,79014,48,79068);pc[c[(c[d>>2]|0)+8>>2]&1023](d,e);d=c[e>>2]|0;if(!d){i=f;return}a=c[(c[d>>2]|0)+-12>>2]|0;e=d+a|0;a=d+(a+4)|0;b=(c[a>>2]|0)+-1|0;c[a>>2]=b;if((e|0)==0|(b|0)!=0){i=f;return}oc[c[(c[e>>2]|0)+4>>2]&2047](e);i=f;return}function Ys(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;f=i;i=i+16|0;e=f;d=o$(b,1488,5288,-1)|0;if(!d){FF(a,b);i=f;return}c[e>>2]=a;if((a|0)!=0?(a=a+((c[(c[a>>2]|0)+-12>>2]|0)+4)|0,b=(c[a>>2]|0)+1|0,c[a>>2]=b,(b|0)==0):0)Ha(79054,79014,48,79068);pc[c[(c[d>>2]|0)+12>>2]&1023](d,e);d=c[e>>2]|0;if(!d){i=f;return}a=c[(c[d>>2]|0)+-12>>2]|0;e=d+a|0;a=d+(a+4)|0;b=(c[a>>2]|0)+-1|0;c[a>>2]=b;if((e|0)==0|(b|0)!=0){i=f;return}oc[c[(c[e>>2]|0)+4>>2]&2047](e);i=f;return}function Zs(a){a=a|0;a=a+-16|0;_d(a,24620);c[a+56>>2]=12804;if(!(c[a+60>>2]|0))return;else Ha(74472,79014,56,74486)}function _s(a){a=a|0;a=a+-16|0;_d(a,24620);c[a+56>>2]=12804;if(!(c[a+60>>2]|0)){P_(a);return}else Ha(74472,79014,56,74486)}function $s(a,b){a=a|0;b=b|0;Xs(a+-16|0,b);return}function at(a,b){a=a|0;b=b|0;Ys(a+-16|0,b);return}function bt(a){a=a|0;var b=0;b=c[(c[a>>2]|0)+-12>>2]|0;_d(a+b|0,24620);c[a+(b+56)>>2]=12804;if(!(c[a+(b+60)>>2]|0))return;else Ha(74472,79014,56,74486)}function ct(a){a=a|0;var b=0,d=0;d=c[(c[a>>2]|0)+-12>>2]|0;b=a+d|0;_d(b,24620);c[a+(d+56)>>2]=12804;if(!(c[a+(d+60)>>2]|0)){P_(b);return}else Ha(74472,79014,56,74486)}function dt(a){a=a|0;P_(a);return}function et(b,d){b=b|0;d=d|0;var e=0,f=0;e=O_(64)|0;c[e+4>>2]=0;c[e+8>>2]=0;c[e+12>>2]=0;f=e+20|0;c[f>>2]=0;c[f+4>>2]=0;c[f+8>>2]=0;c[f+12>>2]=0;c[f+16>>2]=0;c[f+20>>2]=0;a[f+24>>0]=0;c[e+48>>2]=d;c[e>>2]=24656;c[e+56>>2]=24752;c[e+16>>2]=24724;c[e+52>>2]=60;c[e+60>>2]=2;f=c[(c[e>>2]|0)+-12>>2]|0;b=e+f|0;f=e+(f+4)|0;d=(c[f>>2]|0)+-1|0;c[f>>2]=d;if((b|0)==0|(d|0)!=0)return e|0;oc[c[(c[b>>2]|0)+4>>2]&2047](b);return e|0}function ft(a){a=a|0;_d(a,24768);c[a+56>>2]=12804;if(!(c[a+60>>2]|0))return;else Ha(74472,79014,56,74486)}function gt(a){a=a|0;ft(a);P_(a);return}function ht(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;f=i;i=i+16|0;e=f;d=o$(b,1488,5344,-1)|0;if(!d){DF(a,b);i=f;return}c[e>>2]=a;if((a|0)!=0?(a=a+((c[(c[a>>2]|0)+-12>>2]|0)+4)|0,b=(c[a>>2]|0)+1|0,c[a>>2]=b,(b|0)==0):0)Ha(79054,79014,48,79068);pc[c[(c[d>>2]|0)+8>>2]&1023](d,e);d=c[e>>2]|0;if(!d){i=f;return}a=c[(c[d>>2]|0)+-12>>2]|0;e=d+a|0;a=d+(a+4)|0;b=(c[a>>2]|0)+-1|0;c[a>>2]=b;if((e|0)==0|(b|0)!=0){i=f;return}oc[c[(c[e>>2]|0)+4>>2]&2047](e);i=f;return}function it(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;f=i;i=i+16|0;e=f;d=o$(b,1488,5344,-1)|0;if(!d){FF(a,b);i=f;return}c[e>>2]=a;if((a|0)!=0?(a=a+((c[(c[a>>2]|0)+-12>>2]|0)+4)|0,b=(c[a>>2]|0)+1|0,c[a>>2]=b,(b|0)==0):0)Ha(79054,79014,48,79068);pc[c[(c[d>>2]|0)+12>>2]&1023](d,e);d=c[e>>2]|0;if(!d){i=f;return}a=c[(c[d>>2]|0)+-12>>2]|0;e=d+a|0;a=d+(a+4)|0;b=(c[a>>2]|0)+-1|0;c[a>>2]=b;if((e|0)==0|(b|0)!=0){i=f;return}oc[c[(c[e>>2]|0)+4>>2]&2047](e);i=f;return}function jt(a){a=a|0;a=a+-16|0;_d(a,24768);c[a+56>>2]=12804;if(!(c[a+60>>2]|0))return;else Ha(74472,79014,56,74486)}function kt(a){a=a|0;a=a+-16|0;_d(a,24768);c[a+56>>2]=12804;if(!(c[a+60>>2]|0)){P_(a);return}else Ha(74472,79014,56,74486)}function lt(a,b){a=a|0;b=b|0;ht(a+-16|0,b);return}function mt(a,b){a=a|0;b=b|0;it(a+-16|0,b);return}function nt(a){a=a|0;var b=0;b=c[(c[a>>2]|0)+-12>>2]|0;_d(a+b|0,24768);c[a+(b+56)>>2]=12804;if(!(c[a+(b+60)>>2]|0))return;else Ha(74472,79014,56,74486)}function ot(a){a=a|0;var b=0,d=0;d=c[(c[a>>2]|0)+-12>>2]|0;b=a+d|0;_d(b,24768);c[a+(d+56)>>2]=12804;if(!(c[a+(d+60)>>2]|0)){P_(b);return}else Ha(74472,79014,56,74486)}function pt(a){a=a|0;P_(a);return}function qt(b,d){b=b|0;d=d|0;var e=0,f=0;e=O_(64)|0;c[e+4>>2]=0;c[e+8>>2]=0;c[e+12>>2]=0;f=e+20|0;c[f>>2]=0;c[f+4>>2]=0;c[f+8>>2]=0;c[f+12>>2]=0;c[f+16>>2]=0;c[f+20>>2]=0;a[f+24>>0]=0;c[e+48>>2]=d;c[e>>2]=24804;c[e+56>>2]=24900;c[e+16>>2]=24872;c[e+52>>2]=59;c[e+60>>2]=2;f=c[(c[e>>2]|0)+-12>>2]|0;b=e+f|0;f=e+(f+4)|0;d=(c[f>>2]|0)+-1|0;c[f>>2]=d;if((b|0)==0|(d|0)!=0)return e|0;oc[c[(c[b>>2]|0)+4>>2]&2047](b);return e|0}function rt(a){a=a|0;_d(a,24916);c[a+56>>2]=12804;if(!(c[a+60>>2]|0))return;else Ha(74472,79014,56,74486)}function st(a){a=a|0;rt(a);P_(a);return}function tt(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;f=i;i=i+16|0;e=f;d=o$(b,1488,5400,-1)|0;if(!d){DF(a,b);i=f;return}c[e>>2]=a;if((a|0)!=0?(a=a+((c[(c[a>>2]|0)+-12>>2]|0)+4)|0,b=(c[a>>2]|0)+1|0,c[a>>2]=b,(b|0)==0):0)Ha(79054,79014,48,79068);pc[c[(c[d>>2]|0)+8>>2]&1023](d,e);d=c[e>>2]|0;if(!d){i=f;return}a=c[(c[d>>2]|0)+-12>>2]|0;e=d+a|0;a=d+(a+4)|0;b=(c[a>>2]|0)+-1|0;c[a>>2]=b;if((e|0)==0|(b|0)!=0){i=f;return}oc[c[(c[e>>2]|0)+4>>2]&2047](e);i=f;return}function ut(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;f=i;i=i+16|0;e=f;d=o$(b,1488,5400,-1)|0;if(!d){FF(a,b);i=f;return}c[e>>2]=a;if((a|0)!=0?(a=a+((c[(c[a>>2]|0)+-12>>2]|0)+4)|0,b=(c[a>>2]|0)+1|0,c[a>>2]=b,(b|0)==0):0)Ha(79054,79014,48,79068);pc[c[(c[d>>2]|0)+12>>2]&1023](d,e);d=c[e>>2]|0;if(!d){i=f;return}a=c[(c[d>>2]|0)+-12>>2]|0;e=d+a|0;a=d+(a+4)|0;b=(c[a>>2]|0)+-1|0;c[a>>2]=b;if((e|0)==0|(b|0)!=0){i=f;return}oc[c[(c[e>>2]|0)+4>>2]&2047](e);i=f;return}function vt(a){a=a|0;a=a+-16|0;_d(a,24916);c[a+56>>2]=12804;if(!(c[a+60>>2]|0))return;else Ha(74472,79014,56,74486)}function wt(a){a=a|0;a=a+-16|0;_d(a,24916);c[a+56>>2]=12804;if(!(c[a+60>>2]|0)){P_(a);return}else Ha(74472,79014,56,74486)}function xt(a,b){a=a|0;b=b|0;tt(a+-16|0,b);return}function yt(a,b){a=a|0;b=b|0;ut(a+-16|0,b);return}function zt(a){a=a|0;var b=0;b=c[(c[a>>2]|0)+-12>>2]|0;_d(a+b|0,24916);c[a+(b+56)>>2]=12804;if(!(c[a+(b+60)>>2]|0))return;else Ha(74472,79014,56,74486)}function At(a){a=a|0;var b=0,d=0;d=c[(c[a>>2]|0)+-12>>2]|0;b=a+d|0;_d(b,24916);c[a+(d+56)>>2]=12804;if(!(c[a+(d+60)>>2]|0)){P_(b);return}else Ha(74472,79014,56,74486)}function Bt(a){a=a|0;P_(a);return}function Ct(b,d){b=b|0;d=d|0;var e=0,f=0;e=O_(64)|0;c[e+4>>2]=0;c[e+8>>2]=0;c[e+12>>2]=0;f=e+20|0;c[f>>2]=0;c[f+4>>2]=0;c[f+8>>2]=0;c[f+12>>2]=0;c[f+16>>2]=0;c[f+20>>2]=0;a[f+24>>0]=0;c[e+48>>2]=d;c[e>>2]=24952;c[e+56>>2]=25048;c[e+16>>2]=25020;c[e+52>>2]=58;c[e+60>>2]=2;f=c[(c[e>>2]|0)+-12>>2]|0;b=e+f|0;f=e+(f+4)|0;d=(c[f>>2]|0)+-1|0;c[f>>2]=d;if((b|0)==0|(d|0)!=0)return e|0;oc[c[(c[b>>2]|0)+4>>2]&2047](b);return e|0}function Dt(a){a=a|0;_d(a,25064);c[a+56>>2]=12804;if(!(c[a+60>>2]|0))return;else Ha(74472,79014,56,74486)}function Et(a){a=a|0;Dt(a);P_(a);return}function Ft(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;f=i;i=i+16|0;e=f;d=o$(b,1488,5456,-1)|0;if(!d){DF(a,b);i=f;return}c[e>>2]=a;if((a|0)!=0?(a=a+((c[(c[a>>2]|0)+-12>>2]|0)+4)|0,b=(c[a>>2]|0)+1|0,c[a>>2]=b,(b|0)==0):0)Ha(79054,79014,48,79068);pc[c[(c[d>>2]|0)+8>>2]&1023](d,e);d=c[e>>2]|0;if(!d){i=f;return}a=c[(c[d>>2]|0)+-12>>2]|0;e=d+a|0;a=d+(a+4)|0;b=(c[a>>2]|0)+-1|0;c[a>>2]=b;if((e|0)==0|(b|0)!=0){i=f;return}oc[c[(c[e>>2]|0)+4>>2]&2047](e);i=f;return}function Gt(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;f=i;i=i+16|0;e=f;d=o$(b,1488,5456,-1)|0;if(!d){FF(a,b);i=f;return}c[e>>2]=a;if((a|0)!=0?(a=a+((c[(c[a>>2]|0)+-12>>2]|0)+4)|0,b=(c[a>>2]|0)+1|0,c[a>>2]=b,(b|0)==0):0)Ha(79054,79014,48,79068);pc[c[(c[d>>2]|0)+12>>2]&1023](d,e);d=c[e>>2]|0;if(!d){i=f;return}a=c[(c[d>>2]|0)+-12>>2]|0;e=d+a|0;a=d+(a+4)|0;b=(c[a>>2]|0)+-1|0;c[a>>2]=b;if((e|0)==0|(b|0)!=0){i=f;return}oc[c[(c[e>>2]|0)+4>>2]&2047](e);i=f;return}function Ht(a){a=a|0;a=a+-16|0;_d(a,25064);c[a+56>>2]=12804;if(!(c[a+60>>2]|0))return;else Ha(74472,79014,56,74486)}function It(a){a=a|0;a=a+-16|0;_d(a,25064);c[a+56>>2]=12804;if(!(c[a+60>>2]|0)){P_(a);return}else Ha(74472,79014,56,74486)}function Jt(a,b){a=a|0;b=b|0;Ft(a+-16|0,b);return}function Kt(a,b){a=a|0;b=b|0;Gt(a+-16|0,b);return}function Lt(a){a=a|0;var b=0;b=c[(c[a>>2]|0)+-12>>2]|0;_d(a+b|0,25064);c[a+(b+56)>>2]=12804;if(!(c[a+(b+60)>>2]|0))return;else Ha(74472,79014,56,74486)}function Mt(a){a=a|0;var b=0,d=0;d=c[(c[a>>2]|0)+-12>>2]|0;b=a+d|0;_d(b,25064);c[a+(d+56)>>2]=12804;if(!(c[a+(d+60)>>2]|0)){P_(b);return}else Ha(74472,79014,56,74486)}function Nt(a){a=a|0;P_(a);return}function Ot(b,d){b=b|0;d=d|0;var e=0,f=0;e=O_(64)|0;c[e+4>>2]=0;c[e+8>>2]=0;c[e+12>>2]=0;f=e+20|0;c[f>>2]=0;c[f+4>>2]=0;c[f+8>>2]=0;c[f+12>>2]=0;c[f+16>>2]=0;c[f+20>>2]=0;a[f+24>>0]=0;c[e+48>>2]=d;c[e>>2]=25100;c[e+56>>2]=25196;c[e+16>>2]=25168;c[e+52>>2]=57;c[e+60>>2]=2;f=c[(c[e>>2]|0)+-12>>2]|0;b=e+f|0;f=e+(f+4)|0;d=(c[f>>2]|0)+-1|0;c[f>>2]=d;if((b|0)==0|(d|0)!=0)return e|0;oc[c[(c[b>>2]|0)+4>>2]&2047](b);return e|0}function Pt(a){a=a|0;_d(a,25212);c[a+56>>2]=12804;if(!(c[a+60>>2]|0))return;else Ha(74472,79014,56,74486)}function Qt(a){a=a|0;Pt(a);P_(a);return}function Rt(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;f=i;i=i+16|0;e=f;d=o$(b,1488,5512,-1)|0;if(!d){DF(a,b);i=f;return}c[e>>2]=a;if((a|0)!=0?(a=a+((c[(c[a>>2]|0)+-12>>2]|0)+4)|0,b=(c[a>>2]|0)+1|0,c[a>>2]=b,(b|0)==0):0)Ha(79054,79014,48,79068);pc[c[(c[d>>2]|0)+8>>2]&1023](d,e);d=c[e>>2]|0;if(!d){i=f;return}a=c[(c[d>>2]|0)+-12>>2]|0;e=d+a|0;a=d+(a+4)|0;b=(c[a>>2]|0)+-1|0;c[a>>2]=b;if((e|0)==0|(b|0)!=0){i=f;return}oc[c[(c[e>>2]|0)+4>>2]&2047](e);i=f;return}function St(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;f=i;i=i+16|0;e=f;d=o$(b,1488,5512,-1)|0;if(!d){FF(a,b);i=f;return}c[e>>2]=a;if((a|0)!=0?(a=a+((c[(c[a>>2]|0)+-12>>2]|0)+4)|0,b=(c[a>>2]|0)+1|0,c[a>>2]=b,(b|0)==0):0)Ha(79054,79014,48,79068);pc[c[(c[d>>2]|0)+12>>2]&1023](d,e);d=c[e>>2]|0;if(!d){i=f;return}a=c[(c[d>>2]|0)+-12>>2]|0;e=d+a|0;a=d+(a+4)|0;b=(c[a>>2]|0)+-1|0;c[a>>2]=b;if((e|0)==0|(b|0)!=0){i=f;return}oc[c[(c[e>>2]|0)+4>>2]&2047](e);i=f;return}function Tt(a){a=a|0;a=a+-16|0;_d(a,25212);c[a+56>>2]=12804;if(!(c[a+60>>2]|0))return;else Ha(74472,79014,56,74486)}function Ut(a){a=a|0;a=a+-16|0;_d(a,25212);c[a+56>>2]=12804;if(!(c[a+60>>2]|0)){P_(a);return}else Ha(74472,79014,56,74486)}function Vt(a,b){a=a|0;b=b|0;Rt(a+-16|0,b);return}function Wt(a,b){a=a|0;b=b|0;St(a+-16|0,b);return}function Xt(a){a=a|0;var b=0;b=c[(c[a>>2]|0)+-12>>2]|0;_d(a+b|0,25212);c[a+(b+56)>>2]=12804;if(!(c[a+(b+60)>>2]|0))return;else Ha(74472,79014,56,74486)}function Yt(a){a=a|0;var b=0,d=0;d=c[(c[a>>2]|0)+-12>>2]|0;b=a+d|0;_d(b,25212);c[a+(d+56)>>2]=12804;if(!(c[a+(d+60)>>2]|0)){P_(b);return}else Ha(74472,79014,56,74486)}function Zt(a){a=a|0;P_(a);return}function _t(b,d){b=b|0;d=d|0;var e=0,f=0;e=O_(64)|0;c[e+4>>2]=0;c[e+8>>2]=0;c[e+12>>2]=0;f=e+20|0;c[f>>2]=0;c[f+4>>2]=0;c[f+8>>2]=0;c[f+12>>2]=0;c[f+16>>2]=0;c[f+20>>2]=0;a[f+24>>0]=0;c[e+48>>2]=d;c[e>>2]=25248;c[e+56>>2]=25344;c[e+16>>2]=25316;c[e+52>>2]=56;c[e+60>>2]=2;f=c[(c[e>>2]|0)+-12>>2]|0;b=e+f|0;f=e+(f+4)|0;d=(c[f>>2]|0)+-1|0;c[f>>2]=d;if((b|0)==0|(d|0)!=0)return e|0;oc[c[(c[b>>2]|0)+4>>2]&2047](b);return e|0}function $t(a){a=a|0;_d(a,25360);c[a+56>>2]=12804;if(!(c[a+60>>2]|0))return;else Ha(74472,79014,56,74486)}function au(a){a=a|0;$t(a);P_(a);return}function bu(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;f=i;i=i+16|0;e=f;d=o$(b,1488,5568,-1)|0;if(!d){DF(a,b);i=f;return}c[e>>2]=a;if((a|0)!=0?(a=a+((c[(c[a>>2]|0)+-12>>2]|0)+4)|0,b=(c[a>>2]|0)+1|0,c[a>>2]=b,(b|0)==0):0)Ha(79054,79014,48,79068);pc[c[(c[d>>2]|0)+8>>2]&1023](d,e);d=c[e>>2]|0;if(!d){i=f;return}a=c[(c[d>>2]|0)+-12>>2]|0;e=d+a|0;a=d+(a+4)|0;b=(c[a>>2]|0)+-1|0;c[a>>2]=b;if((e|0)==0|(b|0)!=0){i=f;return}oc[c[(c[e>>2]|0)+4>>2]&2047](e);i=f;return}function cu(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;f=i;i=i+16|0;e=f;d=o$(b,1488,5568,-1)|0;if(!d){FF(a,b);i=f;return}c[e>>2]=a;if((a|0)!=0?(a=a+((c[(c[a>>2]|0)+-12>>2]|0)+4)|0,b=(c[a>>2]|0)+1|0,c[a>>2]=b,(b|0)==0):0)Ha(79054,79014,48,79068);pc[c[(c[d>>2]|0)+12>>2]&1023](d,e);d=c[e>>2]|0;if(!d){i=f;return}a=c[(c[d>>2]|0)+-12>>2]|0;e=d+a|0;a=d+(a+4)|0;b=(c[a>>2]|0)+-1|0;c[a>>2]=b;if((e|0)==0|(b|0)!=0){i=f;return}oc[c[(c[e>>2]|0)+4>>2]&2047](e);i=f;return}function du(a){a=a|0;a=a+-16|0;_d(a,25360);c[a+56>>2]=12804;if(!(c[a+60>>2]|0))return;else Ha(74472,79014,56,74486)}function eu(a){a=a|0;a=a+-16|0;_d(a,25360);c[a+56>>2]=12804;if(!(c[a+60>>2]|0)){P_(a);return}else Ha(74472,79014,56,74486)}function fu(a,b){a=a|0;b=b|0;bu(a+-16|0,b);return}function gu(a,b){a=a|0;b=b|0;cu(a+-16|0,b);return}function hu(a){a=a|0;var b=0;b=c[(c[a>>2]|0)+-12>>2]|0;_d(a+b|0,25360);c[a+(b+56)>>2]=12804;if(!(c[a+(b+60)>>2]|0))return;else Ha(74472,79014,56,74486)}function iu(a){a=a|0;var b=0,d=0;d=c[(c[a>>2]|0)+-12>>2]|0;b=a+d|0;_d(b,25360);c[a+(d+56)>>2]=12804;if(!(c[a+(d+60)>>2]|0)){P_(b);return}else Ha(74472,79014,56,74486)}function ju(a){a=a|0;P_(a);return}function ku(b,d){b=b|0;d=d|0;var e=0,f=0;e=O_(64)|0;c[e+4>>2]=0;c[e+8>>2]=0;c[e+12>>2]=0;f=e+20|0;c[f>>2]=0;c[f+4>>2]=0;c[f+8>>2]=0;c[f+12>>2]=0;c[f+16>>2]=0;c[f+20>>2]=0;a[f+24>>0]=0;c[e+48>>2]=d;c[e>>2]=25396;c[e+56>>2]=25492;c[e+16>>2]=25464;c[e+52>>2]=55;c[e+60>>2]=2;f=c[(c[e>>2]|0)+-12>>2]|0;b=e+f|0;f=e+(f+4)|0;d=(c[f>>2]|0)+-1|0;c[f>>2]=d;if((b|0)==0|(d|0)!=0)return e|0;oc[c[(c[b>>2]|0)+4>>2]&2047](b);return e|0}function lu(a){a=a|0;_d(a,25508);c[a+56>>2]=12804;if(!(c[a+60>>2]|0))return;else Ha(74472,79014,56,74486)}function mu(a){a=a|0;lu(a);P_(a);return}function nu(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;f=i;i=i+16|0;e=f;d=o$(b,1488,5624,-1)|0;if(!d){DF(a,b);i=f;return}c[e>>2]=a;if((a|0)!=0?(a=a+((c[(c[a>>2]|0)+-12>>2]|0)+4)|0,b=(c[a>>2]|0)+1|0,c[a>>2]=b,(b|0)==0):0)Ha(79054,79014,48,79068);pc[c[(c[d>>2]|0)+8>>2]&1023](d,e);d=c[e>>2]|0;if(!d){i=f;return}a=c[(c[d>>2]|0)+-12>>2]|0;e=d+a|0;a=d+(a+4)|0;b=(c[a>>2]|0)+-1|0;c[a>>2]=b;if((e|0)==0|(b|0)!=0){i=f;return}oc[c[(c[e>>2]|0)+4>>2]&2047](e);i=f;return}function ou(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;f=i;i=i+16|0;e=f;d=o$(b,1488,5624,-1)|0;if(!d){FF(a,b);i=f;return}c[e>>2]=a;if((a|0)!=0?(a=a+((c[(c[a>>2]|0)+-12>>2]|0)+4)|0,b=(c[a>>2]|0)+1|0,c[a>>2]=b,(b|0)==0):0)Ha(79054,79014,48,79068);pc[c[(c[d>>2]|0)+12>>2]&1023](d,e);d=c[e>>2]|0;if(!d){i=f;return}a=c[(c[d>>2]|0)+-12>>2]|0;e=d+a|0;a=d+(a+4)|0;b=(c[a>>2]|0)+-1|0;c[a>>2]=b;if((e|0)==0|(b|0)!=0){i=f;return}oc[c[(c[e>>2]|0)+4>>2]&2047](e);i=f;return}function pu(a){a=a|0;a=a+-16|0;_d(a,25508);c[a+56>>2]=12804;if(!(c[a+60>>2]|0))return;else Ha(74472,79014,56,74486)}function qu(a){a=a|0;a=a+-16|0;_d(a,25508);c[a+56>>2]=12804;if(!(c[a+60>>2]|0)){P_(a);return}else Ha(74472,79014,56,74486)}function ru(a,b){a=a|0;b=b|0;nu(a+-16|0,b);return}function su(a,b){a=a|0;b=b|0;ou(a+-16|0,b);return}function tu(a){a=a|0;var b=0;b=c[(c[a>>2]|0)+-12>>2]|0;_d(a+b|0,25508);c[a+(b+56)>>2]=12804;if(!(c[a+(b+60)>>2]|0))return;else Ha(74472,79014,56,74486)}function uu(a){a=a|0;var b=0,d=0;d=c[(c[a>>2]|0)+-12>>2]|0;b=a+d|0;_d(b,25508);c[a+(d+56)>>2]=12804;if(!(c[a+(d+60)>>2]|0)){P_(b);return}else Ha(74472,79014,56,74486)}function vu(a){a=a|0;P_(a);return}function wu(b,d){b=b|0;d=d|0;var e=0,f=0;e=O_(64)|0;c[e+4>>2]=0;c[e+8>>2]=0;c[e+12>>2]=0;f=e+20|0;c[f>>2]=0;c[f+4>>2]=0;c[f+8>>2]=0;c[f+12>>2]=0;c[f+16>>2]=0;c[f+20>>2]=0;a[f+24>>0]=0;c[e+48>>2]=d;c[e>>2]=25544;c[e+56>>2]=25640;c[e+16>>2]=25612;c[e+52>>2]=54;c[e+60>>2]=2;f=c[(c[e>>2]|0)+-12>>2]|0;b=e+f|0;f=e+(f+4)|0;d=(c[f>>2]|0)+-1|0;c[f>>2]=d;if((b|0)==0|(d|0)!=0)return e|0;oc[c[(c[b>>2]|0)+4>>2]&2047](b);return e|0}function xu(a){a=a|0;_d(a,25656);c[a+56>>2]=12804;if(!(c[a+60>>2]|0))return;else Ha(74472,79014,56,74486)}function yu(a){a=a|0;xu(a);P_(a);return}function zu(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;f=i;i=i+16|0;e=f;d=o$(b,1488,5680,-1)|0;if(!d){DF(a,b);i=f;return}c[e>>2]=a;if((a|0)!=0?(a=a+((c[(c[a>>2]|0)+-12>>2]|0)+4)|0,b=(c[a>>2]|0)+1|0,c[a>>2]=b,(b|0)==0):0)Ha(79054,79014,48,79068);pc[c[(c[d>>2]|0)+8>>2]&1023](d,e);d=c[e>>2]|0;if(!d){i=f;return}a=c[(c[d>>2]|0)+-12>>2]|0;e=d+a|0;a=d+(a+4)|0;b=(c[a>>2]|0)+-1|0;c[a>>2]=b;if((e|0)==0|(b|0)!=0){i=f;return}oc[c[(c[e>>2]|0)+4>>2]&2047](e);i=f;return}function Au(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;f=i;i=i+16|0;e=f;d=o$(b,1488,5680,-1)|0;if(!d){FF(a,b);i=f;return}c[e>>2]=a;if((a|0)!=0?(a=a+((c[(c[a>>2]|0)+-12>>2]|0)+4)|0,b=(c[a>>2]|0)+1|0,c[a>>2]=b,(b|0)==0):0)Ha(79054,79014,48,79068);pc[c[(c[d>>2]|0)+12>>2]&1023](d,e);d=c[e>>2]|0;if(!d){i=f;return}a=c[(c[d>>2]|0)+-12>>2]|0;e=d+a|0;a=d+(a+4)|0;b=(c[a>>2]|0)+-1|0;c[a>>2]=b;if((e|0)==0|(b|0)!=0){i=f;return}oc[c[(c[e>>2]|0)+4>>2]&2047](e);i=f;return}function Bu(a){a=a|0;a=a+-16|0;_d(a,25656);c[a+56>>2]=12804;if(!(c[a+60>>2]|0))return;else Ha(74472,79014,56,74486)}function Cu(a){a=a|0;a=a+-16|0;_d(a,25656);c[a+56>>2]=12804;if(!(c[a+60>>2]|0)){P_(a);return}else Ha(74472,79014,56,74486)}function Du(a,b){a=a|0;b=b|0;zu(a+-16|0,b);return}function Eu(a,b){a=a|0;b=b|0;Au(a+-16|0,b);return}function Fu(a){a=a|0;var b=0;b=c[(c[a>>2]|0)+-12>>2]|0;_d(a+b|0,25656);c[a+(b+56)>>2]=12804;if(!(c[a+(b+60)>>2]|0))return;else Ha(74472,79014,56,74486)}function Gu(a){a=a|0;var b=0,d=0;d=c[(c[a>>2]|0)+-12>>2]|0;b=a+d|0;_d(b,25656);c[a+(d+56)>>2]=12804;if(!(c[a+(d+60)>>2]|0)){P_(b);return}else Ha(74472,79014,56,74486)}function Hu(a){a=a|0;P_(a);return}function Iu(b,d){b=b|0;d=d|0;var e=0,f=0;e=O_(64)|0;c[e+4>>2]=0;c[e+8>>2]=0;c[e+12>>2]=0;f=e+20|0;c[f>>2]=0;c[f+4>>2]=0;c[f+8>>2]=0;c[f+12>>2]=0;c[f+16>>2]=0;c[f+20>>2]=0;a[f+24>>0]=0;c[e+48>>2]=d;c[e>>2]=25692;c[e+56>>2]=25788;c[e+16>>2]=25760;c[e+52>>2]=53;c[e+60>>2]=2;f=c[(c[e>>2]|0)+-12>>2]|0;b=e+f|0;f=e+(f+4)|0;d=(c[f>>2]|0)+-1|0;c[f>>2]=d;if((b|0)==0|(d|0)!=0)return e|0;oc[c[(c[b>>2]|0)+4>>2]&2047](b);return e|0}function Ju(a){a=a|0;_d(a,25804);c[a+56>>2]=12804;if(!(c[a+60>>2]|0))return;else Ha(74472,79014,56,74486)}function Ku(a){a=a|0;Ju(a);P_(a);return}function Lu(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;f=i;i=i+16|0;e=f;d=o$(b,1488,5736,-1)|0;if(!d){DF(a,b);i=f;return}c[e>>2]=a;if((a|0)!=0?(a=a+((c[(c[a>>2]|0)+-12>>2]|0)+4)|0,b=(c[a>>2]|0)+1|0,c[a>>2]=b,(b|0)==0):0)Ha(79054,79014,48,79068);pc[c[(c[d>>2]|0)+8>>2]&1023](d,e);d=c[e>>2]|0;if(!d){i=f;return}a=c[(c[d>>2]|0)+-12>>2]|0;e=d+a|0;a=d+(a+4)|0;b=(c[a>>2]|0)+-1|0;c[a>>2]=b;if((e|0)==0|(b|0)!=0){i=f;return}oc[c[(c[e>>2]|0)+4>>2]&2047](e);i=f;return}function Mu(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;f=i;i=i+16|0;e=f;d=o$(b,1488,5736,-1)|0;if(!d){FF(a,b);i=f;return}c[e>>2]=a;if((a|0)!=0?(a=a+((c[(c[a>>2]|0)+-12>>2]|0)+4)|0,b=(c[a>>2]|0)+1|0,c[a>>2]=b,(b|0)==0):0)Ha(79054,79014,48,79068);pc[c[(c[d>>2]|0)+12>>2]&1023](d,e);d=c[e>>2]|0;if(!d){i=f;return}a=c[(c[d>>2]|0)+-12>>2]|0;e=d+a|0;a=d+(a+4)|0;b=(c[a>>2]|0)+-1|0;c[a>>2]=b;if((e|0)==0|(b|0)!=0){i=f;return}oc[c[(c[e>>2]|0)+4>>2]&2047](e);i=f;return}function Nu(a){a=a|0;a=a+-16|0;_d(a,25804);c[a+56>>2]=12804;if(!(c[a+60>>2]|0))return;else Ha(74472,79014,56,74486)}function Ou(a){a=a|0;a=a+-16|0;_d(a,25804);c[a+56>>2]=12804;if(!(c[a+60>>2]|0)){P_(a);return}else Ha(74472,79014,56,74486)}function Pu(a,b){a=a|0;b=b|0;Lu(a+-16|0,b);return}function Qu(a,b){a=a|0;b=b|0;Mu(a+-16|0,b);return}function Ru(a){a=a|0;var b=0;b=c[(c[a>>2]|0)+-12>>2]|0;_d(a+b|0,25804);c[a+(b+56)>>2]=12804;if(!(c[a+(b+60)>>2]|0))return;else Ha(74472,79014,56,74486)}function Su(a){a=a|0;var b=0,d=0;d=c[(c[a>>2]|0)+-12>>2]|0;b=a+d|0;_d(b,25804);c[a+(d+56)>>2]=12804;if(!(c[a+(d+60)>>2]|0)){P_(b);return}else Ha(74472,79014,56,74486)}function Tu(a){a=a|0;P_(a);return}function Uu(b,d){b=b|0;d=d|0;var e=0,f=0;e=O_(64)|0;c[e+4>>2]=0;c[e+8>>2]=0;c[e+12>>2]=0;f=e+20|0;c[f>>2]=0;c[f+4>>2]=0;c[f+8>>2]=0;c[f+12>>2]=0;c[f+16>>2]=0;c[f+20>>2]=0;a[f+24>>0]=0;c[e+48>>2]=d;c[e>>2]=25840;c[e+56>>2]=25936;c[e+16>>2]=25908;c[e+52>>2]=52;c[e+60>>2]=2;f=c[(c[e>>2]|0)+-12>>2]|0;b=e+f|0;f=e+(f+4)|0;d=(c[f>>2]|0)+-1|0;c[f>>2]=d;if((b|0)==0|(d|0)!=0)return e|0;oc[c[(c[b>>2]|0)+4>>2]&2047](b);return e|0}function Vu(a){a=a|0;_d(a,25952);c[a+56>>2]=12804;if(!(c[a+60>>2]|0))return;else Ha(74472,79014,56,74486)}function Wu(a){a=a|0;Vu(a);P_(a);return}function Xu(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;f=i;i=i+16|0;e=f;d=o$(b,1488,5792,-1)|0;if(!d){DF(a,b);i=f;return}c[e>>2]=a;if((a|0)!=0?(a=a+((c[(c[a>>2]|0)+-12>>2]|0)+4)|0,b=(c[a>>2]|0)+1|0,c[a>>2]=b,(b|0)==0):0)Ha(79054,79014,48,79068);pc[c[(c[d>>2]|0)+8>>2]&1023](d,e);d=c[e>>2]|0;if(!d){i=f;return}a=c[(c[d>>2]|0)+-12>>2]|0;e=d+a|0;a=d+(a+4)|0;b=(c[a>>2]|0)+-1|0;c[a>>2]=b;if((e|0)==0|(b|0)!=0){i=f;return}oc[c[(c[e>>2]|0)+4>>2]&2047](e);i=f;return}function Yu(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;f=i;i=i+16|0;e=f;d=o$(b,1488,5792,-1)|0;if(!d){FF(a,b);i=f;return}c[e>>2]=a;if((a|0)!=0?(a=a+((c[(c[a>>2]|0)+-12>>2]|0)+4)|0,b=(c[a>>2]|0)+1|0,c[a>>2]=b,(b|0)==0):0)Ha(79054,79014,48,79068);pc[c[(c[d>>2]|0)+12>>2]&1023](d,e);d=c[e>>2]|0;if(!d){i=f;return}a=c[(c[d>>2]|0)+-12>>2]|0;e=d+a|0;a=d+(a+4)|0;b=(c[a>>2]|0)+-1|0;c[a>>2]=b;if((e|0)==0|(b|0)!=0){i=f;return}oc[c[(c[e>>2]|0)+4>>2]&2047](e);i=f;return}function Zu(a){a=a|0;a=a+-16|0;_d(a,25952);c[a+56>>2]=12804;if(!(c[a+60>>2]|0))return;else Ha(74472,79014,56,74486)}function _u(a){a=a|0;a=a+-16|0;_d(a,25952);c[a+56>>2]=12804;if(!(c[a+60>>2]|0)){P_(a);return}else Ha(74472,79014,56,74486)}function $u(a,b){a=a|0;b=b|0;Xu(a+-16|0,b);return}function av(a,b){a=a|0;b=b|0;Yu(a+-16|0,b);return}function bv(a){a=a|0;var b=0;b=c[(c[a>>2]|0)+-12>>2]|0;_d(a+b|0,25952);c[a+(b+56)>>2]=12804;if(!(c[a+(b+60)>>2]|0))return;else Ha(74472,79014,56,74486)}function cv(a){a=a|0;var b=0,d=0;d=c[(c[a>>2]|0)+-12>>2]|0;b=a+d|0;_d(b,25952);c[a+(d+56)>>2]=12804;if(!(c[a+(d+60)>>2]|0)){P_(b);return}else Ha(74472,79014,56,74486)}function dv(a){a=a|0;P_(a);return}function ev(b,d){b=b|0;d=d|0;var e=0,f=0;e=O_(64)|0;c[e+4>>2]=0;c[e+8>>2]=0;c[e+12>>2]=0;f=e+20|0;c[f>>2]=0;c[f+4>>2]=0;c[f+8>>2]=0;c[f+12>>2]=0;c[f+16>>2]=0;c[f+20>>2]=0;a[f+24>>0]=0;c[e+48>>2]=d;c[e>>2]=25988;c[e+56>>2]=26084;c[e+16>>2]=26056;c[e+52>>2]=51;c[e+60>>2]=2;f=c[(c[e>>2]|0)+-12>>2]|0;b=e+f|0;f=e+(f+4)|0;d=(c[f>>2]|0)+-1|0;c[f>>2]=d;if((b|0)==0|(d|0)!=0)return e|0;oc[c[(c[b>>2]|0)+4>>2]&2047](b);return e|0}function fv(a){a=a|0;_d(a,26100);c[a+56>>2]=12804;if(!(c[a+60>>2]|0))return;else Ha(74472,79014,56,74486)}function gv(a){a=a|0;fv(a);P_(a);return}function hv(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;f=i;i=i+16|0;e=f;d=o$(b,1488,5848,-1)|0;if(!d){DF(a,b);i=f;return}c[e>>2]=a;if((a|0)!=0?(a=a+((c[(c[a>>2]|0)+-12>>2]|0)+4)|0,b=(c[a>>2]|0)+1|0,c[a>>2]=b,(b|0)==0):0)Ha(79054,79014,48,79068);pc[c[(c[d>>2]|0)+8>>2]&1023](d,e);d=c[e>>2]|0;if(!d){i=f;return}a=c[(c[d>>2]|0)+-12>>2]|0;e=d+a|0;a=d+(a+4)|0;b=(c[a>>2]|0)+-1|0;c[a>>2]=b;if((e|0)==0|(b|0)!=0){i=f;return}oc[c[(c[e>>2]|0)+4>>2]&2047](e);i=f;return}function iv(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;f=i;i=i+16|0;e=f;d=o$(b,1488,5848,-1)|0;if(!d){FF(a,b);i=f;return}c[e>>2]=a;if((a|0)!=0?(a=a+((c[(c[a>>2]|0)+-12>>2]|0)+4)|0,b=(c[a>>2]|0)+1|0,c[a>>2]=b,(b|0)==0):0)Ha(79054,79014,48,79068);pc[c[(c[d>>2]|0)+12>>2]&1023](d,e);d=c[e>>2]|0;if(!d){i=f;return}a=c[(c[d>>2]|0)+-12>>2]|0;e=d+a|0;a=d+(a+4)|0;b=(c[a>>2]|0)+-1|0;c[a>>2]=b;if((e|0)==0|(b|0)!=0){i=f;return}oc[c[(c[e>>2]|0)+4>>2]&2047](e);i=f;return}function jv(a){a=a|0;a=a+-16|0;_d(a,26100);c[a+56>>2]=12804;if(!(c[a+60>>2]|0))return;else Ha(74472,79014,56,74486)}function kv(a){a=a|0;a=a+-16|0;_d(a,26100);c[a+56>>2]=12804;if(!(c[a+60>>2]|0)){P_(a);return}else Ha(74472,79014,56,74486)}function lv(a,b){a=a|0;b=b|0;hv(a+-16|0,b);return}function mv(a,b){a=a|0;b=b|0;iv(a+-16|0,b);return}function nv(a){a=a|0;var b=0;b=c[(c[a>>2]|0)+-12>>2]|0;_d(a+b|0,26100);c[a+(b+56)>>2]=12804;if(!(c[a+(b+60)>>2]|0))return;else Ha(74472,79014,56,74486)}function ov(a){a=a|0;var b=0,d=0;d=c[(c[a>>2]|0)+-12>>2]|0;b=a+d|0;_d(b,26100);c[a+(d+56)>>2]=12804;if(!(c[a+(d+60)>>2]|0)){P_(b);return}else Ha(74472,79014,56,74486)}function pv(a){a=a|0;P_(a);return}function qv(b,d){b=b|0;d=d|0;var e=0,f=0;e=O_(64)|0;c[e+4>>2]=0;c[e+8>>2]=0;c[e+12>>2]=0;f=e+20|0;c[f>>2]=0;c[f+4>>2]=0;c[f+8>>2]=0;c[f+12>>2]=0;c[f+16>>2]=0;c[f+20>>2]=0;a[f+24>>0]=0;c[e+48>>2]=d;c[e>>2]=26136;c[e+56>>2]=26232;c[e+16>>2]=26204;c[e+52>>2]=50;c[e+60>>2]=2;f=c[(c[e>>2]|0)+-12>>2]|0;b=e+f|0;f=e+(f+4)|0;d=(c[f>>2]|0)+-1|0;c[f>>2]=d;if((b|0)==0|(d|0)!=0)return e|0;oc[c[(c[b>>2]|0)+4>>2]&2047](b);return e|0}function rv(a){a=a|0;_d(a,26248);c[a+56>>2]=12804;if(!(c[a+60>>2]|0))return;else Ha(74472,79014,56,74486)}function sv(a){a=a|0;rv(a);P_(a);return}function tv(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;f=i;i=i+16|0;e=f;d=o$(b,1488,5904,-1)|0;if(!d){DF(a,b);i=f;return}c[e>>2]=a;if((a|0)!=0?(a=a+((c[(c[a>>2]|0)+-12>>2]|0)+4)|0,b=(c[a>>2]|0)+1|0,c[a>>2]=b,(b|0)==0):0)Ha(79054,79014,48,79068);pc[c[(c[d>>2]|0)+8>>2]&1023](d,e);d=c[e>>2]|0;if(!d){i=f;return}a=c[(c[d>>2]|0)+-12>>2]|0;e=d+a|0;a=d+(a+4)|0;b=(c[a>>2]|0)+-1|0;c[a>>2]=b;if((e|0)==0|(b|0)!=0){i=f;return}oc[c[(c[e>>2]|0)+4>>2]&2047](e);i=f;return}function uv(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;f=i;i=i+16|0;e=f;d=o$(b,1488,5904,-1)|0;if(!d){FF(a,b);i=f;return}c[e>>2]=a;if((a|0)!=0?(a=a+((c[(c[a>>2]|0)+-12>>2]|0)+4)|0,b=(c[a>>2]|0)+1|0,c[a>>2]=b,(b|0)==0):0)Ha(79054,79014,48,79068);pc[c[(c[d>>2]|0)+12>>2]&1023](d,e);d=c[e>>2]|0;if(!d){i=f;return}a=c[(c[d>>2]|0)+-12>>2]|0;e=d+a|0;a=d+(a+4)|0;b=(c[a>>2]|0)+-1|0;c[a>>2]=b;if((e|0)==0|(b|0)!=0){i=f;return}oc[c[(c[e>>2]|0)+4>>2]&2047](e);i=f;return}function vv(a){a=a|0;a=a+-16|0;_d(a,26248);c[a+56>>2]=12804;if(!(c[a+60>>2]|0))return;else Ha(74472,79014,56,74486)}function wv(a){a=a|0;a=a+-16|0;_d(a,26248);c[a+56>>2]=12804;if(!(c[a+60>>2]|0)){P_(a);return}else Ha(74472,79014,56,74486)}function xv(a,b){a=a|0;b=b|0;tv(a+-16|0,b);return}function yv(a,b){a=a|0;b=b|0;uv(a+-16|0,b);return}function zv(a){a=a|0;var b=0;b=c[(c[a>>2]|0)+-12>>2]|0;_d(a+b|0,26248);c[a+(b+56)>>2]=12804;if(!(c[a+(b+60)>>2]|0))return;else Ha(74472,79014,56,74486)}function Av(a){a=a|0;var b=0,d=0;d=c[(c[a>>2]|0)+-12>>2]|0;b=a+d|0;_d(b,26248);c[a+(d+56)>>2]=12804;if(!(c[a+(d+60)>>2]|0)){P_(b);return}else Ha(74472,79014,56,74486)}function Bv(a){a=a|0;P_(a);return}function Cv(b,d){b=b|0;d=d|0;var e=0,f=0;e=O_(64)|0;c[e+4>>2]=0;c[e+8>>2]=0;c[e+12>>2]=0;f=e+20|0;c[f>>2]=0;c[f+4>>2]=0;c[f+8>>2]=0;c[f+12>>2]=0;c[f+16>>2]=0;c[f+20>>2]=0;a[f+24>>0]=0;c[e+48>>2]=d;c[e>>2]=26284;c[e+56>>2]=26380;c[e+16>>2]=26352;c[e+52>>2]=49;c[e+60>>2]=2;f=c[(c[e>>2]|0)+-12>>2]|0;b=e+f|0;f=e+(f+4)|0;d=(c[f>>2]|0)+-1|0;c[f>>2]=d;if((b|0)==0|(d|0)!=0)return e|0;oc[c[(c[b>>2]|0)+4>>2]&2047](b);return e|0}function Dv(a){a=a|0;_d(a,26396);c[a+56>>2]=12804;if(!(c[a+60>>2]|0))return;else Ha(74472,79014,56,74486)}function Ev(a){a=a|0;Dv(a);P_(a);return}function Fv(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;f=i;i=i+16|0;e=f;d=o$(b,1488,5960,-1)|0;if(!d){DF(a,b);i=f;return}c[e>>2]=a;if((a|0)!=0?(a=a+((c[(c[a>>2]|0)+-12>>2]|0)+4)|0,b=(c[a>>2]|0)+1|0,c[a>>2]=b,(b|0)==0):0)Ha(79054,79014,48,79068);pc[c[(c[d>>2]|0)+8>>2]&1023](d,e);d=c[e>>2]|0;if(!d){i=f;return}a=c[(c[d>>2]|0)+-12>>2]|0;e=d+a|0;a=d+(a+4)|0;b=(c[a>>2]|0)+-1|0;c[a>>2]=b;if((e|0)==0|(b|0)!=0){i=f;return}oc[c[(c[e>>2]|0)+4>>2]&2047](e);i=f;return}function Gv(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;f=i;i=i+16|0;e=f;d=o$(b,1488,5960,-1)|0;if(!d){FF(a,b);i=f;return}c[e>>2]=a;if((a|0)!=0?(a=a+((c[(c[a>>2]|0)+-12>>2]|0)+4)|0,b=(c[a>>2]|0)+1|0,c[a>>2]=b,(b|0)==0):0)Ha(79054,79014,48,79068);pc[c[(c[d>>2]|0)+12>>2]&1023](d,e);d=c[e>>2]|0;if(!d){i=f;return}a=c[(c[d>>2]|0)+-12>>2]|0;e=d+a|0;a=d+(a+4)|0;b=(c[a>>2]|0)+-1|0;c[a>>2]=b;if((e|0)==0|(b|0)!=0){i=f;return}oc[c[(c[e>>2]|0)+4>>2]&2047](e);i=f;return}function Hv(a){a=a|0;a=a+-16|0;_d(a,26396);c[a+56>>2]=12804;if(!(c[a+60>>2]|0))return;else Ha(74472,79014,56,74486)}function Iv(a){a=a|0;a=a+-16|0;_d(a,26396);c[a+56>>2]=12804;if(!(c[a+60>>2]|0)){P_(a);return}else Ha(74472,79014,56,74486)}function Jv(a,b){a=a|0;b=b|0;Fv(a+-16|0,b);return}function Kv(a,b){a=a|0;b=b|0;Gv(a+-16|0,b);return}function Lv(a){a=a|0;var b=0;b=c[(c[a>>2]|0)+-12>>2]|0;_d(a+b|0,26396);c[a+(b+56)>>2]=12804;if(!(c[a+(b+60)>>2]|0))return;else Ha(74472,79014,56,74486)}function Mv(a){a=a|0;var b=0,d=0;d=c[(c[a>>2]|0)+-12>>2]|0;b=a+d|0;_d(b,26396);c[a+(d+56)>>2]=12804;if(!(c[a+(d+60)>>2]|0)){P_(b);return}else Ha(74472,79014,56,74486)}function Nv(a){a=a|0;P_(a);return}function Ov(b,d){b=b|0;d=d|0;var e=0,f=0;e=O_(64)|0;c[e+4>>2]=0;c[e+8>>2]=0;c[e+12>>2]=0;f=e+20|0;c[f>>2]=0;c[f+4>>2]=0;c[f+8>>2]=0;c[f+12>>2]=0;c[f+16>>2]=0;c[f+20>>2]=0;a[f+24>>0]=0;c[e+48>>2]=d;c[e>>2]=26432;c[e+56>>2]=26528;c[e+16>>2]=26500;c[e+52>>2]=48;c[e+60>>2]=2;f=c[(c[e>>2]|0)+-12>>2]|0;b=e+f|0;f=e+(f+4)|0;d=(c[f>>2]|0)+-1|0;c[f>>2]=d;if((b|0)==0|(d|0)!=0)return e|0;oc[c[(c[b>>2]|0)+4>>2]&2047](b);return e|0}function Pv(a){a=a|0;_d(a,26544);c[a+56>>2]=12804;if(!(c[a+60>>2]|0))return;else Ha(74472,79014,56,74486)}function Qv(a){a=a|0;Pv(a);P_(a);return}function Rv(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;f=i;i=i+16|0;e=f;d=o$(b,1488,6016,-1)|0;if(!d){DF(a,b);i=f;return}c[e>>2]=a;if((a|0)!=0?(a=a+((c[(c[a>>2]|0)+-12>>2]|0)+4)|0,b=(c[a>>2]|0)+1|0,c[a>>2]=b,(b|0)==0):0)Ha(79054,79014,48,79068);pc[c[(c[d>>2]|0)+8>>2]&1023](d,e);d=c[e>>2]|0;if(!d){i=f;return}a=c[(c[d>>2]|0)+-12>>2]|0;e=d+a|0;a=d+(a+4)|0;b=(c[a>>2]|0)+-1|0;c[a>>2]=b;if((e|0)==0|(b|0)!=0){i=f;return}oc[c[(c[e>>2]|0)+4>>2]&2047](e);i=f;return}function Sv(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;f=i;i=i+16|0;e=f;d=o$(b,1488,6016,-1)|0;if(!d){FF(a,b);i=f;return}c[e>>2]=a;if((a|0)!=0?(a=a+((c[(c[a>>2]|0)+-12>>2]|0)+4)|0,b=(c[a>>2]|0)+1|0,c[a>>2]=b,(b|0)==0):0)Ha(79054,79014,48,79068);pc[c[(c[d>>2]|0)+12>>2]&1023](d,e);d=c[e>>2]|0;if(!d){i=f;return}a=c[(c[d>>2]|0)+-12>>2]|0;e=d+a|0;a=d+(a+4)|0;b=(c[a>>2]|0)+-1|0;c[a>>2]=b;if((e|0)==0|(b|0)!=0){i=f;return}oc[c[(c[e>>2]|0)+4>>2]&2047](e);i=f;return}function Tv(a){a=a|0;a=a+-16|0;_d(a,26544);c[a+56>>2]=12804;if(!(c[a+60>>2]|0))return;else Ha(74472,79014,56,74486)}function Uv(a){a=a|0;a=a+-16|0;_d(a,26544);c[a+56>>2]=12804;if(!(c[a+60>>2]|0)){P_(a);return}else Ha(74472,79014,56,74486)}function Vv(a,b){a=a|0;b=b|0;Rv(a+-16|0,b);return}function Wv(a,b){a=a|0;b=b|0;Sv(a+-16|0,b);return}function Xv(a){a=a|0;var b=0;b=c[(c[a>>2]|0)+-12>>2]|0;_d(a+b|0,26544);c[a+(b+56)>>2]=12804;if(!(c[a+(b+60)>>2]|0))return;else Ha(74472,79014,56,74486)}function Yv(a){a=a|0;var b=0,d=0;d=c[(c[a>>2]|0)+-12>>2]|0;b=a+d|0;_d(b,26544);c[a+(d+56)>>2]=12804;if(!(c[a+(d+60)>>2]|0)){P_(b);return}else Ha(74472,79014,56,74486)}function Zv(a){a=a|0;P_(a);return}function _v(b,d){b=b|0;d=d|0;var e=0,f=0;e=O_(64)|0;c[e+4>>2]=0;c[e+8>>2]=0;c[e+12>>2]=0;f=e+20|0;c[f>>2]=0;c[f+4>>2]=0;c[f+8>>2]=0;c[f+12>>2]=0;c[f+16>>2]=0;c[f+20>>2]=0;a[f+24>>0]=0;c[e+48>>2]=d;c[e>>2]=26580;c[e+56>>2]=26676;c[e+16>>2]=26648;c[e+52>>2]=47;c[e+60>>2]=2;f=c[(c[e>>2]|0)+-12>>2]|0;b=e+f|0;f=e+(f+4)|0;d=(c[f>>2]|0)+-1|0;c[f>>2]=d;if((b|0)==0|(d|0)!=0)return e|0;oc[c[(c[b>>2]|0)+4>>2]&2047](b);return e|0}function $v(a){a=a|0;_d(a,26692);c[a+56>>2]=12804;if(!(c[a+60>>2]|0))return;else Ha(74472,79014,56,74486)}function aw(a){a=a|0;$v(a);P_(a);return}function bw(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;f=i;i=i+16|0;e=f;d=o$(b,1488,6072,-1)|0;if(!d){DF(a,b);i=f;return}c[e>>2]=a;if((a|0)!=0?(a=a+((c[(c[a>>2]|0)+-12>>2]|0)+4)|0,b=(c[a>>2]|0)+1|0,c[a>>2]=b,(b|0)==0):0)Ha(79054,79014,48,79068);pc[c[(c[d>>2]|0)+8>>2]&1023](d,e);d=c[e>>2]|0;if(!d){i=f;return}a=c[(c[d>>2]|0)+-12>>2]|0;e=d+a|0;a=d+(a+4)|0;b=(c[a>>2]|0)+-1|0;c[a>>2]=b;if((e|0)==0|(b|0)!=0){i=f;return}oc[c[(c[e>>2]|0)+4>>2]&2047](e);i=f;return}function cw(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;f=i;i=i+16|0;e=f;d=o$(b,1488,6072,-1)|0;if(!d){FF(a,b);i=f;return}c[e>>2]=a;if((a|0)!=0?(a=a+((c[(c[a>>2]|0)+-12>>2]|0)+4)|0,b=(c[a>>2]|0)+1|0,c[a>>2]=b,(b|0)==0):0)Ha(79054,79014,48,79068);pc[c[(c[d>>2]|0)+12>>2]&1023](d,e);d=c[e>>2]|0;if(!d){i=f;return}a=c[(c[d>>2]|0)+-12>>2]|0;e=d+a|0;a=d+(a+4)|0;b=(c[a>>2]|0)+-1|0;c[a>>2]=b;if((e|0)==0|(b|0)!=0){i=f;return}oc[c[(c[e>>2]|0)+4>>2]&2047](e);i=f;return}function dw(a){a=a|0;a=a+-16|0;_d(a,26692);c[a+56>>2]=12804;if(!(c[a+60>>2]|0))return;else Ha(74472,79014,56,74486)}function ew(a){a=a|0;a=a+-16|0;_d(a,26692);c[a+56>>2]=12804;if(!(c[a+60>>2]|0)){P_(a);return}else Ha(74472,79014,56,74486)}function fw(a,b){a=a|0;b=b|0;bw(a+-16|0,b);return}function gw(a,b){a=a|0;b=b|0;cw(a+-16|0,b);return}function hw(a){a=a|0;var b=0;b=c[(c[a>>2]|0)+-12>>2]|0;_d(a+b|0,26692);c[a+(b+56)>>2]=12804;if(!(c[a+(b+60)>>2]|0))return;else Ha(74472,79014,56,74486)}function iw(a){a=a|0;var b=0,d=0;d=c[(c[a>>2]|0)+-12>>2]|0;b=a+d|0;_d(b,26692);c[a+(d+56)>>2]=12804;if(!(c[a+(d+60)>>2]|0)){P_(b);return}else Ha(74472,79014,56,74486)}function jw(a){a=a|0;P_(a);return}function kw(b,d){b=b|0;d=d|0;var e=0,f=0;e=O_(64)|0;c[e+4>>2]=0;c[e+8>>2]=0;c[e+12>>2]=0;f=e+20|0;c[f>>2]=0;c[f+4>>2]=0;c[f+8>>2]=0;c[f+12>>2]=0;c[f+16>>2]=0;c[f+20>>2]=0;a[f+24>>0]=0;c[e+48>>2]=d;c[e>>2]=26728;c[e+56>>2]=26824;c[e+16>>2]=26796;c[e+52>>2]=46;c[e+60>>2]=2;f=c[(c[e>>2]|0)+-12>>2]|0;b=e+f|0;f=e+(f+4)|0;d=(c[f>>2]|0)+-1|0;c[f>>2]=d;if((b|0)==0|(d|0)!=0)return e|0;oc[c[(c[b>>2]|0)+4>>2]&2047](b);return e|0}function lw(a){a=a|0;_d(a,26840);c[a+56>>2]=12804;if(!(c[a+60>>2]|0))return;else Ha(74472,79014,56,74486)}function mw(a){a=a|0;lw(a);P_(a);return}function nw(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;f=i;i=i+16|0;e=f;d=o$(b,1488,6128,-1)|0;if(!d){DF(a,b);i=f;return}c[e>>2]=a;if((a|0)!=0?(a=a+((c[(c[a>>2]|0)+-12>>2]|0)+4)|0,b=(c[a>>2]|0)+1|0,c[a>>2]=b,(b|0)==0):0)Ha(79054,79014,48,79068);pc[c[(c[d>>2]|0)+8>>2]&1023](d,e);d=c[e>>2]|0;if(!d){i=f;return}a=c[(c[d>>2]|0)+-12>>2]|0;e=d+a|0;a=d+(a+4)|0;b=(c[a>>2]|0)+-1|0;c[a>>2]=b;if((e|0)==0|(b|0)!=0){i=f;return}oc[c[(c[e>>2]|0)+4>>2]&2047](e);i=f;return}function ow(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;f=i;i=i+16|0;e=f;d=o$(b,1488,6128,-1)|0;if(!d){FF(a,b);i=f;return}c[e>>2]=a;if((a|0)!=0?(a=a+((c[(c[a>>2]|0)+-12>>2]|0)+4)|0,b=(c[a>>2]|0)+1|0,c[a>>2]=b,(b|0)==0):0)Ha(79054,79014,48,79068);pc[c[(c[d>>2]|0)+12>>2]&1023](d,e);d=c[e>>2]|0;if(!d){i=f;return}a=c[(c[d>>2]|0)+-12>>2]|0;e=d+a|0;a=d+(a+4)|0;b=(c[a>>2]|0)+-1|0;c[a>>2]=b;if((e|0)==0|(b|0)!=0){i=f;return}oc[c[(c[e>>2]|0)+4>>2]&2047](e);i=f;return}function pw(a){a=a|0;a=a+-16|0;_d(a,26840);c[a+56>>2]=12804;if(!(c[a+60>>2]|0))return;else Ha(74472,79014,56,74486)}function qw(a){a=a|0;a=a+-16|0;_d(a,26840);c[a+56>>2]=12804;if(!(c[a+60>>2]|0)){P_(a);return}else Ha(74472,79014,56,74486)}function rw(a,b){a=a|0;b=b|0;nw(a+-16|0,b);return}function sw(a,b){a=a|0;b=b|0;ow(a+-16|0,b);return}function tw(a){a=a|0;var b=0;b=c[(c[a>>2]|0)+-12>>2]|0;_d(a+b|0,26840);c[a+(b+56)>>2]=12804;if(!(c[a+(b+60)>>2]|0))return;else Ha(74472,79014,56,74486)}function uw(a){a=a|0;var b=0,d=0;d=c[(c[a>>2]|0)+-12>>2]|0;b=a+d|0;_d(b,26840);c[a+(d+56)>>2]=12804;if(!(c[a+(d+60)>>2]|0)){P_(b);return}else Ha(74472,79014,56,74486)}function vw(a){a=a|0;P_(a);return}function ww(b,d){b=b|0;d=d|0;var e=0,f=0;e=O_(64)|0;c[e+4>>2]=0;c[e+8>>2]=0;c[e+12>>2]=0;f=e+20|0;c[f>>2]=0;c[f+4>>2]=0;c[f+8>>2]=0;c[f+12>>2]=0;c[f+16>>2]=0;c[f+20>>2]=0;a[f+24>>0]=0;c[e+48>>2]=d;c[e>>2]=26876;c[e+56>>2]=26972;c[e+16>>2]=26944;c[e+52>>2]=45;c[e+60>>2]=2;f=c[(c[e>>2]|0)+-12>>2]|0;b=e+f|0;f=e+(f+4)|0;d=(c[f>>2]|0)+-1|0;c[f>>2]=d;if((b|0)==0|(d|0)!=0)return e|0;oc[c[(c[b>>2]|0)+4>>2]&2047](b);return e|0}function xw(a){a=a|0;_d(a,26988);c[a+56>>2]=12804;if(!(c[a+60>>2]|0))return;else Ha(74472,79014,56,74486)}function yw(a){a=a|0;xw(a);P_(a);return}function zw(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;f=i;i=i+16|0;e=f;d=o$(b,1488,6184,-1)|0;if(!d){DF(a,b);i=f;return}c[e>>2]=a;if((a|0)!=0?(a=a+((c[(c[a>>2]|0)+-12>>2]|0)+4)|0,b=(c[a>>2]|0)+1|0,c[a>>2]=b,(b|0)==0):0)Ha(79054,79014,48,79068);pc[c[(c[d>>2]|0)+8>>2]&1023](d,e);d=c[e>>2]|0;if(!d){i=f;return}a=c[(c[d>>2]|0)+-12>>2]|0;e=d+a|0;a=d+(a+4)|0;b=(c[a>>2]|0)+-1|0;c[a>>2]=b;if((e|0)==0|(b|0)!=0){i=f;return}oc[c[(c[e>>2]|0)+4>>2]&2047](e);i=f;return}function Aw(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;f=i;i=i+16|0;e=f;d=o$(b,1488,6184,-1)|0;if(!d){FF(a,b);i=f;return}c[e>>2]=a;if((a|0)!=0?(a=a+((c[(c[a>>2]|0)+-12>>2]|0)+4)|0,b=(c[a>>2]|0)+1|0,c[a>>2]=b,(b|0)==0):0)Ha(79054,79014,48,79068);pc[c[(c[d>>2]|0)+12>>2]&1023](d,e);d=c[e>>2]|0;if(!d){i=f;return}a=c[(c[d>>2]|0)+-12>>2]|0;e=d+a|0;a=d+(a+4)|0;b=(c[a>>2]|0)+-1|0;c[a>>2]=b;if((e|0)==0|(b|0)!=0){i=f;return}oc[c[(c[e>>2]|0)+4>>2]&2047](e);i=f;return}function Bw(a){a=a|0;a=a+-16|0;_d(a,26988);c[a+56>>2]=12804;if(!(c[a+60>>2]|0))return;else Ha(74472,79014,56,74486)}function Cw(a){a=a|0;a=a+-16|0;_d(a,26988);c[a+56>>2]=12804;if(!(c[a+60>>2]|0)){P_(a);return}else Ha(74472,79014,56,74486)}function Dw(a,b){a=a|0;b=b|0;zw(a+-16|0,b);return}function Ew(a,b){a=a|0;b=b|0;Aw(a+-16|0,b);return}function Fw(a){a=a|0;var b=0;b=c[(c[a>>2]|0)+-12>>2]|0;_d(a+b|0,26988);c[a+(b+56)>>2]=12804;if(!(c[a+(b+60)>>2]|0))return;else Ha(74472,79014,56,74486)}function Gw(a){a=a|0;var b=0,d=0;d=c[(c[a>>2]|0)+-12>>2]|0;b=a+d|0;_d(b,26988);c[a+(d+56)>>2]=12804;if(!(c[a+(d+60)>>2]|0)){P_(b);return}else Ha(74472,79014,56,74486)}function Hw(a){a=a|0;P_(a);return}function Iw(b,d){b=b|0;d=d|0;var e=0,f=0;e=O_(64)|0;c[e+4>>2]=0;c[e+8>>2]=0;c[e+12>>2]=0;f=e+20|0;c[f>>2]=0;c[f+4>>2]=0;c[f+8>>2]=0;c[f+12>>2]=0;c[f+16>>2]=0;c[f+20>>2]=0;a[f+24>>0]=0;c[e+48>>2]=d;c[e>>2]=27024;c[e+56>>2]=27120;c[e+16>>2]=27092;c[e+52>>2]=44;c[e+60>>2]=2;f=c[(c[e>>2]|0)+-12>>2]|0;b=e+f|0;f=e+(f+4)|0;d=(c[f>>2]|0)+-1|0;c[f>>2]=d;if((b|0)==0|(d|0)!=0)return e|0;oc[c[(c[b>>2]|0)+4>>2]&2047](b);return e|0}function Jw(a){a=a|0;_d(a,27136);c[a+56>>2]=12804;if(!(c[a+60>>2]|0))return;else Ha(74472,79014,56,74486)}function Kw(a){a=a|0;Jw(a);P_(a);return}function Lw(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;f=i;i=i+16|0;e=f;d=o$(b,1488,6240,-1)|0;if(!d){DF(a,b);i=f;return}c[e>>2]=a;if((a|0)!=0?(a=a+((c[(c[a>>2]|0)+-12>>2]|0)+4)|0,b=(c[a>>2]|0)+1|0,c[a>>2]=b,(b|0)==0):0)Ha(79054,79014,48,79068);pc[c[(c[d>>2]|0)+8>>2]&1023](d,e);d=c[e>>2]|0;if(!d){i=f;return}a=c[(c[d>>2]|0)+-12>>2]|0;e=d+a|0;a=d+(a+4)|0;b=(c[a>>2]|0)+-1|0;c[a>>2]=b;if((e|0)==0|(b|0)!=0){i=f;return}oc[c[(c[e>>2]|0)+4>>2]&2047](e);i=f;return}function Mw(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;f=i;i=i+16|0;e=f;d=o$(b,1488,6240,-1)|0;if(!d){FF(a,b);i=f;return}c[e>>2]=a;if((a|0)!=0?(a=a+((c[(c[a>>2]|0)+-12>>2]|0)+4)|0,b=(c[a>>2]|0)+1|0,c[a>>2]=b,(b|0)==0):0)Ha(79054,79014,48,79068);pc[c[(c[d>>2]|0)+12>>2]&1023](d,e);d=c[e>>2]|0;if(!d){i=f;return}a=c[(c[d>>2]|0)+-12>>2]|0;e=d+a|0;a=d+(a+4)|0;b=(c[a>>2]|0)+-1|0;c[a>>2]=b;if((e|0)==0|(b|0)!=0){i=f;return}oc[c[(c[e>>2]|0)+4>>2]&2047](e);i=f;return}function Nw(a){a=a|0;a=a+-16|0;_d(a,27136);c[a+56>>2]=12804;if(!(c[a+60>>2]|0))return;else Ha(74472,79014,56,74486)}function Ow(a){a=a|0;a=a+-16|0;_d(a,27136);c[a+56>>2]=12804;if(!(c[a+60>>2]|0)){P_(a);return}else Ha(74472,79014,56,74486)}function Pw(a,b){a=a|0;b=b|0;Lw(a+-16|0,b);return}function Qw(a,b){a=a|0;b=b|0;Mw(a+-16|0,b);return}function Rw(a){a=a|0;var b=0;b=c[(c[a>>2]|0)+-12>>2]|0;_d(a+b|0,27136);c[a+(b+56)>>2]=12804;if(!(c[a+(b+60)>>2]|0))return;else Ha(74472,79014,56,74486)}function Sw(a){a=a|0;var b=0,d=0;d=c[(c[a>>2]|0)+-12>>2]|0;b=a+d|0;_d(b,27136);c[a+(d+56)>>2]=12804;if(!(c[a+(d+60)>>2]|0)){P_(b);return}else Ha(74472,79014,56,74486)}function Tw(a){a=a|0;P_(a);return}function Uw(b,d){b=b|0;d=d|0;var e=0,f=0;e=O_(64)|0;c[e+4>>2]=0;c[e+8>>2]=0;c[e+12>>2]=0;f=e+20|0;c[f>>2]=0;c[f+4>>2]=0;c[f+8>>2]=0;c[f+12>>2]=0;c[f+16>>2]=0;c[f+20>>2]=0;a[f+24>>0]=0;c[e+48>>2]=d;c[e>>2]=27172;c[e+56>>2]=27268;c[e+16>>2]=27240;c[e+52>>2]=43;c[e+60>>2]=2;f=c[(c[e>>2]|0)+-12>>2]|0;b=e+f|0;f=e+(f+4)|0;d=(c[f>>2]|0)+-1|0;c[f>>2]=d;if((b|0)==0|(d|0)!=0)return e|0;oc[c[(c[b>>2]|0)+4>>2]&2047](b);return e|0}function Vw(a){a=a|0;_d(a,27284);c[a+56>>2]=12804;if(!(c[a+60>>2]|0))return;else Ha(74472,79014,56,74486)}function Ww(a){a=a|0;Vw(a);P_(a);return}function Xw(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;f=i;i=i+16|0;e=f;d=o$(b,1488,6296,-1)|0;if(!d){DF(a,b);i=f;return}c[e>>2]=a;if((a|0)!=0?(a=a+((c[(c[a>>2]|0)+-12>>2]|0)+4)|0,b=(c[a>>2]|0)+1|0,c[a>>2]=b,(b|0)==0):0)Ha(79054,79014,48,79068);pc[c[(c[d>>2]|0)+8>>2]&1023](d,e);d=c[e>>2]|0;if(!d){i=f;return}a=c[(c[d>>2]|0)+-12>>2]|0;e=d+a|0;a=d+(a+4)|0;b=(c[a>>2]|0)+-1|0;c[a>>2]=b;if((e|0)==0|(b|0)!=0){i=f;return}oc[c[(c[e>>2]|0)+4>>2]&2047](e);i=f;return}function Yw(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;f=i;i=i+16|0;e=f;d=o$(b,1488,6296,-1)|0;if(!d){FF(a,b);i=f;return}c[e>>2]=a;if((a|0)!=0?(a=a+((c[(c[a>>2]|0)+-12>>2]|0)+4)|0,b=(c[a>>2]|0)+1|0,c[a>>2]=b,(b|0)==0):0)Ha(79054,79014,48,79068);pc[c[(c[d>>2]|0)+12>>2]&1023](d,e);d=c[e>>2]|0;if(!d){i=f;return}a=c[(c[d>>2]|0)+-12>>2]|0;e=d+a|0;a=d+(a+4)|0;b=(c[a>>2]|0)+-1|0;c[a>>2]=b;if((e|0)==0|(b|0)!=0){i=f;return}oc[c[(c[e>>2]|0)+4>>2]&2047](e);i=f;return}function Zw(a){a=a|0;a=a+-16|0;_d(a,27284);c[a+56>>2]=12804;if(!(c[a+60>>2]|0))return;else Ha(74472,79014,56,74486)}function _w(a){a=a|0;a=a+-16|0;_d(a,27284);c[a+56>>2]=12804;if(!(c[a+60>>2]|0)){P_(a);return}else Ha(74472,79014,56,74486)}function $w(a,b){a=a|0;b=b|0;Xw(a+-16|0,b);return}function ax(a,b){a=a|0;b=b|0;Yw(a+-16|0,b);return}function bx(a){a=a|0;var b=0;b=c[(c[a>>2]|0)+-12>>2]|0;_d(a+b|0,27284);c[a+(b+56)>>2]=12804;if(!(c[a+(b+60)>>2]|0))return;else Ha(74472,79014,56,74486)}function cx(a){a=a|0;var b=0,d=0;d=c[(c[a>>2]|0)+-12>>2]|0;b=a+d|0;_d(b,27284);c[a+(d+56)>>2]=12804;if(!(c[a+(d+60)>>2]|0)){P_(b);return}else Ha(74472,79014,56,74486)}function dx(a){a=a|0;P_(a);return}function ex(b,d){b=b|0;d=d|0;var e=0,f=0;e=O_(64)|0;c[e+4>>2]=0;c[e+8>>2]=0;c[e+12>>2]=0;f=e+20|0;c[f>>2]=0;c[f+4>>2]=0;c[f+8>>2]=0;c[f+12>>2]=0;c[f+16>>2]=0;c[f+20>>2]=0;a[f+24>>0]=0;c[e+48>>2]=d;c[e>>2]=27320;c[e+56>>2]=27416;c[e+16>>2]=27388;c[e+52>>2]=42;c[e+60>>2]=2;f=c[(c[e>>2]|0)+-12>>2]|0;b=e+f|0;f=e+(f+4)|0;d=(c[f>>2]|0)+-1|0;c[f>>2]=d;if((b|0)==0|(d|0)!=0)return e|0;oc[c[(c[b>>2]|0)+4>>2]&2047](b);return e|0}function fx(a){a=a|0;_d(a,27432);c[a+56>>2]=12804;if(!(c[a+60>>2]|0))return;else Ha(74472,79014,56,74486)}function gx(a){a=a|0;fx(a);P_(a);return}function hx(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;f=i;i=i+16|0;e=f;d=o$(b,1488,6352,-1)|0;if(!d){DF(a,b);i=f;return}c[e>>2]=a;if((a|0)!=0?(a=a+((c[(c[a>>2]|0)+-12>>2]|0)+4)|0,b=(c[a>>2]|0)+1|0,c[a>>2]=b,(b|0)==0):0)Ha(79054,79014,48,79068);pc[c[(c[d>>2]|0)+8>>2]&1023](d,e);d=c[e>>2]|0;if(!d){i=f;return}a=c[(c[d>>2]|0)+-12>>2]|0;e=d+a|0;a=d+(a+4)|0;b=(c[a>>2]|0)+-1|0;c[a>>2]=b;if((e|0)==0|(b|0)!=0){i=f;return}oc[c[(c[e>>2]|0)+4>>2]&2047](e);i=f;return}function ix(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;f=i;i=i+16|0;e=f;d=o$(b,1488,6352,-1)|0;if(!d){FF(a,b);i=f;return}c[e>>2]=a;if((a|0)!=0?(a=a+((c[(c[a>>2]|0)+-12>>2]|0)+4)|0,b=(c[a>>2]|0)+1|0,c[a>>2]=b,(b|0)==0):0)Ha(79054,79014,48,79068);pc[c[(c[d>>2]|0)+12>>2]&1023](d,e);d=c[e>>2]|0;if(!d){i=f;return}a=c[(c[d>>2]|0)+-12>>2]|0;e=d+a|0;a=d+(a+4)|0;b=(c[a>>2]|0)+-1|0;c[a>>2]=b;if((e|0)==0|(b|0)!=0){i=f;return}oc[c[(c[e>>2]|0)+4>>2]&2047](e);i=f;return}function jx(a){a=a|0;a=a+-16|0;_d(a,27432);c[a+56>>2]=12804;if(!(c[a+60>>2]|0))return;else Ha(74472,79014,56,74486)}function kx(a){a=a|0;a=a+-16|0;_d(a,27432);c[a+56>>2]=12804;if(!(c[a+60>>2]|0)){P_(a);return}else Ha(74472,79014,56,74486)}function lx(a,b){a=a|0;b=b|0;hx(a+-16|0,b);return}function mx(a,b){a=a|0;b=b|0;ix(a+-16|0,b);return}function nx(a){a=a|0;var b=0;b=c[(c[a>>2]|0)+-12>>2]|0;_d(a+b|0,27432);c[a+(b+56)>>2]=12804;if(!(c[a+(b+60)>>2]|0))return;else Ha(74472,79014,56,74486)}function ox(a){a=a|0;var b=0,d=0;d=c[(c[a>>2]|0)+-12>>2]|0;b=a+d|0;_d(b,27432);c[a+(d+56)>>2]=12804;if(!(c[a+(d+60)>>2]|0)){P_(b);return}else Ha(74472,79014,56,74486)}function px(a){a=a|0;P_(a);return}function qx(b,d){b=b|0;d=d|0;var e=0,f=0;e=O_(64)|0;c[e+4>>2]=0;c[e+8>>2]=0;c[e+12>>2]=0;f=e+20|0;c[f>>2]=0;c[f+4>>2]=0;c[f+8>>2]=0;c[f+12>>2]=0;c[f+16>>2]=0;c[f+20>>2]=0;a[f+24>>0]=0;c[e+48>>2]=d;c[e>>2]=27468;c[e+56>>2]=27564;c[e+16>>2]=27536;c[e+52>>2]=41;c[e+60>>2]=2;f=c[(c[e>>2]|0)+-12>>2]|0;b=e+f|0;f=e+(f+4)|0;d=(c[f>>2]|0)+-1|0;c[f>>2]=d;if((b|0)==0|(d|0)!=0)return e|0;oc[c[(c[b>>2]|0)+4>>2]&2047](b);return e|0}function rx(a){a=a|0;_d(a,27580);c[a+56>>2]=12804;if(!(c[a+60>>2]|0))return;else Ha(74472,79014,56,74486)}function sx(a){a=a|0;rx(a);P_(a);return}function tx(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;f=i;i=i+16|0;e=f;d=o$(b,1488,6408,-1)|0;if(!d){DF(a,b);i=f;return}c[e>>2]=a;if((a|0)!=0?(a=a+((c[(c[a>>2]|0)+-12>>2]|0)+4)|0,b=(c[a>>2]|0)+1|0,c[a>>2]=b,(b|0)==0):0)Ha(79054,79014,48,79068);pc[c[(c[d>>2]|0)+8>>2]&1023](d,e);d=c[e>>2]|0;if(!d){i=f;return}a=c[(c[d>>2]|0)+-12>>2]|0;e=d+a|0;a=d+(a+4)|0;b=(c[a>>2]|0)+-1|0;c[a>>2]=b;if((e|0)==0|(b|0)!=0){i=f;return}oc[c[(c[e>>2]|0)+4>>2]&2047](e);i=f;return}function ux(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;f=i;i=i+16|0;e=f;d=o$(b,1488,6408,-1)|0;if(!d){FF(a,b);i=f;return}c[e>>2]=a;if((a|0)!=0?(a=a+((c[(c[a>>2]|0)+-12>>2]|0)+4)|0,b=(c[a>>2]|0)+1|0,c[a>>2]=b,(b|0)==0):0)Ha(79054,79014,48,79068);pc[c[(c[d>>2]|0)+12>>2]&1023](d,e);d=c[e>>2]|0;if(!d){i=f;return}a=c[(c[d>>2]|0)+-12>>2]|0;e=d+a|0;a=d+(a+4)|0;b=(c[a>>2]|0)+-1|0;c[a>>2]=b;if((e|0)==0|(b|0)!=0){i=f;return}oc[c[(c[e>>2]|0)+4>>2]&2047](e);i=f;return}function vx(a){a=a|0;a=a+-16|0;_d(a,27580);c[a+56>>2]=12804;if(!(c[a+60>>2]|0))return;else Ha(74472,79014,56,74486)}function wx(a){a=a|0;a=a+-16|0;_d(a,27580);c[a+56>>2]=12804;if(!(c[a+60>>2]|0)){P_(a);return}else Ha(74472,79014,56,74486)}function xx(a,b){a=a|0;b=b|0;tx(a+-16|0,b);return}function yx(a,b){a=a|0;b=b|0;ux(a+-16|0,b);return}function zx(a){a=a|0;var b=0;b=c[(c[a>>2]|0)+-12>>2]|0;_d(a+b|0,27580);c[a+(b+56)>>2]=12804;if(!(c[a+(b+60)>>2]|0))return;else Ha(74472,79014,56,74486)}function Ax(a){a=a|0;var b=0,d=0;d=c[(c[a>>2]|0)+-12>>2]|0;b=a+d|0;_d(b,27580);c[a+(d+56)>>2]=12804;if(!(c[a+(d+60)>>2]|0)){P_(b);return}else Ha(74472,79014,56,74486)}function Bx(a){a=a|0;P_(a);return}function Cx(b,d){b=b|0;d=d|0;var e=0,f=0;e=O_(64)|0;c[e+4>>2]=0;c[e+8>>2]=0;c[e+12>>2]=0;f=e+20|0;c[f>>2]=0;c[f+4>>2]=0;c[f+8>>2]=0;c[f+12>>2]=0;c[f+16>>2]=0;c[f+20>>2]=0;a[f+24>>0]=0;c[e+48>>2]=d;c[e>>2]=27616;c[e+56>>2]=27712;c[e+16>>2]=27684;c[e+52>>2]=40;c[e+60>>2]=2;f=c[(c[e>>2]|0)+-12>>2]|0;b=e+f|0;f=e+(f+4)|0;d=(c[f>>2]|0)+-1|0;c[f>>2]=d;if((b|0)==0|(d|0)!=0)return e|0;oc[c[(c[b>>2]|0)+4>>2]&2047](b);return e|0}function Dx(a){a=a|0;_d(a,27728);c[a+56>>2]=12804;if(!(c[a+60>>2]|0))return;else Ha(74472,79014,56,74486)}function Ex(a){a=a|0;Dx(a);P_(a);return}function Fx(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;f=i;i=i+16|0;e=f;d=o$(b,1488,6464,-1)|0;if(!d){DF(a,b);i=f;return}c[e>>2]=a;if((a|0)!=0?(a=a+((c[(c[a>>2]|0)+-12>>2]|0)+4)|0,b=(c[a>>2]|0)+1|0,c[a>>2]=b,(b|0)==0):0)Ha(79054,79014,48,79068);pc[c[(c[d>>2]|0)+8>>2]&1023](d,e);d=c[e>>2]|0;if(!d){i=f;return}a=c[(c[d>>2]|0)+-12>>2]|0;e=d+a|0;a=d+(a+4)|0;b=(c[a>>2]|0)+-1|0;c[a>>2]=b;if((e|0)==0|(b|0)!=0){i=f;return}oc[c[(c[e>>2]|0)+4>>2]&2047](e);i=f;return}function Gx(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;f=i;i=i+16|0;e=f;d=o$(b,1488,6464,-1)|0;if(!d){FF(a,b);i=f;return}c[e>>2]=a;if((a|0)!=0?(a=a+((c[(c[a>>2]|0)+-12>>2]|0)+4)|0,b=(c[a>>2]|0)+1|0,c[a>>2]=b,(b|0)==0):0)Ha(79054,79014,48,79068);pc[c[(c[d>>2]|0)+12>>2]&1023](d,e);d=c[e>>2]|0;if(!d){i=f;return}a=c[(c[d>>2]|0)+-12>>2]|0;e=d+a|0;a=d+(a+4)|0;b=(c[a>>2]|0)+-1|0;c[a>>2]=b;if((e|0)==0|(b|0)!=0){i=f;return}oc[c[(c[e>>2]|0)+4>>2]&2047](e);i=f;return}function Hx(a){a=a|0;a=a+-16|0;_d(a,27728);c[a+56>>2]=12804;if(!(c[a+60>>2]|0))return;else Ha(74472,79014,56,74486)}function Ix(a){a=a|0;a=a+-16|0;_d(a,27728);c[a+56>>2]=12804;if(!(c[a+60>>2]|0)){P_(a);return}else Ha(74472,79014,56,74486)}function Jx(a,b){a=a|0;b=b|0;Fx(a+-16|0,b);return}function Kx(a,b){a=a|0;b=b|0;Gx(a+-16|0,b);return}function Lx(a){a=a|0;var b=0;b=c[(c[a>>2]|0)+-12>>2]|0;_d(a+b|0,27728);c[a+(b+56)>>2]=12804;if(!(c[a+(b+60)>>2]|0))return;else Ha(74472,79014,56,74486)}function Mx(a){a=a|0;var b=0,d=0;d=c[(c[a>>2]|0)+-12>>2]|0;b=a+d|0;_d(b,27728);c[a+(d+56)>>2]=12804;if(!(c[a+(d+60)>>2]|0)){P_(b);return}else Ha(74472,79014,56,74486)}function Nx(a){a=a|0;P_(a);return}function Ox(b,d){b=b|0;d=d|0;var e=0,f=0;e=O_(64)|0;c[e+4>>2]=0;c[e+8>>2]=0;c[e+12>>2]=0;f=e+20|0;c[f>>2]=0;c[f+4>>2]=0;c[f+8>>2]=0;c[f+12>>2]=0;c[f+16>>2]=0;c[f+20>>2]=0;a[f+24>>0]=0;c[e+48>>2]=d;c[e>>2]=27764;c[e+56>>2]=27860;c[e+16>>2]=27832;c[e+52>>2]=39;c[e+60>>2]=2;f=c[(c[e>>2]|0)+-12>>2]|0;b=e+f|0;f=e+(f+4)|0;d=(c[f>>2]|0)+-1|0;c[f>>2]=d;if((b|0)==0|(d|0)!=0)return e|0;oc[c[(c[b>>2]|0)+4>>2]&2047](b);return e|0}function Px(a){a=a|0;_d(a,27876);c[a+56>>2]=12804;if(!(c[a+60>>2]|0))return;else Ha(74472,79014,56,74486)}function Qx(a){a=a|0;Px(a);P_(a);return}function Rx(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;f=i;i=i+16|0;e=f;d=o$(b,1488,6520,-1)|0;if(!d){DF(a,b);i=f;return}c[e>>2]=a;if((a|0)!=0?(a=a+((c[(c[a>>2]|0)+-12>>2]|0)+4)|0,b=(c[a>>2]|0)+1|0,c[a>>2]=b,(b|0)==0):0)Ha(79054,79014,48,79068);pc[c[(c[d>>2]|0)+8>>2]&1023](d,e);d=c[e>>2]|0;if(!d){i=f;return}a=c[(c[d>>2]|0)+-12>>2]|0;e=d+a|0;a=d+(a+4)|0;b=(c[a>>2]|0)+-1|0;c[a>>2]=b;if((e|0)==0|(b|0)!=0){i=f;return}oc[c[(c[e>>2]|0)+4>>2]&2047](e);i=f;return}function Sx(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;f=i;i=i+16|0;e=f;d=o$(b,1488,6520,-1)|0;if(!d){FF(a,b);i=f;return}c[e>>2]=a;if((a|0)!=0?(a=a+((c[(c[a>>2]|0)+-12>>2]|0)+4)|0,b=(c[a>>2]|0)+1|0,c[a>>2]=b,(b|0)==0):0)Ha(79054,79014,48,79068);pc[c[(c[d>>2]|0)+12>>2]&1023](d,e);d=c[e>>2]|0;if(!d){i=f;return}a=c[(c[d>>2]|0)+-12>>2]|0;e=d+a|0;a=d+(a+4)|0;b=(c[a>>2]|0)+-1|0;c[a>>2]=b;if((e|0)==0|(b|0)!=0){i=f;return}oc[c[(c[e>>2]|0)+4>>2]&2047](e);i=f;return}function Tx(a){a=a|0;a=a+-16|0;_d(a,27876);c[a+56>>2]=12804;if(!(c[a+60>>2]|0))return;else Ha(74472,79014,56,74486)}function Ux(a){a=a|0;a=a+-16|0;_d(a,27876);c[a+56>>2]=12804;if(!(c[a+60>>2]|0)){P_(a);return}else Ha(74472,79014,56,74486)}function Vx(a,b){a=a|0;b=b|0;Rx(a+-16|0,b);return}function Wx(a,b){a=a|0;b=b|0;Sx(a+-16|0,b);return}function Xx(a){a=a|0;var b=0;b=c[(c[a>>2]|0)+-12>>2]|0;_d(a+b|0,27876);c[a+(b+56)>>2]=12804;if(!(c[a+(b+60)>>2]|0))return;else Ha(74472,79014,56,74486)}function Yx(a){a=a|0;var b=0,d=0;d=c[(c[a>>2]|0)+-12>>2]|0;b=a+d|0;_d(b,27876);c[a+(d+56)>>2]=12804;if(!(c[a+(d+60)>>2]|0)){P_(b);return}else Ha(74472,79014,56,74486)}function Zx(a){a=a|0;P_(a);return}function _x(b,d){b=b|0;d=d|0;var e=0,f=0;e=O_(64)|0;c[e+4>>2]=0;c[e+8>>2]=0;c[e+12>>2]=0;f=e+20|0;c[f>>2]=0;c[f+4>>2]=0;c[f+8>>2]=0;c[f+12>>2]=0;c[f+16>>2]=0;c[f+20>>2]=0;a[f+24>>0]=0;c[e+48>>2]=d;c[e>>2]=27912;c[e+56>>2]=28008;c[e+16>>2]=27980;c[e+52>>2]=38;c[e+60>>2]=2;f=c[(c[e>>2]|0)+-12>>2]|0;b=e+f|0;f=e+(f+4)|0;d=(c[f>>2]|0)+-1|0;c[f>>2]=d;if((b|0)==0|(d|0)!=0)return e|0;oc[c[(c[b>>2]|0)+4>>2]&2047](b);return e|0}function $x(a){a=a|0;_d(a,28024);c[a+56>>2]=12804;if(!(c[a+60>>2]|0))return;else Ha(74472,79014,56,74486)}function ay(a){a=a|0;$x(a);P_(a);return}function by(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;f=i;i=i+16|0;e=f;d=o$(b,1488,6576,-1)|0;if(!d){DF(a,b);i=f;return}c[e>>2]=a;if((a|0)!=0?(a=a+((c[(c[a>>2]|0)+-12>>2]|0)+4)|0,b=(c[a>>2]|0)+1|0,c[a>>2]=b,(b|0)==0):0)Ha(79054,79014,48,79068);pc[c[(c[d>>2]|0)+8>>2]&1023](d,e);d=c[e>>2]|0;if(!d){i=f;return}a=c[(c[d>>2]|0)+-12>>2]|0;e=d+a|0;a=d+(a+4)|0;b=(c[a>>2]|0)+-1|0;c[a>>2]=b;if((e|0)==0|(b|0)!=0){i=f;return}oc[c[(c[e>>2]|0)+4>>2]&2047](e);i=f;return}function cy(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;f=i;i=i+16|0;e=f;d=o$(b,1488,6576,-1)|0;if(!d){FF(a,b);i=f;return}c[e>>2]=a;if((a|0)!=0?(a=a+((c[(c[a>>2]|0)+-12>>2]|0)+4)|0,b=(c[a>>2]|0)+1|0,c[a>>2]=b,(b|0)==0):0)Ha(79054,79014,48,79068);pc[c[(c[d>>2]|0)+12>>2]&1023](d,e);d=c[e>>2]|0;if(!d){i=f;return}a=c[(c[d>>2]|0)+-12>>2]|0;e=d+a|0;a=d+(a+4)|0;b=(c[a>>2]|0)+-1|0;c[a>>2]=b;if((e|0)==0|(b|0)!=0){i=f;return}oc[c[(c[e>>2]|0)+4>>2]&2047](e);i=f;return}function dy(a){a=a|0;a=a+-16|0;_d(a,28024);c[a+56>>2]=12804;if(!(c[a+60>>2]|0))return;else Ha(74472,79014,56,74486)}function ey(a){a=a|0;a=a+-16|0;_d(a,28024);c[a+56>>2]=12804;if(!(c[a+60>>2]|0)){P_(a);return}else Ha(74472,79014,56,74486)}function fy(a,b){a=a|0;b=b|0;by(a+-16|0,b);return}function gy(a,b){a=a|0;b=b|0;cy(a+-16|0,b);return}function hy(a){a=a|0;var b=0;b=c[(c[a>>2]|0)+-12>>2]|0;_d(a+b|0,28024);c[a+(b+56)>>2]=12804;if(!(c[a+(b+60)>>2]|0))return;else Ha(74472,79014,56,74486)}function iy(a){a=a|0;var b=0,d=0;d=c[(c[a>>2]|0)+-12>>2]|0;b=a+d|0;_d(b,28024);c[a+(d+56)>>2]=12804;if(!(c[a+(d+60)>>2]|0)){P_(b);return}else Ha(74472,79014,56,74486)}function jy(a){a=a|0;P_(a);return}function ky(b,d){b=b|0;d=d|0;var e=0,f=0;e=O_(64)|0;c[e+4>>2]=0;c[e+8>>2]=0;c[e+12>>2]=0;f=e+20|0;c[f>>2]=0;c[f+4>>2]=0;c[f+8>>2]=0;c[f+12>>2]=0;c[f+16>>2]=0;c[f+20>>2]=0;a[f+24>>0]=0;c[e+48>>2]=d;c[e>>2]=28060;c[e+56>>2]=28156;c[e+16>>2]=28128;c[e+52>>2]=37;c[e+60>>2]=2;f=c[(c[e>>2]|0)+-12>>2]|0;b=e+f|0;f=e+(f+4)|0;d=(c[f>>2]|0)+-1|0;c[f>>2]=d;if((b|0)==0|(d|0)!=0)return e|0;oc[c[(c[b>>2]|0)+4>>2]&2047](b);return e|0}function ly(a){a=a|0;_d(a,28172);c[a+56>>2]=12804;if(!(c[a+60>>2]|0))return;else Ha(74472,79014,56,74486)}function my(a){a=a|0;ly(a);P_(a);return}function ny(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;f=i;i=i+16|0;e=f;d=o$(b,1488,6632,-1)|0;if(!d){DF(a,b);i=f;return}c[e>>2]=a;if((a|0)!=0?(a=a+((c[(c[a>>2]|0)+-12>>2]|0)+4)|0,b=(c[a>>2]|0)+1|0,c[a>>2]=b,(b|0)==0):0)Ha(79054,79014,48,79068);pc[c[(c[d>>2]|0)+8>>2]&1023](d,e);d=c[e>>2]|0;if(!d){i=f;return}a=c[(c[d>>2]|0)+-12>>2]|0;e=d+a|0;a=d+(a+4)|0;b=(c[a>>2]|0)+-1|0;c[a>>2]=b;if((e|0)==0|(b|0)!=0){i=f;return}oc[c[(c[e>>2]|0)+4>>2]&2047](e);i=f;return}function oy(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;f=i;i=i+16|0;e=f;d=o$(b,1488,6632,-1)|0;if(!d){FF(a,b);i=f;return}c[e>>2]=a;if((a|0)!=0?(a=a+((c[(c[a>>2]|0)+-12>>2]|0)+4)|0,b=(c[a>>2]|0)+1|0,c[a>>2]=b,(b|0)==0):0)Ha(79054,79014,48,79068);pc[c[(c[d>>2]|0)+12>>2]&1023](d,e);d=c[e>>2]|0;if(!d){i=f;return}a=c[(c[d>>2]|0)+-12>>2]|0;e=d+a|0;a=d+(a+4)|0;b=(c[a>>2]|0)+-1|0;c[a>>2]=b;if((e|0)==0|(b|0)!=0){i=f;return}oc[c[(c[e>>2]|0)+4>>2]&2047](e);i=f;return}function py(a){a=a|0;a=a+-16|0;_d(a,28172);c[a+56>>2]=12804;if(!(c[a+60>>2]|0))return;else Ha(74472,79014,56,74486)}function qy(a){a=a|0;a=a+-16|0;_d(a,28172);c[a+56>>2]=12804;if(!(c[a+60>>2]|0)){P_(a);return}else Ha(74472,79014,56,74486)}function ry(a,b){a=a|0;b=b|0;ny(a+-16|0,b);return}function sy(a,b){a=a|0;b=b|0;oy(a+-16|0,b);return}function ty(a){a=a|0;var b=0;b=c[(c[a>>2]|0)+-12>>2]|0;_d(a+b|0,28172);c[a+(b+56)>>2]=12804;if(!(c[a+(b+60)>>2]|0))return;else Ha(74472,79014,56,74486)}function uy(a){a=a|0;var b=0,d=0;d=c[(c[a>>2]|0)+-12>>2]|0;b=a+d|0;_d(b,28172);c[a+(d+56)>>2]=12804;if(!(c[a+(d+60)>>2]|0)){P_(b);return}else Ha(74472,79014,56,74486)}function vy(a){a=a|0;P_(a);return}function wy(b,d){b=b|0;d=d|0;var e=0,f=0;e=O_(64)|0;c[e+4>>2]=0;c[e+8>>2]=0;c[e+12>>2]=0;f=e+20|0;c[f>>2]=0;c[f+4>>2]=0;c[f+8>>2]=0;c[f+12>>2]=0;c[f+16>>2]=0;c[f+20>>2]=0;a[f+24>>0]=0;c[e+48>>2]=d;c[e>>2]=28208;c[e+56>>2]=28304;c[e+16>>2]=28276;c[e+52>>2]=36;c[e+60>>2]=2;f=c[(c[e>>2]|0)+-12>>2]|0;b=e+f|0;f=e+(f+4)|0;d=(c[f>>2]|0)+-1|0;c[f>>2]=d;if((b|0)==0|(d|0)!=0)return e|0;oc[c[(c[b>>2]|0)+4>>2]&2047](b);return e|0}function xy(a){a=a|0;_d(a,28320);c[a+56>>2]=12804;if(!(c[a+60>>2]|0))return;else Ha(74472,79014,56,74486)}function yy(a){a=a|0;xy(a);P_(a);return}function zy(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;f=i;i=i+16|0;e=f;d=o$(b,1488,6688,-1)|0;if(!d){DF(a,b);i=f;return}c[e>>2]=a;if((a|0)!=0?(a=a+((c[(c[a>>2]|0)+-12>>2]|0)+4)|0,b=(c[a>>2]|0)+1|0,c[a>>2]=b,(b|0)==0):0)Ha(79054,79014,48,79068);pc[c[(c[d>>2]|0)+8>>2]&1023](d,e);d=c[e>>2]|0;if(!d){i=f;return}a=c[(c[d>>2]|0)+-12>>2]|0;e=d+a|0;a=d+(a+4)|0;b=(c[a>>2]|0)+-1|0;c[a>>2]=b;if((e|0)==0|(b|0)!=0){i=f;return}oc[c[(c[e>>2]|0)+4>>2]&2047](e);i=f;return}function Ay(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;f=i;i=i+16|0;e=f;d=o$(b,1488,6688,-1)|0;if(!d){FF(a,b);i=f;return}c[e>>2]=a;if((a|0)!=0?(a=a+((c[(c[a>>2]|0)+-12>>2]|0)+4)|0,b=(c[a>>2]|0)+1|0,c[a>>2]=b,(b|0)==0):0)Ha(79054,79014,48,79068);pc[c[(c[d>>2]|0)+12>>2]&1023](d,e);d=c[e>>2]|0;if(!d){i=f;return}a=c[(c[d>>2]|0)+-12>>2]|0;e=d+a|0;a=d+(a+4)|0;b=(c[a>>2]|0)+-1|0;c[a>>2]=b;if((e|0)==0|(b|0)!=0){i=f;return}oc[c[(c[e>>2]|0)+4>>2]&2047](e);i=f;return}function By(a){a=a|0;a=a+-16|0;_d(a,28320);c[a+56>>2]=12804;if(!(c[a+60>>2]|0))return;else Ha(74472,79014,56,74486)}function Cy(a){a=a|0;a=a+-16|0;_d(a,28320);c[a+56>>2]=12804;if(!(c[a+60>>2]|0)){P_(a);return}else Ha(74472,79014,56,74486)}function Dy(a,b){a=a|0;b=b|0;zy(a+-16|0,b);return}function Ey(a,b){a=a|0;b=b|0;Ay(a+-16|0,b);return}function Fy(a){a=a|0;var b=0;b=c[(c[a>>2]|0)+-12>>2]|0;_d(a+b|0,28320);c[a+(b+56)>>2]=12804;if(!(c[a+(b+60)>>2]|0))return;else Ha(74472,79014,56,74486)}function Gy(a){a=a|0;var b=0,d=0;d=c[(c[a>>2]|0)+-12>>2]|0;b=a+d|0;_d(b,28320);c[a+(d+56)>>2]=12804;if(!(c[a+(d+60)>>2]|0)){P_(b);return}else Ha(74472,79014,56,74486)}function Hy(a){a=a|0;P_(a);return}function Iy(b,d){b=b|0;d=d|0;var e=0,f=0;e=O_(64)|0;c[e+4>>2]=0;c[e+8>>2]=0;c[e+12>>2]=0;f=e+20|0;c[f>>2]=0;c[f+4>>2]=0;c[f+8>>2]=0;c[f+12>>2]=0;c[f+16>>2]=0;c[f+20>>2]=0;a[f+24>>0]=0;c[e+48>>2]=d;c[e>>2]=28356;c[e+56>>2]=28452;c[e+16>>2]=28424;c[e+52>>2]=35;c[e+60>>2]=2;f=c[(c[e>>2]|0)+-12>>2]|0;b=e+f|0;f=e+(f+4)|0;d=(c[f>>2]|0)+-1|0;c[f>>2]=d;if((b|0)==0|(d|0)!=0)return e|0;oc[c[(c[b>>2]|0)+4>>2]&2047](b);return e|0}function Jy(a){a=a|0;_d(a,28468);c[a+56>>2]=12804;if(!(c[a+60>>2]|0))return;else Ha(74472,79014,56,74486)}function Ky(a){a=a|0;Jy(a);P_(a);return}function Ly(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;f=i;i=i+16|0;e=f;d=o$(b,1488,6744,-1)|0;if(!d){DF(a,b);i=f;return}c[e>>2]=a;if((a|0)!=0?(a=a+((c[(c[a>>2]|0)+-12>>2]|0)+4)|0,b=(c[a>>2]|0)+1|0,c[a>>2]=b,(b|0)==0):0)Ha(79054,79014,48,79068);pc[c[(c[d>>2]|0)+8>>2]&1023](d,e);d=c[e>>2]|0;if(!d){i=f;return}a=c[(c[d>>2]|0)+-12>>2]|0;e=d+a|0;a=d+(a+4)|0;b=(c[a>>2]|0)+-1|0;c[a>>2]=b;if((e|0)==0|(b|0)!=0){i=f;return}oc[c[(c[e>>2]|0)+4>>2]&2047](e);i=f;return}function My(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;f=i;i=i+16|0;e=f;d=o$(b,1488,6744,-1)|0;if(!d){FF(a,b);i=f;return}c[e>>2]=a;if((a|0)!=0?(a=a+((c[(c[a>>2]|0)+-12>>2]|0)+4)|0,b=(c[a>>2]|0)+1|0,c[a>>2]=b,(b|0)==0):0)Ha(79054,79014,48,79068);pc[c[(c[d>>2]|0)+12>>2]&1023](d,e);d=c[e>>2]|0;if(!d){i=f;return}a=c[(c[d>>2]|0)+-12>>2]|0;e=d+a|0;a=d+(a+4)|0;b=(c[a>>2]|0)+-1|0;c[a>>2]=b;if((e|0)==0|(b|0)!=0){i=f;return}oc[c[(c[e>>2]|0)+4>>2]&2047](e);i=f;return}function Ny(a){a=a|0;a=a+-16|0;_d(a,28468);c[a+56>>2]=12804;if(!(c[a+60>>2]|0))return;else Ha(74472,79014,56,74486)}function Oy(a){a=a|0;a=a+-16|0;_d(a,28468);c[a+56>>2]=12804;if(!(c[a+60>>2]|0)){P_(a);return}else Ha(74472,79014,56,74486)}function Py(a,b){a=a|0;b=b|0;Ly(a+-16|0,b);return}function Qy(a,b){a=a|0;b=b|0;My(a+-16|0,b);return}function Ry(a){a=a|0;var b=0;b=c[(c[a>>2]|0)+-12>>2]|0;_d(a+b|0,28468);c[a+(b+56)>>2]=12804;if(!(c[a+(b+60)>>2]|0))return;else Ha(74472,79014,56,74486)}function Sy(a){a=a|0;var b=0,d=0;d=c[(c[a>>2]|0)+-12>>2]|0;b=a+d|0;_d(b,28468);c[a+(d+56)>>2]=12804;if(!(c[a+(d+60)>>2]|0)){P_(b);return}else Ha(74472,79014,56,74486)}function Ty(a){a=a|0;P_(a);return}function Uy(b,d){b=b|0;d=d|0;var e=0,f=0;e=O_(64)|0;c[e+4>>2]=0;c[e+8>>2]=0;c[e+12>>2]=0;f=e+20|0;c[f>>2]=0;c[f+4>>2]=0;c[f+8>>2]=0;c[f+12>>2]=0;c[f+16>>2]=0;c[f+20>>2]=0;a[f+24>>0]=0;c[e+48>>2]=d;c[e>>2]=28504;c[e+56>>2]=28600;c[e+16>>2]=28572;c[e+52>>2]=34;c[e+60>>2]=2;f=c[(c[e>>2]|0)+-12>>2]|0;b=e+f|0;f=e+(f+4)|0;d=(c[f>>2]|0)+-1|0;c[f>>2]=d;if((b|0)==0|(d|0)!=0)return e|0;oc[c[(c[b>>2]|0)+4>>2]&2047](b);return e|0}function Vy(a){a=a|0;_d(a,28616);c[a+56>>2]=12804;if(!(c[a+60>>2]|0))return;else Ha(74472,79014,56,74486)}function Wy(a){a=a|0;Vy(a);P_(a);return}function Xy(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;f=i;i=i+16|0;e=f;d=o$(b,1488,6800,-1)|0;if(!d){DF(a,b);i=f;return}c[e>>2]=a;if((a|0)!=0?(a=a+((c[(c[a>>2]|0)+-12>>2]|0)+4)|0,b=(c[a>>2]|0)+1|0,c[a>>2]=b,(b|0)==0):0)Ha(79054,79014,48,79068);pc[c[(c[d>>2]|0)+8>>2]&1023](d,e);d=c[e>>2]|0;if(!d){i=f;return}a=c[(c[d>>2]|0)+-12>>2]|0;e=d+a|0;a=d+(a+4)|0;b=(c[a>>2]|0)+-1|0;c[a>>2]=b;if((e|0)==0|(b|0)!=0){i=f;return}oc[c[(c[e>>2]|0)+4>>2]&2047](e);i=f;return}function Yy(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;f=i;i=i+16|0;e=f;d=o$(b,1488,6800,-1)|0;if(!d){FF(a,b);i=f;return}c[e>>2]=a;if((a|0)!=0?(a=a+((c[(c[a>>2]|0)+-12>>2]|0)+4)|0,b=(c[a>>2]|0)+1|0,c[a>>2]=b,(b|0)==0):0)Ha(79054,79014,48,79068);pc[c[(c[d>>2]|0)+12>>2]&1023](d,e);d=c[e>>2]|0;if(!d){i=f;return}a=c[(c[d>>2]|0)+-12>>2]|0;e=d+a|0;a=d+(a+4)|0;b=(c[a>>2]|0)+-1|0;c[a>>2]=b;if((e|0)==0|(b|0)!=0){i=f;return}oc[c[(c[e>>2]|0)+4>>2]&2047](e);i=f;return}function Zy(a){a=a|0;a=a+-16|0;_d(a,28616);c[a+56>>2]=12804;if(!(c[a+60>>2]|0))return;else Ha(74472,79014,56,74486)}function _y(a){a=a|0;a=a+-16|0;_d(a,28616);c[a+56>>2]=12804;if(!(c[a+60>>2]|0)){P_(a);return}else Ha(74472,79014,56,74486)}function $y(a,b){a=a|0;b=b|0;Xy(a+-16|0,b);return}function az(a,b){a=a|0;b=b|0;Yy(a+-16|0,b);return}function bz(a){a=a|0;var b=0;b=c[(c[a>>2]|0)+-12>>2]|0;_d(a+b|0,28616);c[a+(b+56)>>2]=12804;if(!(c[a+(b+60)>>2]|0))return;else Ha(74472,79014,56,74486)}function cz(a){a=a|0;var b=0,d=0;d=c[(c[a>>2]|0)+-12>>2]|0;b=a+d|0;_d(b,28616);c[a+(d+56)>>2]=12804;if(!(c[a+(d+60)>>2]|0)){P_(b);return}else Ha(74472,79014,56,74486)}function dz(a){a=a|0;P_(a);return}function ez(b,d){b=b|0;d=d|0;var e=0,f=0;e=O_(64)|0;c[e+4>>2]=0;c[e+8>>2]=0;c[e+12>>2]=0;f=e+20|0;c[f>>2]=0;c[f+4>>2]=0;c[f+8>>2]=0;c[f+12>>2]=0;c[f+16>>2]=0;c[f+20>>2]=0;a[f+24>>0]=0;c[e+48>>2]=d;c[e>>2]=28652;c[e+56>>2]=28748;c[e+16>>2]=28720;c[e+52>>2]=33;c[e+60>>2]=2;f=c[(c[e>>2]|0)+-12>>2]|0;b=e+f|0;f=e+(f+4)|0;d=(c[f>>2]|0)+-1|0;c[f>>2]=d;if((b|0)==0|(d|0)!=0)return e|0;oc[c[(c[b>>2]|0)+4>>2]&2047](b);return e|0}function fz(a){a=a|0;_d(a,28764);c[a+56>>2]=12804;if(!(c[a+60>>2]|0))return;else Ha(74472,79014,56,74486)}function gz(a){a=a|0;fz(a);P_(a);return}function hz(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;f=i;i=i+16|0;e=f;d=o$(b,1488,6856,-1)|0;if(!d){DF(a,b);i=f;return}c[e>>2]=a;if((a|0)!=0?(a=a+((c[(c[a>>2]|0)+-12>>2]|0)+4)|0,b=(c[a>>2]|0)+1|0,c[a>>2]=b,(b|0)==0):0)Ha(79054,79014,48,79068);pc[c[(c[d>>2]|0)+8>>2]&1023](d,e);d=c[e>>2]|0;if(!d){i=f;return}a=c[(c[d>>2]|0)+-12>>2]|0;e=d+a|0;a=d+(a+4)|0;b=(c[a>>2]|0)+-1|0;c[a>>2]=b;if((e|0)==0|(b|0)!=0){i=f;return}oc[c[(c[e>>2]|0)+4>>2]&2047](e);i=f;return}function iz(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;f=i;i=i+16|0;e=f;d=o$(b,1488,6856,-1)|0;if(!d){FF(a,b);i=f;return}c[e>>2]=a;if((a|0)!=0?(a=a+((c[(c[a>>2]|0)+-12>>2]|0)+4)|0,b=(c[a>>2]|0)+1|0,c[a>>2]=b,(b|0)==0):0)Ha(79054,79014,48,79068);pc[c[(c[d>>2]|0)+12>>2]&1023](d,e);d=c[e>>2]|0;if(!d){i=f;return}a=c[(c[d>>2]|0)+-12>>2]|0;e=d+a|0;a=d+(a+4)|0;b=(c[a>>2]|0)+-1|0;c[a>>2]=b;if((e|0)==0|(b|0)!=0){i=f;return}oc[c[(c[e>>2]|0)+4>>2]&2047](e);i=f;return}function jz(a){a=a|0;a=a+-16|0;_d(a,28764);c[a+56>>2]=12804;if(!(c[a+60>>2]|0))return;else Ha(74472,79014,56,74486)}function kz(a){a=a|0;a=a+-16|0;_d(a,28764);c[a+56>>2]=12804;if(!(c[a+60>>2]|0)){P_(a);return}else Ha(74472,79014,56,74486)}function lz(a,b){a=a|0;b=b|0;hz(a+-16|0,b);return}function mz(a,b){a=a|0;b=b|0;iz(a+-16|0,b);return}function nz(a){a=a|0;var b=0;b=c[(c[a>>2]|0)+-12>>2]|0;_d(a+b|0,28764);c[a+(b+56)>>2]=12804;if(!(c[a+(b+60)>>2]|0))return;else Ha(74472,79014,56,74486)}function oz(a){a=a|0;var b=0,d=0;d=c[(c[a>>2]|0)+-12>>2]|0;b=a+d|0;_d(b,28764);c[a+(d+56)>>2]=12804;if(!(c[a+(d+60)>>2]|0)){P_(b);return}else Ha(74472,79014,56,74486)}function pz(a){a=a|0;P_(a);return}function qz(b,d){b=b|0;d=d|0;var e=0,f=0;e=O_(64)|0;c[e+4>>2]=0;c[e+8>>2]=0;c[e+12>>2]=0;f=e+20|0;c[f>>2]=0;c[f+4>>2]=0;c[f+8>>2]=0;c[f+12>>2]=0;c[f+16>>2]=0;c[f+20>>2]=0;a[f+24>>0]=0;c[e+48>>2]=d;c[e>>2]=28800;c[e+56>>2]=28896;c[e+16>>2]=28868;c[e+52>>2]=32;c[e+60>>2]=2;f=c[(c[e>>2]|0)+-12>>2]|0;b=e+f|0;f=e+(f+4)|0;d=(c[f>>2]|0)+-1|0;c[f>>2]=d;if((b|0)==0|(d|0)!=0)return e|0;oc[c[(c[b>>2]|0)+4>>2]&2047](b);return e|0}function rz(a){a=a|0;_d(a,28912);c[a+56>>2]=12804;if(!(c[a+60>>2]|0))return;else Ha(74472,79014,56,74486)}function sz(a){a=a|0;rz(a);P_(a);return}function tz(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;f=i;i=i+16|0;e=f;d=o$(b,1488,6912,-1)|0;if(!d){DF(a,b);i=f;return}c[e>>2]=a;if((a|0)!=0?(a=a+((c[(c[a>>2]|0)+-12>>2]|0)+4)|0,b=(c[a>>2]|0)+1|0,c[a>>2]=b,(b|0)==0):0)Ha(79054,79014,48,79068);pc[c[(c[d>>2]|0)+8>>2]&1023](d,e);d=c[e>>2]|0;if(!d){i=f;return}a=c[(c[d>>2]|0)+-12>>2]|0;e=d+a|0;a=d+(a+4)|0;b=(c[a>>2]|0)+-1|0;c[a>>2]=b;if((e|0)==0|(b|0)!=0){i=f;return}oc[c[(c[e>>2]|0)+4>>2]&2047](e);i=f;return}function uz(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;f=i;i=i+16|0;e=f;d=o$(b,1488,6912,-1)|0;if(!d){FF(a,b);i=f;return}c[e>>2]=a;if((a|0)!=0?(a=a+((c[(c[a>>2]|0)+-12>>2]|0)+4)|0,b=(c[a>>2]|0)+1|0,c[a>>2]=b,(b|0)==0):0)Ha(79054,79014,48,79068);pc[c[(c[d>>2]|0)+12>>2]&1023](d,e);d=c[e>>2]|0;if(!d){i=f;return}a=c[(c[d>>2]|0)+-12>>2]|0;e=d+a|0;a=d+(a+4)|0;b=(c[a>>2]|0)+-1|0;c[a>>2]=b;if((e|0)==0|(b|0)!=0){i=f;return}oc[c[(c[e>>2]|0)+4>>2]&2047](e);i=f;return}function vz(a){a=a|0;a=a+-16|0;_d(a,28912);c[a+56>>2]=12804;if(!(c[a+60>>2]|0))return;else Ha(74472,79014,56,74486)}function wz(a){a=a|0;a=a+-16|0;_d(a,28912);c[a+56>>2]=12804;if(!(c[a+60>>2]|0)){P_(a);return}else Ha(74472,79014,56,74486)}function xz(a,b){a=a|0;b=b|0;tz(a+-16|0,b);return}function yz(a,b){a=a|0;b=b|0;uz(a+-16|0,b);return}function zz(a){a=a|0;var b=0;b=c[(c[a>>2]|0)+-12>>2]|0;_d(a+b|0,28912);c[a+(b+56)>>2]=12804;if(!(c[a+(b+60)>>2]|0))return;else Ha(74472,79014,56,74486)}function Az(a){a=a|0;var b=0,d=0;d=c[(c[a>>2]|0)+-12>>2]|0;b=a+d|0;_d(b,28912);c[a+(d+56)>>2]=12804;if(!(c[a+(d+60)>>2]|0)){P_(b);return}else Ha(74472,79014,56,74486)}function Bz(a){a=a|0;P_(a);return}function Cz(b,d){b=b|0;d=d|0;var e=0,f=0;e=O_(64)|0;c[e+4>>2]=0;c[e+8>>2]=0;c[e+12>>2]=0;f=e+20|0;c[f>>2]=0;c[f+4>>2]=0;c[f+8>>2]=0;c[f+12>>2]=0;c[f+16>>2]=0;c[f+20>>2]=0;a[f+24>>0]=0;c[e+48>>2]=d;c[e>>2]=28948;c[e+56>>2]=29044;c[e+16>>2]=29016;c[e+52>>2]=31;c[e+60>>2]=2;f=c[(c[e>>2]|0)+-12>>2]|0;b=e+f|0;f=e+(f+4)|0;d=(c[f>>2]|0)+-1|0;c[f>>2]=d;if((b|0)==0|(d|0)!=0)return e|0;oc[c[(c[b>>2]|0)+4>>2]&2047](b);return e|0}function Dz(a){a=a|0;_d(a,29060);c[a+56>>2]=12804;if(!(c[a+60>>2]|0))return;else Ha(74472,79014,56,74486)}function Ez(a){a=a|0;Dz(a);P_(a);return}function Fz(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;f=i;i=i+16|0;e=f;d=o$(b,1488,6968,-1)|0;if(!d){DF(a,b);i=f;return}c[e>>2]=a;if((a|0)!=0?(a=a+((c[(c[a>>2]|0)+-12>>2]|0)+4)|0,b=(c[a>>2]|0)+1|0,c[a>>2]=b,(b|0)==0):0)Ha(79054,79014,48,79068);pc[c[(c[d>>2]|0)+8>>2]&1023](d,e);d=c[e>>2]|0;if(!d){i=f;return}a=c[(c[d>>2]|0)+-12>>2]|0;e=d+a|0;a=d+(a+4)|0;b=(c[a>>2]|0)+-1|0;c[a>>2]=b;if((e|0)==0|(b|0)!=0){i=f;return}oc[c[(c[e>>2]|0)+4>>2]&2047](e);i=f;return}function Gz(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;f=i;i=i+16|0;e=f;d=o$(b,1488,6968,-1)|0;if(!d){FF(a,b);i=f;return}c[e>>2]=a;if((a|0)!=0?(a=a+((c[(c[a>>2]|0)+-12>>2]|0)+4)|0,b=(c[a>>2]|0)+1|0,c[a>>2]=b,(b|0)==0):0)Ha(79054,79014,48,79068);pc[c[(c[d>>2]|0)+12>>2]&1023](d,e);d=c[e>>2]|0;if(!d){i=f;return}a=c[(c[d>>2]|0)+-12>>2]|0;e=d+a|0;a=d+(a+4)|0;b=(c[a>>2]|0)+-1|0;c[a>>2]=b;if((e|0)==0|(b|0)!=0){i=f;return}oc[c[(c[e>>2]|0)+4>>2]&2047](e);i=f;return}function Hz(a){a=a|0;a=a+-16|0;_d(a,29060);c[a+56>>2]=12804;if(!(c[a+60>>2]|0))return;else Ha(74472,79014,56,74486)}function Iz(a){a=a|0;a=a+-16|0;_d(a,29060);c[a+56>>2]=12804;if(!(c[a+60>>2]|0)){P_(a);return}else Ha(74472,79014,56,74486)}function Jz(a,b){a=a|0;b=b|0;Fz(a+-16|0,b);return}function Kz(a,b){a=a|0;b=b|0;Gz(a+-16|0,b);return}function Lz(a){a=a|0;var b=0;b=c[(c[a>>2]|0)+-12>>2]|0;_d(a+b|0,29060);c[a+(b+56)>>2]=12804;if(!(c[a+(b+60)>>2]|0))return;else Ha(74472,79014,56,74486)}function Mz(a){a=a|0;var b=0,d=0;d=c[(c[a>>2]|0)+-12>>2]|0;b=a+d|0;_d(b,29060);c[a+(d+56)>>2]=12804;if(!(c[a+(d+60)>>2]|0)){P_(b);return}else Ha(74472,79014,56,74486)}function Nz(a){a=a|0;P_(a);return}function Oz(b,d){b=b|0;d=d|0;var e=0,f=0;e=O_(64)|0;c[e+4>>2]=0;c[e+8>>2]=0;c[e+12>>2]=0;f=e+20|0;c[f>>2]=0;c[f+4>>2]=0;c[f+8>>2]=0;c[f+12>>2]=0;c[f+16>>2]=0;c[f+20>>2]=0;a[f+24>>0]=0;c[e+48>>2]=d;c[e>>2]=29096;c[e+56>>2]=29192;c[e+16>>2]=29164;c[e+52>>2]=30;c[e+60>>2]=2;f=c[(c[e>>2]|0)+-12>>2]|0;b=e+f|0;f=e+(f+4)|0;d=(c[f>>2]|0)+-1|0;c[f>>2]=d;if((b|0)==0|(d|0)!=0)return e|0;oc[c[(c[b>>2]|0)+4>>2]&2047](b);return e|0}function Pz(a){a=a|0;_d(a,29208);c[a+56>>2]=12804;if(!(c[a+60>>2]|0))return;else Ha(74472,79014,56,74486)}function Qz(a){a=a|0;Pz(a);P_(a);return}function Rz(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;f=i;i=i+16|0;e=f;d=o$(b,1488,7024,-1)|0;if(!d){DF(a,b);i=f;return}c[e>>2]=a;if((a|0)!=0?(a=a+((c[(c[a>>2]|0)+-12>>2]|0)+4)|0,b=(c[a>>2]|0)+1|0,c[a>>2]=b,(b|0)==0):0)Ha(79054,79014,48,79068);pc[c[(c[d>>2]|0)+8>>2]&1023](d,e);d=c[e>>2]|0;if(!d){i=f;return}a=c[(c[d>>2]|0)+-12>>2]|0;e=d+a|0;a=d+(a+4)|0;b=(c[a>>2]|0)+-1|0;c[a>>2]=b;if((e|0)==0|(b|0)!=0){i=f;return}oc[c[(c[e>>2]|0)+4>>2]&2047](e);i=f;return}function Sz(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;f=i;i=i+16|0;e=f;d=o$(b,1488,7024,-1)|0;if(!d){FF(a,b);i=f;return}c[e>>2]=a;if((a|0)!=0?(a=a+((c[(c[a>>2]|0)+-12>>2]|0)+4)|0,b=(c[a>>2]|0)+1|0,c[a>>2]=b,(b|0)==0):0)Ha(79054,79014,48,79068);pc[c[(c[d>>2]|0)+12>>2]&1023](d,e);d=c[e>>2]|0;if(!d){i=f;return}a=c[(c[d>>2]|0)+-12>>2]|0;e=d+a|0;a=d+(a+4)|0;b=(c[a>>2]|0)+-1|0;c[a>>2]=b;if((e|0)==0|(b|0)!=0){i=f;return}oc[c[(c[e>>2]|0)+4>>2]&2047](e);i=f;return}function Tz(a){a=a|0;a=a+-16|0;_d(a,29208);c[a+56>>2]=12804;if(!(c[a+60>>2]|0))return;else Ha(74472,79014,56,74486)}function Uz(a){a=a|0;a=a+-16|0;_d(a,29208);c[a+56>>2]=12804;if(!(c[a+60>>2]|0)){P_(a);return}else Ha(74472,79014,56,74486)}function Vz(a,b){a=a|0;b=b|0;Rz(a+-16|0,b);return}function Wz(a,b){a=a|0;b=b|0;Sz(a+-16|0,b);return}function Xz(a){a=a|0;var b=0;b=c[(c[a>>2]|0)+-12>>2]|0;_d(a+b|0,29208);c[a+(b+56)>>2]=12804;if(!(c[a+(b+60)>>2]|0))return;else Ha(74472,79014,56,74486)}function Yz(a){a=a|0;var b=0,d=0;d=c[(c[a>>2]|0)+-12>>2]|0;b=a+d|0;_d(b,29208);c[a+(d+56)>>2]=12804;if(!(c[a+(d+60)>>2]|0)){P_(b);return}else Ha(74472,79014,56,74486)}function Zz(a){a=a|0;P_(a);return}function _z(b,d){b=b|0;d=d|0;var e=0,f=0;e=O_(64)|0;c[e+4>>2]=0;c[e+8>>2]=0;c[e+12>>2]=0;f=e+20|0;c[f>>2]=0;c[f+4>>2]=0;c[f+8>>2]=0;c[f+12>>2]=0;c[f+16>>2]=0;c[f+20>>2]=0;a[f+24>>0]=0;c[e+48>>2]=d;c[e>>2]=29244;c[e+56>>2]=29340;c[e+16>>2]=29312;c[e+52>>2]=29;c[e+60>>2]=2;f=c[(c[e>>2]|0)+-12>>2]|0;b=e+f|0;f=e+(f+4)|0;d=(c[f>>2]|0)+-1|0;c[f>>2]=d;if((b|0)==0|(d|0)!=0)return e|0;oc[c[(c[b>>2]|0)+4>>2]&2047](b);return e|0}function $z(a){a=a|0;_d(a,29356);c[a+56>>2]=12804;if(!(c[a+60>>2]|0))return;else Ha(74472,79014,56,74486)}function aA(a){a=a|0;$z(a);P_(a);return}function bA(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;f=i;i=i+16|0;e=f;d=o$(b,1488,7080,-1)|0;if(!d){DF(a,b);i=f;return}c[e>>2]=a;if((a|0)!=0?(a=a+((c[(c[a>>2]|0)+-12>>2]|0)+4)|0,b=(c[a>>2]|0)+1|0,c[a>>2]=b,(b|0)==0):0)Ha(79054,79014,48,79068);pc[c[(c[d>>2]|0)+8>>2]&1023](d,e);d=c[e>>2]|0;if(!d){i=f;return}a=c[(c[d>>2]|0)+-12>>2]|0;e=d+a|0;a=d+(a+4)|0;b=(c[a>>2]|0)+-1|0;c[a>>2]=b;if((e|0)==0|(b|0)!=0){i=f;return}oc[c[(c[e>>2]|0)+4>>2]&2047](e);i=f;return}function cA(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;f=i;i=i+16|0;e=f;d=o$(b,1488,7080,-1)|0;if(!d){FF(a,b);i=f;return}c[e>>2]=a;if((a|0)!=0?(a=a+((c[(c[a>>2]|0)+-12>>2]|0)+4)|0,b=(c[a>>2]|0)+1|0,c[a>>2]=b,(b|0)==0):0)Ha(79054,79014,48,79068);pc[c[(c[d>>2]|0)+12>>2]&1023](d,e);d=c[e>>2]|0;if(!d){i=f;return}a=c[(c[d>>2]|0)+-12>>2]|0;e=d+a|0;a=d+(a+4)|0;b=(c[a>>2]|0)+-1|0;c[a>>2]=b;if((e|0)==0|(b|0)!=0){i=f;return}oc[c[(c[e>>2]|0)+4>>2]&2047](e);i=f;return}function dA(a){a=a|0;a=a+-16|0;_d(a,29356);c[a+56>>2]=12804;if(!(c[a+60>>2]|0))return;else Ha(74472,79014,56,74486)}function eA(a){a=a|0;a=a+-16|0;_d(a,29356);c[a+56>>2]=12804;if(!(c[a+60>>2]|0)){P_(a);return}else Ha(74472,79014,56,74486)}function fA(a,b){a=a|0;b=b|0;bA(a+-16|0,b);return}function gA(a,b){a=a|0;b=b|0;cA(a+-16|0,b);return}function hA(a){a=a|0;var b=0;b=c[(c[a>>2]|0)+-12>>2]|0;_d(a+b|0,29356);c[a+(b+56)>>2]=12804;if(!(c[a+(b+60)>>2]|0))return;else Ha(74472,79014,56,74486)}function iA(a){a=a|0;var b=0,d=0;d=c[(c[a>>2]|0)+-12>>2]|0;b=a+d|0;_d(b,29356);c[a+(d+56)>>2]=12804;if(!(c[a+(d+60)>>2]|0)){P_(b);return}else Ha(74472,79014,56,74486)}function jA(a){a=a|0;P_(a);return}function kA(b,d){b=b|0;d=d|0;var e=0,f=0;e=O_(64)|0;c[e+4>>2]=0;c[e+8>>2]=0;c[e+12>>2]=0;f=e+20|0;c[f>>2]=0;c[f+4>>2]=0;c[f+8>>2]=0;c[f+12>>2]=0;c[f+16>>2]=0;c[f+20>>2]=0;a[f+24>>0]=0;c[e+48>>2]=d;c[e>>2]=29392;c[e+56>>2]=29488;c[e+16>>2]=29460;c[e+52>>2]=28;c[e+60>>2]=2;f=c[(c[e>>2]|0)+-12>>2]|0;b=e+f|0;f=e+(f+4)|0;d=(c[f>>2]|0)+-1|0;c[f>>2]=d;if((b|0)==0|(d|0)!=0)return e|0;oc[c[(c[b>>2]|0)+4>>2]&2047](b);return e|0}function lA(a){a=a|0;_d(a,29504);c[a+56>>2]=12804;if(!(c[a+60>>2]|0))return;else Ha(74472,79014,56,74486)}function mA(a){a=a|0;lA(a);P_(a);return}function nA(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;f=i;i=i+16|0;e=f;d=o$(b,1488,7136,-1)|0;if(!d){DF(a,b);i=f;return}c[e>>2]=a;if((a|0)!=0?(a=a+((c[(c[a>>2]|0)+-12>>2]|0)+4)|0,b=(c[a>>2]|0)+1|0,c[a>>2]=b,(b|0)==0):0)Ha(79054,79014,48,79068);pc[c[(c[d>>2]|0)+8>>2]&1023](d,e);d=c[e>>2]|0;if(!d){i=f;return}a=c[(c[d>>2]|0)+-12>>2]|0;e=d+a|0;a=d+(a+4)|0;b=(c[a>>2]|0)+-1|0;c[a>>2]=b;if((e|0)==0|(b|0)!=0){i=f;return}oc[c[(c[e>>2]|0)+4>>2]&2047](e);i=f;return}function oA(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;f=i;i=i+16|0;e=f;d=o$(b,1488,7136,-1)|0;if(!d){FF(a,b);i=f;return}c[e>>2]=a;if((a|0)!=0?(a=a+((c[(c[a>>2]|0)+-12>>2]|0)+4)|0,b=(c[a>>2]|0)+1|0,c[a>>2]=b,(b|0)==0):0)Ha(79054,79014,48,79068);pc[c[(c[d>>2]|0)+12>>2]&1023](d,e);d=c[e>>2]|0;if(!d){i=f;return}a=c[(c[d>>2]|0)+-12>>2]|0;e=d+a|0;a=d+(a+4)|0;b=(c[a>>2]|0)+-1|0;c[a>>2]=b;if((e|0)==0|(b|0)!=0){i=f;return}oc[c[(c[e>>2]|0)+4>>2]&2047](e);i=f;return}function pA(a){a=a|0;a=a+-16|0;_d(a,29504);c[a+56>>2]=12804;if(!(c[a+60>>2]|0))return;else Ha(74472,79014,56,74486)}function qA(a){a=a|0;a=a+-16|0;_d(a,29504);c[a+56>>2]=12804;if(!(c[a+60>>2]|0)){P_(a);return}else Ha(74472,79014,56,74486)}function rA(a,b){a=a|0;b=b|0;nA(a+-16|0,b);return}function sA(a,b){a=a|0;b=b|0;oA(a+-16|0,b);return}function tA(a){a=a|0;var b=0;b=c[(c[a>>2]|0)+-12>>2]|0;_d(a+b|0,29504);c[a+(b+56)>>2]=12804;if(!(c[a+(b+60)>>2]|0))return;else Ha(74472,79014,56,74486)}function uA(a){a=a|0;var b=0,d=0;d=c[(c[a>>2]|0)+-12>>2]|0;b=a+d|0;_d(b,29504);c[a+(d+56)>>2]=12804;if(!(c[a+(d+60)>>2]|0)){P_(b);return}else Ha(74472,79014,56,74486)}function vA(a){a=a|0;P_(a);return}function wA(b,d){b=b|0;d=d|0;var e=0,f=0;e=O_(64)|0;c[e+4>>2]=0;c[e+8>>2]=0;c[e+12>>2]=0;f=e+20|0;c[f>>2]=0;c[f+4>>2]=0;c[f+8>>2]=0;c[f+12>>2]=0;c[f+16>>2]=0;c[f+20>>2]=0;a[f+24>>0]=0;c[e+48>>2]=d;c[e>>2]=29540;c[e+56>>2]=29636;c[e+16>>2]=29608;c[e+52>>2]=27;c[e+60>>2]=2;f=c[(c[e>>2]|0)+-12>>2]|0;b=e+f|0;f=e+(f+4)|0;d=(c[f>>2]|0)+-1|0;c[f>>2]=d;if((b|0)==0|(d|0)!=0)return e|0;oc[c[(c[b>>2]|0)+4>>2]&2047](b);return e|0}function xA(a){a=a|0;_d(a,29652);c[a+56>>2]=12804;if(!(c[a+60>>2]|0))return;else Ha(74472,79014,56,74486)}function yA(a){a=a|0;xA(a);P_(a);return}function zA(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;f=i;i=i+16|0;e=f;d=o$(b,1488,7192,-1)|0;if(!d){DF(a,b);i=f;return}c[e>>2]=a;if((a|0)!=0?(a=a+((c[(c[a>>2]|0)+-12>>2]|0)+4)|0,b=(c[a>>2]|0)+1|0,c[a>>2]=b,(b|0)==0):0)Ha(79054,79014,48,79068);pc[c[(c[d>>2]|0)+8>>2]&1023](d,e);d=c[e>>2]|0;if(!d){i=f;return}a=c[(c[d>>2]|0)+-12>>2]|0;e=d+a|0;a=d+(a+4)|0;b=(c[a>>2]|0)+-1|0;c[a>>2]=b;if((e|0)==0|(b|0)!=0){i=f;return}oc[c[(c[e>>2]|0)+4>>2]&2047](e);i=f;return}function AA(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;f=i;i=i+16|0;e=f;d=o$(b,1488,7192,-1)|0;if(!d){FF(a,b);i=f;return}c[e>>2]=a;if((a|0)!=0?(a=a+((c[(c[a>>2]|0)+-12>>2]|0)+4)|0,b=(c[a>>2]|0)+1|0,c[a>>2]=b,(b|0)==0):0)Ha(79054,79014,48,79068);pc[c[(c[d>>2]|0)+12>>2]&1023](d,e);d=c[e>>2]|0;if(!d){i=f;return}a=c[(c[d>>2]|0)+-12>>2]|0;e=d+a|0;a=d+(a+4)|0;b=(c[a>>2]|0)+-1|0;c[a>>2]=b;if((e|0)==0|(b|0)!=0){i=f;return}oc[c[(c[e>>2]|0)+4>>2]&2047](e);i=f;return}function BA(a){a=a|0;a=a+-16|0;_d(a,29652);c[a+56>>2]=12804;if(!(c[a+60>>2]|0))return;else Ha(74472,79014,56,74486)}function CA(a){a=a|0;a=a+-16|0;_d(a,29652);c[a+56>>2]=12804;if(!(c[a+60>>2]|0)){P_(a);return}else Ha(74472,79014,56,74486)}function DA(a,b){a=a|0;b=b|0;zA(a+-16|0,b);return}function EA(a,b){a=a|0;b=b|0;AA(a+-16|0,b);return}function FA(a){a=a|0;var b=0;b=c[(c[a>>2]|0)+-12>>2]|0;_d(a+b|0,29652);c[a+(b+56)>>2]=12804;if(!(c[a+(b+60)>>2]|0))return;else Ha(74472,79014,56,74486)}function GA(a){a=a|0;var b=0,d=0;d=c[(c[a>>2]|0)+-12>>2]|0;b=a+d|0;_d(b,29652);c[a+(d+56)>>2]=12804;if(!(c[a+(d+60)>>2]|0)){P_(b);return}else Ha(74472,79014,56,74486)}function HA(a){a=a|0;P_(a);return}function IA(b,d){b=b|0;d=d|0;var e=0,f=0;e=O_(64)|0;c[e+4>>2]=0;c[e+8>>2]=0;c[e+12>>2]=0;f=e+20|0;c[f>>2]=0;c[f+4>>2]=0;c[f+8>>2]=0;c[f+12>>2]=0;c[f+16>>2]=0;c[f+20>>2]=0;a[f+24>>0]=0;c[e+48>>2]=d;c[e>>2]=29688;c[e+56>>2]=29784;c[e+16>>2]=29756;c[e+52>>2]=26;c[e+60>>2]=2;f=c[(c[e>>2]|0)+-12>>2]|0;b=e+f|0;f=e+(f+4)|0;d=(c[f>>2]|0)+-1|0;c[f>>2]=d;if((b|0)==0|(d|0)!=0)return e|0;oc[c[(c[b>>2]|0)+4>>2]&2047](b);return e|0}function JA(a){a=a|0;_d(a,29800);c[a+56>>2]=12804;if(!(c[a+60>>2]|0))return;else Ha(74472,79014,56,74486)}function KA(a){a=a|0;JA(a);P_(a);return}function LA(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;f=i;i=i+16|0;e=f;d=o$(b,1488,7248,-1)|0;if(!d){DF(a,b);i=f;return}c[e>>2]=a;if((a|0)!=0?(a=a+((c[(c[a>>2]|0)+-12>>2]|0)+4)|0,b=(c[a>>2]|0)+1|0,c[a>>2]=b,(b|0)==0):0)Ha(79054,79014,48,79068);pc[c[(c[d>>2]|0)+8>>2]&1023](d,e);d=c[e>>2]|0;if(!d){i=f;return}a=c[(c[d>>2]|0)+-12>>2]|0;e=d+a|0;a=d+(a+4)|0;b=(c[a>>2]|0)+-1|0;c[a>>2]=b;if((e|0)==0|(b|0)!=0){i=f;return}oc[c[(c[e>>2]|0)+4>>2]&2047](e);i=f;return}function MA(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;f=i;i=i+16|0;e=f;d=o$(b,1488,7248,-1)|0;if(!d){FF(a,b);i=f;return}c[e>>2]=a;if((a|0)!=0?(a=a+((c[(c[a>>2]|0)+-12>>2]|0)+4)|0,b=(c[a>>2]|0)+1|0,c[a>>2]=b,(b|0)==0):0)Ha(79054,79014,48,79068);pc[c[(c[d>>2]|0)+12>>2]&1023](d,e);d=c[e>>2]|0;if(!d){i=f;return}a=c[(c[d>>2]|0)+-12>>2]|0;e=d+a|0;a=d+(a+4)|0;b=(c[a>>2]|0)+-1|0;c[a>>2]=b;if((e|0)==0|(b|0)!=0){i=f;return}oc[c[(c[e>>2]|0)+4>>2]&2047](e);i=f;return}function NA(a){a=a|0;a=a+-16|0;_d(a,29800);c[a+56>>2]=12804;if(!(c[a+60>>2]|0))return;else Ha(74472,79014,56,74486)}function OA(a){a=a|0;a=a+-16|0;_d(a,29800);c[a+56>>2]=12804;if(!(c[a+60>>2]|0)){P_(a);return}else Ha(74472,79014,56,74486)}function PA(a,b){a=a|0;b=b|0;LA(a+-16|0,b);return}function QA(a,b){a=a|0;b=b|0;MA(a+-16|0,b);return}function RA(a){a=a|0;var b=0;b=c[(c[a>>2]|0)+-12>>2]|0;_d(a+b|0,29800);c[a+(b+56)>>2]=12804;if(!(c[a+(b+60)>>2]|0))return;else Ha(74472,79014,56,74486)}function SA(a){a=a|0;var b=0,d=0;d=c[(c[a>>2]|0)+-12>>2]|0;b=a+d|0;_d(b,29800);c[a+(d+56)>>2]=12804;if(!(c[a+(d+60)>>2]|0)){P_(b);return}else Ha(74472,79014,56,74486)}function TA(a){a=a|0;P_(a);return}function UA(b,d){b=b|0;d=d|0;var e=0,f=0;e=O_(64)|0;c[e+4>>2]=0;c[e+8>>2]=0;c[e+12>>2]=0;f=e+20|0;c[f>>2]=0;c[f+4>>2]=0;c[f+8>>2]=0;c[f+12>>2]=0;c[f+16>>2]=0;c[f+20>>2]=0;a[f+24>>0]=0;c[e+48>>2]=d;c[e>>2]=29836;c[e+56>>2]=29932;c[e+16>>2]=29904;c[e+52>>2]=25;c[e+60>>2]=2;f=c[(c[e>>2]|0)+-12>>2]|0;b=e+f|0;f=e+(f+4)|0;d=(c[f>>2]|0)+-1|0;c[f>>2]=d;if((b|0)==0|(d|0)!=0)return e|0;oc[c[(c[b>>2]|0)+4>>2]&2047](b);return e|0}function VA(a){a=a|0;_d(a,29948);c[a+56>>2]=12804;if(!(c[a+60>>2]|0))return;else Ha(74472,79014,56,74486)}function WA(a){a=a|0;VA(a);P_(a);return}function XA(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;f=i;i=i+16|0;e=f;d=o$(b,1488,7304,-1)|0;if(!d){DF(a,b);i=f;return}c[e>>2]=a;if((a|0)!=0?(a=a+((c[(c[a>>2]|0)+-12>>2]|0)+4)|0,b=(c[a>>2]|0)+1|0,c[a>>2]=b,(b|0)==0):0)Ha(79054,79014,48,79068);pc[c[(c[d>>2]|0)+8>>2]&1023](d,e);d=c[e>>2]|0;if(!d){i=f;return}a=c[(c[d>>2]|0)+-12>>2]|0;e=d+a|0;a=d+(a+4)|0;b=(c[a>>2]|0)+-1|0;c[a>>2]=b;if((e|0)==0|(b|0)!=0){i=f;return}oc[c[(c[e>>2]|0)+4>>2]&2047](e);i=f;return}function YA(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;f=i;i=i+16|0;e=f;d=o$(b,1488,7304,-1)|0;if(!d){FF(a,b);i=f;return}c[e>>2]=a;if((a|0)!=0?(a=a+((c[(c[a>>2]|0)+-12>>2]|0)+4)|0,b=(c[a>>2]|0)+1|0,c[a>>2]=b,(b|0)==0):0)Ha(79054,79014,48,79068);pc[c[(c[d>>2]|0)+12>>2]&1023](d,e);d=c[e>>2]|0;if(!d){i=f;return}a=c[(c[d>>2]|0)+-12>>2]|0;e=d+a|0;a=d+(a+4)|0;b=(c[a>>2]|0)+-1|0;c[a>>2]=b;if((e|0)==0|(b|0)!=0){i=f;return}oc[c[(c[e>>2]|0)+4>>2]&2047](e);i=f;return}function ZA(a){a=a|0;a=a+-16|0;_d(a,29948);c[a+56>>2]=12804;if(!(c[a+60>>2]|0))return;else Ha(74472,79014,56,74486)}function _A(a){a=a|0;a=a+-16|0;_d(a,29948);c[a+56>>2]=12804;if(!(c[a+60>>2]|0)){P_(a);return}else Ha(74472,79014,56,74486)}function $A(a,b){a=a|0;b=b|0;XA(a+-16|0,b);return}function aB(a,b){a=a|0;b=b|0;YA(a+-16|0,b);return}function bB(a){a=a|0;var b=0;b=c[(c[a>>2]|0)+-12>>2]|0;_d(a+b|0,29948);c[a+(b+56)>>2]=12804;if(!(c[a+(b+60)>>2]|0))return;else Ha(74472,79014,56,74486)}function cB(a){a=a|0;var b=0,d=0;d=c[(c[a>>2]|0)+-12>>2]|0;b=a+d|0;_d(b,29948);c[a+(d+56)>>2]=12804;if(!(c[a+(d+60)>>2]|0)){P_(b);return}else Ha(74472,79014,56,74486)}function dB(a){a=a|0;P_(a);return}function eB(b,d){b=b|0;d=d|0;var e=0,f=0;e=O_(64)|0;c[e+4>>2]=0;c[e+8>>2]=0;c[e+12>>2]=0;f=e+20|0;c[f>>2]=0;c[f+4>>2]=0;c[f+8>>2]=0;c[f+12>>2]=0;c[f+16>>2]=0;c[f+20>>2]=0;a[f+24>>0]=0;c[e+48>>2]=d;c[e>>2]=29984;c[e+56>>2]=30080;c[e+16>>2]=30052;c[e+52>>2]=24;c[e+60>>2]=2;f=c[(c[e>>2]|0)+-12>>2]|0;b=e+f|0;f=e+(f+4)|0;d=(c[f>>2]|0)+-1|0;c[f>>2]=d;if((b|0)==0|(d|0)!=0)return e|0;oc[c[(c[b>>2]|0)+4>>2]&2047](b);return e|0}function fB(a){a=a|0;_d(a,30096);c[a+56>>2]=12804;if(!(c[a+60>>2]|0))return;else Ha(74472,79014,56,74486)}function gB(a){a=a|0;fB(a);P_(a);return}function hB(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;f=i;i=i+16|0;e=f;d=o$(b,1488,7360,-1)|0;if(!d){DF(a,b);i=f;return}c[e>>2]=a;if((a|0)!=0?(a=a+((c[(c[a>>2]|0)+-12>>2]|0)+4)|0,b=(c[a>>2]|0)+1|0,c[a>>2]=b,(b|0)==0):0)Ha(79054,79014,48,79068);pc[c[(c[d>>2]|0)+8>>2]&1023](d,e);d=c[e>>2]|0;if(!d){i=f;return}a=c[(c[d>>2]|0)+-12>>2]|0;e=d+a|0;a=d+(a+4)|0;b=(c[a>>2]|0)+-1|0;c[a>>2]=b;if((e|0)==0|(b|0)!=0){i=f;return}oc[c[(c[e>>2]|0)+4>>2]&2047](e);i=f;return}function iB(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;f=i;i=i+16|0;e=f;d=o$(b,1488,7360,-1)|0;if(!d){FF(a,b);i=f;return}c[e>>2]=a;if((a|0)!=0?(a=a+((c[(c[a>>2]|0)+-12>>2]|0)+4)|0,b=(c[a>>2]|0)+1|0,c[a>>2]=b,(b|0)==0):0)Ha(79054,79014,48,79068);pc[c[(c[d>>2]|0)+12>>2]&1023](d,e);d=c[e>>2]|0;if(!d){i=f;return}a=c[(c[d>>2]|0)+-12>>2]|0;e=d+a|0;a=d+(a+4)|0;b=(c[a>>2]|0)+-1|0;c[a>>2]=b;if((e|0)==0|(b|0)!=0){i=f;return}oc[c[(c[e>>2]|0)+4>>2]&2047](e);i=f;return}function jB(a){a=a|0;a=a+-16|0;_d(a,30096);c[a+56>>2]=12804;if(!(c[a+60>>2]|0))return;else Ha(74472,79014,56,74486)} +function Ic(a){a=a|0;var b=0;b=i;i=i+a|0;i=i+15&-16;return b|0}function Jc(){return i|0}function Kc(a){a=a|0;i=a}function Lc(a,b){a=a|0;b=b|0;i=a;j=b}function Mc(a,b){a=a|0;b=b|0;if(!o){o=a;p=b}}function Nc(b){b=b|0;a[k>>0]=a[b>>0];a[k+1>>0]=a[b+1>>0];a[k+2>>0]=a[b+2>>0];a[k+3>>0]=a[b+3>>0]}function Oc(b){b=b|0;a[k>>0]=a[b>>0];a[k+1>>0]=a[b+1>>0];a[k+2>>0]=a[b+2>>0];a[k+3>>0]=a[b+3>>0];a[k+4>>0]=a[b+4>>0];a[k+5>>0]=a[b+5>>0];a[k+6>>0]=a[b+6>>0];a[k+7>>0]=a[b+7>>0]}function Pc(a){a=a|0;D=a}function Qc(){return D|0}function Rc(a,b){a=a|0;b=b|0;p2(a+8|0,b)|0;return}function Sc(a,b){a=a|0;b=b|0;p2(a+32|0,b)|0;return}function Tc(b,c,d){b=b|0;c=c|0;d=d|0;p2(b+20|0,c)|0;a[b+44>>0]=d&1;return}function Uc(b,c){b=b|0;c=c|0;a[b+44>>0]=c&1;return}function Vc(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,j=0;d=i;i=i+160|0;g=d+144|0;f=d;e=f+64|0;j=f+8|0;c[j>>2]=12564;h=f+12|0;c[f>>2]=12704;c[e>>2]=12724;c[f+4>>2]=0;T2(f+64|0,h);c[f+136>>2]=0;c[f+140>>2]=-1;c[f>>2]=12544;c[f+64>>2]=12584;c[j>>2]=12564;W2(h);c[h>>2]=12740;j=f+44|0;c[j>>2]=0;c[j+4>>2]=0;c[j+8>>2]=0;c[j+12>>2]=0;c[f+60>>2]=24;c[g>>2]=0;c[g+4>>2]=0;c[g+8>>2]=0;$d(h,g);o2(g);P3(f+8|0,b)|0;Wc(f,a+20|0)|0;Ld(f,12592);O2(e);i=d;return}function Wc(e,f){e=e|0;f=f|0;var g=0,h=0,j=0,k=0,l=0,m=0,n=0;n=i;i=i+16|0;m=n+4|0;g=n;A3(m,e,0);if(!(a[m>>0]|0)){f=c[(c[e>>2]|0)+-12>>2]|0;N2(e+f|0,c[e+(f+16)>>2]|4);i=n;return e|0}if(!(a[f>>0]&1)){a[f+1>>0]=0;a[f>>0]=0}else{a[c[f+8>>2]>>0]=0;c[f+4>>2]=0}h=c[(c[e>>2]|0)+-12>>2]|0;m=c[e+(h+12)>>2]|0;m=(m|0)<1?2147483647:m;c[g>>2]=S2(e+h|0)|0;h=o8(g,54552)|0;m8(g);a:do if((m|0)>0){l=h+8|0;g=0;while(1){h=c[e+((c[(c[e>>2]|0)+-12>>2]|0)+24)>>2]|0;j=c[h+12>>2]|0;if((j|0)==(c[h+16>>2]|0)){h=rc[c[(c[h>>2]|0)+36>>2]&127](h)|0;if((h|0)==-1){h=2;break a}}else h=d[j>>0]|0;j=h&255;if(j<<24>>24>-1?(b[(c[l>>2]|0)+(h<<24>>24<<1)>>1]&8192)!=0:0){h=0;break a}v2(f,j);k=c[e+((c[(c[e>>2]|0)+-12>>2]|0)+24)>>2]|0;g=g+1|0;h=k+12|0;j=c[h>>2]|0;if((j|0)==(c[k+16>>2]|0))rc[c[(c[k>>2]|0)+40>>2]&127](k)|0;else c[h>>2]=j+1;if((g|0)>=(m|0)){h=0;break}}}else{g=0;h=0}while(0);c[e+((c[(c[e>>2]|0)+-12>>2]|0)+12)>>2]=0;f=c[(c[e>>2]|0)+-12>>2]|0;N2(e+f|0,c[e+(f+16)>>2]|((g|0)==0?h|4:h));i=n;return e|0}function Xc(a){a=a|0;Ld(a,12592);O2(a+64|0);return}function Yc(a){a=a|0;Na(a|0)|0;W_()}function Zc(a,b){a=a|0;b=+b;var d=0,e=0,f=0,g=0,h=0,j=0;d=i;i=i+160|0;g=d+144|0;f=d;e=f+64|0;j=f+8|0;c[j>>2]=12564;h=f+12|0;c[f>>2]=12704;c[e>>2]=12724;c[f+4>>2]=0;T2(f+64|0,h);c[f+136>>2]=0;c[f+140>>2]=-1;c[f>>2]=12544;c[f+64>>2]=12584;c[j>>2]=12564;W2(h);c[h>>2]=12740;j=f+44|0;c[j>>2]=0;c[j+4>>2]=0;c[j+8>>2]=0;c[j+12>>2]=0;c[f+60>>2]=24;c[g>>2]=0;c[g+4>>2]=0;c[g+8>>2]=0;$d(h,g);o2(g);Q3(f+8|0,b)|0;Wc(f,a+20|0)|0;Ld(f,12592);O2(e);i=d;return}function _c(b){b=b|0;var d=0;d=b+20|0;if(!(a[d>>0]&1)){b=d+1|0;b=X0(b)|0;return b|0}else{b=c[b+28>>2]|0;b=X0(b)|0;return b|0}return 0}function $c(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0;j=c[d>>2]|0;if(!j){b=0;return b|0}d=b+8|0;h=j+8|0;f=a[d>>0]|0;i=(f&1)==0;f=i?(f&255)>>>1:c[b+12>>2]|0;e=a[h>>0]|0;g=(e&1)==0;if((f|0)!=((g?(e&255)>>>1:c[j+12>>2]|0)|0)){b=0;return b|0}e=i?d+1|0:c[b+16>>2]|0;d=g?h+1|0:c[j+16>>2]|0;a:do if(i){if(f){while(1){if((a[e>>0]|0)!=(a[d>>0]|0)){d=0;break}f=f+-1|0;if(!f)break a;else{e=e+1|0;d=d+1|0}}return d|0}}else if(c1(e,d,f)|0){b=0;return b|0}while(0);d=b+20|0;g=j+20|0;f=a[d>>0]|0;i=(f&1)==0;f=i?(f&255)>>>1:c[b+24>>2]|0;e=a[g>>0]|0;h=(e&1)==0;if((f|0)!=((h?(e&255)>>>1:c[j+24>>2]|0)|0)){b=0;return b|0}e=i?d+1|0:c[b+28>>2]|0;d=h?g+1|0:c[j+28>>2]|0;b:do if(i){if(f){while(1){if((a[e>>0]|0)!=(a[d>>0]|0)){d=0;break}f=f+-1|0;if(!f)break b;else{e=e+1|0;d=d+1|0}}return d|0}}else if(c1(e,d,f)|0){b=0;return b|0}while(0);d=b+32|0;g=j+32|0;f=a[d>>0]|0;i=(f&1)==0;f=i?(f&255)>>>1:c[b+36>>2]|0;e=a[g>>0]|0;h=(e&1)==0;if((f|0)!=((h?(e&255)>>>1:c[j+36>>2]|0)|0)){b=0;return b|0}e=i?d+1|0:c[b+40>>2]|0;d=h?g+1|0:c[j+40>>2]|0;c:do if(i){if(f){while(1){if((a[e>>0]|0)!=(a[d>>0]|0)){d=0;break}f=f+-1|0;if(!f)break c;else{e=e+1|0;d=d+1|0}}return d|0}}else if(c1(e,d,f)|0){b=0;return b|0}while(0);b=(a[b+44>>0]|0)!=0^(a[j+44>>0]|0)!=0^1;return b|0}function ad(a,b){a=a|0;b=b|0;p2(a+20|0,b)|0;return}function bd(){var b=0,d=0,e=0,f=0,g=0;b=O_(48)|0;d=b+4|0;c[b>>2]=12392;e=b+8|0;f=e;g=f+36|0;do{c[f>>2]=0;f=f+4|0}while((f|0)<(g|0));a[e+36>>0]=0;c[d>>2]=1;return b|0}function cd(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0;e=c[b+32>>2]|0;k=c[b+36>>2]|0;if((e|0)==(k|0)){k=0;return k|0}j=a[d>>0]|0;h=(j&1)==0;j=h?(j&255)>>>1:c[d+4>>2]|0;h=h?d+1|0:c[d+8>>2]|0;i=(j|0)==0;a:while(1){b=c[e>>2]|0;if(!b){d=4;break}d=b+8|0;g=a[d>>0]|0;f=(g&1)==0;b:do if(((f?(g&255)>>>1:c[b+12>>2]|0)|0)==(j|0)){d=f?d+1|0:c[b+16>>2]|0;if(!f)if(!(c1(d,h,j)|0)){d=11;break a}else break;if(i){d=11;break a}else{g=j;f=h}while(1){if((a[d>>0]|0)!=(a[f>>0]|0))break b;g=g+-1|0;if(!g){d=11;break a}else{d=d+1|0;f=f+1|0}}}while(0);e=e+4|0;if((e|0)==(k|0)){b=0;d=14;break}}if((d|0)==4)Ha(78999,79014,102,79043);else if((d|0)==11){j=b+4|0;k=(c[j>>2]|0)+1|0;c[j>>2]=k;if(!k)Ha(79054,79014,48,79068);else{k=b;return k|0}}else if((d|0)==14)return b|0;return 0}function dd(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0;m=c[b+32>>2]|0;o=b+36|0;n=c[o>>2]|0;if((m|0)==(n|0))return;l=a[d>>0]|0;j=(l&1)==0;l=j?(l&255)>>>1:c[d+4>>2]|0;j=j?d+1|0:c[d+8>>2]|0;k=(l|0)==0;h=m;a:while(1){g=c[h>>2]|0;if(!g){b=4;break}b=g+8|0;i=a[b>>0]|0;d=(i&1)==0;b:do if(((d?(i&255)>>>1:c[g+12>>2]|0)|0)==(l|0)){b=d?b+1|0:c[g+16>>2]|0;if(!d)if(!(c1(b,j,l)|0)){b=11;break a}else break;if(k){b=11;break a}else{i=l;d=j}while(1){if((a[b>>0]|0)!=(a[d>>0]|0))break b;i=i+-1|0;if(!i){b=11;break a}else{b=b+1|0;d=d+1|0}}}while(0);h=h+4|0;if((h|0)==(n|0)){b=29;break}}if((b|0)==4)Ha(78999,79014,102,79043);else if((b|0)==11){b=m+((h-m>>2)+1<<2)|0;do if((b|0)!=(n|0)){while(1){d=c[b>>2]|0;if((g|0)!=(d|0)){if((d|0)!=0?(l=d+4|0,m=(c[l>>2]|0)+1|0,c[l>>2]=m,(m|0)==0):0){b=15;break}if((g|0)!=0?(l=g+4|0,m=(c[l>>2]|0)+-1|0,c[l>>2]=m,(m|0)==0):0)oc[c[(c[g>>2]|0)+4>>2]&2047](g);c[h>>2]=d}b=b+4|0;d=h+4|0;if((b|0)==(n|0)){e=d;b=22;break}h=d;g=c[d>>2]|0}if((b|0)==15)Ha(79054,79014,48,79068);else if((b|0)==22){f=c[o>>2]|0;break}}else{e=h;f=n}while(0);if((f|0)==(e|0))return;do{f=f+-4|0;c[o>>2]=f;b=c[f>>2]|0;if((b|0)!=0?(m=b+4|0,n=(c[m>>2]|0)+-1|0,c[m>>2]=n,(n|0)==0):0){oc[c[(c[b>>2]|0)+4>>2]&2047](b);f=c[o>>2]|0}}while((f|0)!=(e|0));return}else if((b|0)==29)return}function ed(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,j=0,k=0;h=i;i=i+16|0;f=h;fd(f,a+32|0);e=f+4|0;d=c[e>>2]|0;a=c[f>>2]|0;if(d-a>>2>>>0>b>>>0){b=c[a+(b<<2)>>2]|0;if(b){k=b+4|0;j=(c[k>>2]|0)+1|0;c[k>>2]=j;if(!j)Ha(79054,79014,48,79068);else g=b}else g=0}else if(!a){k=0;i=h;return k|0}else g=0;if((d|0)!=(a|0)){do{d=d+-4|0;c[e>>2]=d;b=c[d>>2]|0;if((b|0)!=0?(j=b+4|0,k=(c[j>>2]|0)+-1|0,c[j>>2]=k,(k|0)==0):0){oc[c[(c[b>>2]|0)+4>>2]&2047](b);d=c[e>>2]|0}}while((d|0)!=(a|0));a=c[f>>2]|0}P_(a);k=g;i=h;return k|0}function fd(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0;c[a>>2]=0;h=a+4|0;c[h>>2]=0;c[a+8>>2]=0;g=b+4|0;d=(c[g>>2]|0)-(c[b>>2]|0)|0;e=d>>2;if(!e)return;if(e>>>0>1073741823)M_(a);f=O_(d)|0;c[h>>2]=f;c[a>>2]=f;c[a+8>>2]=f+(e<<2);d=c[b>>2]|0;b=c[g>>2]|0;if((d|0)==(b|0))return;while(1){e=c[d>>2]|0;c[f>>2]=e;if((e|0)!=0?(a=e+4|0,g=(c[a>>2]|0)+1|0,c[a>>2]=g,(g|0)==0):0){d=8;break}f=f+4|0;c[h>>2]=f;d=d+4|0;if((d|0)==(b|0)){d=10;break}}if((d|0)==8)Ha(79054,79014,48,79068);else if((d|0)==10)return}function gd(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;d=a+32|0;e=a+36|0;f=c[e>>2]|0;g=f-(c[d>>2]|0)>>2;if((f|0)==(c[a+40>>2]|0)){ae(d,b);return g|0}d=c[b>>2]|0;c[f>>2]=d;if((d|0)!=0?(b=d+4|0,a=(c[b>>2]|0)+1|0,c[b>>2]=a,(a|0)==0):0)Ha(79054,79014,48,79068);c[e>>2]=f+4;return g|0}function hd(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0;g=a+32|0;h=a+36|0;e=c[h>>2]|0;i=e-(c[g>>2]|0)>>2;d=c[b>>2]|0;f=b+4|0;if((d|0)==(c[f>>2]|0))return i|0;a=a+40|0;while(1){if((e|0)==(c[a>>2]|0))ae(g,d);else{b=c[d>>2]|0;c[e>>2]=b;if((b|0)!=0?(j=b+4|0,b=(c[j>>2]|0)+1|0,c[j>>2]=b,(b|0)==0):0){d=6;break}c[h>>2]=e+4}d=d+4|0;if((d|0)==(c[f>>2]|0)){d=11;break}e=c[h>>2]|0}if((d|0)==6)Ha(79054,79014,48,79068);else if((d|0)==11)return i|0;return 0}function id(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;e=i;i=i+16|0;d=e;b=o$(b,1488,1496,-1)|0;if(!b){i=e;return}c[d>>2]=a;if((a|0)!=0?(f=a+((c[(c[a>>2]|0)+-12>>2]|0)+4)|0,a=(c[f>>2]|0)+1|0,c[f>>2]=a,(a|0)==0):0)Ha(79054,79014,48,79068);pc[c[(c[b>>2]|0)+8>>2]&1023](b,d);b=c[d>>2]|0;if(!b){i=e;return}a=c[(c[b>>2]|0)+-12>>2]|0;d=b+a|0;a=b+(a+4)|0;f=(c[a>>2]|0)+-1|0;c[a>>2]=f;if((d|0)==0|(f|0)!=0){i=e;return}oc[c[(c[d>>2]|0)+4>>2]&2047](d);i=e;return}function jd(a,b){a=a|0;b=b|0;id(a+-16|0,b);return}function kd(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;e=i;i=i+16|0;d=e;b=o$(b,1488,1496,-1)|0;if(!b){i=e;return}c[d>>2]=a;if((a|0)!=0?(f=a+((c[(c[a>>2]|0)+-12>>2]|0)+4)|0,a=(c[f>>2]|0)+1|0,c[f>>2]=a,(a|0)==0):0)Ha(79054,79014,48,79068);pc[c[(c[b>>2]|0)+12>>2]&1023](b,d);b=c[d>>2]|0;if(!b){i=e;return}a=c[(c[b>>2]|0)+-12>>2]|0;d=b+a|0;a=b+(a+4)|0;f=(c[a>>2]|0)+-1|0;c[a>>2]=f;if((d|0)==0|(f|0)!=0){i=e;return}oc[c[(c[d>>2]|0)+4>>2]&2047](d);i=e;return}function ld(a,b){a=a|0;b=b|0;kd(a+-16|0,b);return}function md(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0;u=i;i=i+16|0;t=u+4|0;v=u;e=c[b+32>>2]|0;m=b+36|0;if((e|0)==(c[m>>2]|0)){w=1;i=u;return w|0}n=t+8|0;o=t+4|0;p=t+1|0;q=d+4|0;a:while(1){b=c[e>>2]|0;if(!b){w=4;break}k2(t,b+8|0);k=a[t>>0]|0;f=(k&1)==0;l=f?p:c[n>>2]|0;k=f?(k&255)>>>1:c[o>>2]|0;f=k>>>0<2;b:do if(!f?(s=l+k|0,(k|0)>=2):0){j=k+-1|0;g=l+j|0;if(j){b=l;c:do{if((a[b>>0]|0)==100){h=b;j=60920;do{j=j+1|0;if((j|0)==60922){r=b;w=12;break c}h=h+1|0}while((a[h>>0]|0)==(a[j>>0]|0))}b=b+1|0}while((b|0)!=(g|0));if((w|0)==12?(w=0,(r|0)!=(s|0)&(r|0)==(l|0)):0)break;if(f|(k|0)<2){w=20;break}}j=l+k|0;k=k+-1|0;f=l+k|0;if(k){b=l;d:while(1){if((a[b>>0]|0)==100){g=b;h=60923;do{h=h+1|0;if((h|0)==60925)break d;g=g+1|0}while((a[g>>0]|0)==(a[h>>0]|0))}b=b+1|0;if((b|0)==(f|0)){w=20;break b}}if(!((b|0)!=(j|0)&(b|0)==(l|0)))w=20}else w=20}else w=20;while(0);if((w|0)==20?(w=0,(B2(t,76931)|0)!=0):0){h=c[e>>2]|0;j=(h|0)==0;if(!j?(k=h+4|0,l=(c[k>>2]|0)+1|0,c[k>>2]=l,(l|0)==0):0){w=23;break}b=c[d>>2]|0;e:do if((b|0)==(c[q>>2]|0))f=b;else{if(j){w=26;break a}while(1){f=c[b>>2]|0;c[v>>2]=f;if((f|0)!=0?(k=f+4|0,l=(c[k>>2]|0)+1|0,c[k>>2]=l,(l|0)==0):0){w=30;break a}f=zc[c[(c[h>>2]|0)+8>>2]&255](h,v)|0;g=c[v>>2]|0;if((g|0)!=0?(k=g+4|0,l=(c[k>>2]|0)+-1|0,c[k>>2]=l,(l|0)==0):0)oc[c[(c[g>>2]|0)+4>>2]&2047](g);if(f)break;b=b+4|0;if((b|0)==(c[q>>2]|0)){f=b;break e}}f=b;b=c[q>>2]|0}while(0);b=(f|0)==(b|0);if(!j?(k=h+4|0,l=(c[k>>2]|0)+-1|0,c[k>>2]=l,(l|0)==0):0)oc[c[(c[h>>2]|0)+4>>2]&2047](h);if(b){w=42;break}}o2(t);e=e+4|0;if((e|0)==(c[m>>2]|0)){b=1;w=44;break}}if((w|0)==4)Ha(78999,79014,102,79043);else if((w|0)==23)Ha(79054,79014,48,79068);else if((w|0)==26){b=c[b>>2]|0;c[v>>2]=b;if(!b)Ha(78999,79014,95,78956);v=b+4|0;w=(c[v>>2]|0)+1|0;c[v>>2]=w;if(!w)Ha(79054,79014,48,79068);else Ha(78999,79014,95,78956)}else if((w|0)==30)Ha(79054,79014,48,79068);else if((w|0)==42){o2(t);w=0;i=u;return w|0}else if((w|0)==44){i=u;return b|0}return 0}function nd(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0;j=c[d>>2]|0;if(!j){b=0;return b|0}d=b+20|0;h=j+20|0;f=a[d>>0]|0;i=(f&1)==0;f=i?(f&255)>>>1:c[b+24>>2]|0;e=a[h>>0]|0;g=(e&1)==0;if((f|0)!=((g?(e&255)>>>1:c[j+24>>2]|0)|0)){b=0;return b|0}e=i?d+1|0:c[b+28>>2]|0;d=g?h+1|0:c[j+28>>2]|0;a:do if(i){if(f){while(1){if((a[e>>0]|0)!=(a[d>>0]|0)){d=0;break}f=f+-1|0;if(!f)break a;else{e=e+1|0;d=d+1|0}}return d|0}}else if(c1(e,d,f)|0){b=0;return b|0}while(0);b=zc[c[(c[b>>2]|0)+28>>2]&255](b,j+32|0)|0;return b|0}function od(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,j=0;j=i;i=i+96|0;e=j+16|0;h=j;f=c[11148]|0;c[e>>2]=f;c[e+(c[f+-16>>2]|0)>>2]=c[11149];f=e+4|0;g=c[11150]|0;c[f>>2]=g;c[f+(c[g+-16>>2]|0)>>2]=c[11151];g=e+8|0;f=c[11152]|0;c[g>>2]=f;c[g+(c[f+-16>>2]|0)>>2]=c[11153];f=e+12|0;g=c[11154]|0;c[f>>2]=g;c[f+(c[g+-16>>2]|0)>>2]=c[11155];g=e+16|0;f=c[11156]|0;c[g>>2]=f;c[g+(c[f+-16>>2]|0)>>2]=c[11157];f=e+20|0;g=c[11158]|0;c[f>>2]=g;c[f+(c[g+-16>>2]|0)>>2]=c[11159];g=e+24|0;f=c[11160]|0;c[g>>2]=f;c[g+(c[f+-16>>2]|0)>>2]=c[11161];f=e+28|0;g=c[11162]|0;c[f>>2]=g;c[f+(c[g+-16>>2]|0)>>2]=c[11163];c[e>>2]=44308;c[e+4>>2]=44380;c[e+8>>2]=44412;c[e+12>>2]=44444;c[e+16>>2]=44476;c[e+20>>2]=44508;c[e+24>>2]=44540;c[e+28>>2]=44572;wM(e+32|0,d,70,4);c[e+56>>2]=0;c[e+60>>2]=1;c[e+64>>2]=0;a[e+68>>0]=0;e=e+(c[(c[e>>2]|0)+-16>>2]|0)|0;c[h>>2]=12880;c[h+4>>2]=e;a[h+8>>0]=0;pc[c[(c[b>>2]|0)+32>>2]&1023](b,e);e=c[b+4>>2]|0;g=b+8|0;if((e|0)==(c[g>>2]|0)){g=12880;g=g+16|0;g=c[g>>2]|0;pc[g&1023](h,b);i=j;return}f=fe(h)|0;d=c[h>>2]|0;if(f){g=d;g=g+16|0;g=c[g>>2]|0;pc[g&1023](h,b);i=j;return}while(1){f=c[e>>2]|0;if(!f){e=5;break}pc[c[d+8>>2]&1023](h,f);e=e+4|0;if((e|0)==(c[g>>2]|0)){e=3;break}f=rc[c[(c[h>>2]|0)+24>>2]&127](h)|0;d=c[h>>2]|0;if(f){e=8;break}}if((e|0)==3){g=c[h>>2]|0;g=g+16|0;g=c[g>>2]|0;pc[g&1023](h,b);i=j;return}else if((e|0)==5)Ha(78999,79014,95,78956);else if((e|0)==8){g=d+16|0;g=c[g>>2]|0;pc[g&1023](h,b);i=j;return}}function pd(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;pc[c[(c[a>>2]|0)+12>>2]&1023](a,b);d=c[b+4>>2]|0;g=b+8|0;a:do if((d|0)!=(c[g>>2]|0)){f=d;while(1){e=rc[c[(c[a>>2]|0)+24>>2]&127](a)|0;d=c[a>>2]|0;if(e){e=8;break}e=c[f>>2]|0;if(!e){e=6;break}pc[c[d+8>>2]&1023](a,e);f=f+4|0;if((f|0)==(c[g>>2]|0))break a}if((e|0)==6)Ha(78999,79014,95,78956);else if((e|0)==8){g=d+16|0;g=c[g>>2]|0;pc[g&1023](a,b);return}}while(0);g=c[a>>2]|0;g=g+16|0;g=c[g>>2]|0;pc[g&1023](a,b);return}function qd(a){a=a|0;return}function rd(a,b){a=a|0;b=b|0;b=c[b>>2]|0;if(!b)Ha(78999,79014,102,79043);else{pc[c[(c[b>>2]|0)+40>>2]&1023](b,a);return a|0}return 0}function sd(a){a=a|0;c[a>>2]=12392;o2(a+32|0);o2(a+20|0);o2(a+8|0);c[a>>2]=12804;if(!(c[a+4>>2]|0))return;else Ha(74472,79014,56,74486)}function td(a){a=a|0;sd(a);P_(a);return}function ud(a,b){a=a|0;b=b|0;return (zc[c[(c[a>>2]|0)+8>>2]&255](a,b)|0)^1|0}function vd(a,b){a=a|0;b=b|0;var d=0,e=0;d=a+8|0;e=c[d>>2]|0;if((e|0)==(c[a+12>>2]|0)){he(a+4|0,b);return}b=c[b>>2]|0;c[e>>2]=b;if((b|0)!=0?(b=b+((c[(c[b>>2]|0)+-12>>2]|0)+4)|0,a=(c[b>>2]|0)+1|0,c[b>>2]=a,(a|0)==0):0)Ha(79054,79014,48,79068);c[d>>2]=e+4;return}function wd(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0;d=c[b>>2]|0;f=b+4|0;if((d|0)==(c[f>>2]|0))return;g=a+8|0;h=a+12|0;e=a+4|0;while(1){a=c[g>>2]|0;if((a|0)==(c[h>>2]|0))he(e,d);else{b=c[d>>2]|0;c[a>>2]=b;if((b|0)!=0?(i=b+((c[(c[b>>2]|0)+-12>>2]|0)+4)|0,b=(c[i>>2]|0)+1|0,c[i>>2]=b,(b|0)==0):0){b=6;break}c[g>>2]=a+4}d=d+4|0;if((d|0)==(c[f>>2]|0)){b=10;break}}if((b|0)==6)Ha(79054,79014,48,79068);else if((b|0)==10)return}function xd(a){a=a|0;return (c[a+8>>2]|0)-(c[a+4>>2]|0)>>2|0}function yd(a){a=a|0;return (c[a+8>>2]|0)==(c[a+4>>2]|0)|0}function zd(a){a=a|0;var b=0,d=0,e=0,f=0,g=0;e=c[a+4>>2]|0;d=a+8|0;a=c[d>>2]|0;if((a|0)==(e|0))return;do{a=a+-4|0;c[d>>2]=a;b=c[a>>2]|0;if((b|0)!=0?(g=c[(c[b>>2]|0)+-12>>2]|0,f=b+g|0,g=b+(g+4)|0,b=(c[g>>2]|0)+-1|0,c[g>>2]=b,!((f|0)==0|(b|0)!=0)):0){oc[c[(c[f>>2]|0)+4>>2]&2047](f);a=c[d>>2]|0}}while((a|0)!=(e|0));return}function Ad(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,i=0;c[a>>2]=12824;c[a+16>>2]=12864;f=a+4|0;b=c[f>>2]|0;if(b){h=a+8|0;d=c[h>>2]|0;if((d|0)!=(b|0)){do{d=d+-4|0;c[h>>2]=d;e=c[d>>2]|0;if((e|0)!=0?(i=c[(c[e>>2]|0)+-12>>2]|0,g=e+i|0,i=e+(i+4)|0,e=(c[i>>2]|0)+-1|0,c[i>>2]=e,!((g|0)==0|(e|0)!=0)):0){oc[c[(c[g>>2]|0)+4>>2]&2047](g);d=c[h>>2]|0}}while((d|0)!=(b|0));b=c[f>>2]|0}P_(b)}c[a+16>>2]=12804;if(!(c[a+20>>2]|0))return;else Ha(74472,79014,56,74486)}function Bd(a){a=a|0;Ad(a);P_(a);return}function Cd(a){a=a|0;Ad(a+(c[(c[a>>2]|0)+-12>>2]|0)|0);return}function Dd(a){a=a|0;a=a+(c[(c[a>>2]|0)+-12>>2]|0)|0;Ad(a);P_(a);return}function Ed(a){a=a|0;_d(a,12516);c[a+48>>2]=12804;if(!(c[a+52>>2]|0))return;else Ha(74472,79014,56,74486)}function Fd(a){a=a|0;Ed(a);P_(a);return}function Gd(a,b){a=a|0;b=b|0;return (zc[c[(c[a>>2]|0)+44>>2]&255](a,b)|0)^1|0}function Hd(a){a=a|0;a=a+-16|0;_d(a,12516);c[a+48>>2]=12804;if(!(c[a+52>>2]|0))return;else Ha(74472,79014,56,74486)}function Id(a){a=a|0;a=a+-16|0;_d(a,12516);c[a+48>>2]=12804;if(!(c[a+52>>2]|0)){P_(a);return}else Ha(74472,79014,56,74486)}function Jd(a){a=a|0;var b=0;b=c[(c[a>>2]|0)+-12>>2]|0;_d(a+b|0,12516);c[a+(b+48)>>2]=12804;if(!(c[a+(b+52)>>2]|0))return;else Ha(74472,79014,56,74486)}function Kd(a){a=a|0;var b=0,d=0;d=c[(c[a>>2]|0)+-12>>2]|0;b=a+d|0;_d(b,12516);c[a+(d+48)>>2]=12804;if(!(c[a+(d+52)>>2]|0)){P_(b);return}else Ha(74472,79014,56,74486)}function Ld(a,b){a=a|0;b=b|0;var d=0;d=c[b>>2]|0;c[a>>2]=d;c[a+(c[d+-12>>2]|0)>>2]=c[b+32>>2];c[a+8>>2]=c[b+36>>2];b=a+12|0;c[b>>2]=12740;o2(a+44|0);U2(b);return}function Md(a){a=a|0;a=a+-8|0;Ld(a,12592);O2(a+64|0);return}function Nd(a){a=a|0;var b=0;b=c[(c[a>>2]|0)+-12>>2]|0;Ld(a+b|0,12592);O2(a+(b+64)|0);return}function Od(a){a=a|0;Ld(a,12592);O2(a+64|0);P_(a);return}function Pd(a){a=a|0;a=a+-8|0;Ld(a,12592);O2(a+64|0);P_(a);return}function Qd(a){a=a|0;var b=0,d=0;d=c[(c[a>>2]|0)+-12>>2]|0;b=a+d|0;Ld(b,12592);O2(a+(d+64)|0);P_(b);return}function Rd(a){a=a|0;c[a>>2]=12740;o2(a+32|0);U2(a);return}function Sd(a){a=a|0;c[a>>2]=12740;o2(a+32|0);U2(a);P_(a);return}function Td(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;i=d+44|0;j=c[i>>2]|0;l=d+24|0;m=c[l>>2]|0;if(j>>>0>>0){c[i>>2]=m;j=m}k=j;i=h&24;if(!i){d=b;c[d>>2]=0;c[d+4>>2]=0;d=b+8|0;c[d>>2]=-1;c[d+4>>2]=-1;return}if((g|0)==1&(i|0)==24){d=b;c[d>>2]=0;c[d+4>>2]=0;d=b+8|0;c[d>>2]=-1;c[d+4>>2]=-1;return}a:do switch(g|0){case 0:{i=0;g=0;break}case 1:if(!(h&8)){g=m-(c[d+20>>2]|0)|0;i=g;g=((g|0)<0)<<31>>31;break a}else{g=(c[d+12>>2]|0)-(c[d+8>>2]|0)|0;i=g;g=((g|0)<0)<<31>>31;break a}case 2:{i=d+32|0;if(!(a[i>>0]&1))i=i+1|0;else i=c[d+40>>2]|0;g=j-i|0;i=g;g=((g|0)<0)<<31>>31;break}default:{d=b;c[d>>2]=0;c[d+4>>2]=0;d=b+8|0;c[d>>2]=-1;c[d+4>>2]=-1;return}}while(0);g=Tba(i|0,g|0,e|0,f|0)|0;e=D;if((e|0)>=0){i=d+32|0;if(!(a[i>>0]&1))i=i+1|0;else i=c[d+40>>2]|0;f=j-i|0;j=((f|0)<0)<<31>>31;if(!((j|0)<(e|0)|(j|0)==(e|0)&f>>>0>>0)){i=h&8;if(!((g|0)==0&(e|0)==0)){if((i|0)!=0?(c[d+12>>2]|0)==0:0){d=b;c[d>>2]=0;c[d+4>>2]=0;d=b+8|0;c[d>>2]=-1;c[d+4>>2]=-1;return}if((h&16|0)!=0&(m|0)==0){d=b;c[d>>2]=0;c[d+4>>2]=0;d=b+8|0;c[d>>2]=-1;c[d+4>>2]=-1;return}}if(i){c[d+12>>2]=(c[d+8>>2]|0)+g;c[d+16>>2]=k}if(h&16)c[l>>2]=(c[d+20>>2]|0)+g;d=b;c[d>>2]=0;c[d+4>>2]=0;d=b+8|0;c[d>>2]=g;c[d+4>>2]=e;return}}d=b;c[d>>2]=0;c[d+4>>2]=0;d=b+8|0;c[d>>2]=-1;c[d+4>>2]=-1;return}function Ud(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;d=d+8|0;vc[c[(c[b>>2]|0)+16>>2]&15](a,b,c[d>>2]|0,c[d+4>>2]|0,0,e);return}function Vd(a){a=a|0;var b=0,e=0,f=0,g=0;b=a+44|0;e=c[b>>2]|0;f=c[a+24>>2]|0;if(e>>>0>>0){c[b>>2]=f;e=f}if(!(c[a+48>>2]&8)){a=-1;return a|0}g=a+16|0;b=c[g>>2]|0;f=a+12|0;if(b>>>0>>0){f=c[f>>2]|0;c[g>>2]=e;b=e}else f=c[f>>2]|0;if(f>>>0>=b>>>0){a=-1;return a|0}a=d[f>>0]|0;return a|0}function Wd(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0;f=b+44|0;e=c[f>>2]|0;g=c[b+24>>2]|0;if(e>>>0>>0){c[f>>2]=g;e=g}j=b+8|0;f=c[j>>2]|0;k=b+12|0;h=c[k>>2]|0;i=f;if(f>>>0>=h>>>0){b=-1;return b|0}if((d|0)==-1){c[j>>2]=f;c[k>>2]=h+-1;c[b+16>>2]=e;b=0;return b|0}if(!(c[b+48>>2]&16)){g=d&255;f=h+-1|0;if(g<<24>>24!=(a[f>>0]|0)){b=-1;return b|0}}else{g=d&255;f=h+-1|0}c[j>>2]=i;c[k>>2]=f;c[b+16>>2]=e;a[f>>0]=g;b=d;return b|0}function Xd(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0;t=i;i=i+16|0;o=t;if((d|0)==-1){b=0;i=t;return b|0}p=b+12|0;q=b+8|0;r=(c[p>>2]|0)-(c[q>>2]|0)|0;s=b+24|0;l=c[s>>2]|0;n=b+28|0;e=c[n>>2]|0;if((l|0)==(e|0)){k=b+48|0;if(!(c[k>>2]&16)){b=-1;i=t;return b|0}h=b+20|0;j=c[h>>2]|0;g=b+44|0;m=(c[g>>2]|0)-j|0;f=b+32|0;v2(f,0);if(!(a[f>>0]&1))e=10;else e=(c[f>>2]&-2)+-1|0;s2(f,e,0);e=a[f>>0]|0;if(!(e&1)){f=f+1|0;e=(e&255)>>>1}else{f=c[b+40>>2]|0;e=c[b+36>>2]|0}e=f+e|0;c[h>>2]=f;c[n>>2]=e;l=f+(l-j)|0;c[s>>2]=l;f=f+m|0;c[g>>2]=f;j=e}else{f=b+44|0;k=b+48|0;g=f;f=c[f>>2]|0;j=e}h=l+1|0;c[o>>2]=h;f=c[(h>>>0>>0?g:o)>>2]|0;c[g>>2]=f;if(c[k>>2]&8){e=b+32|0;if(!(a[e>>0]&1))e=e+1|0;else e=c[b+40>>2]|0;c[q>>2]=e;c[p>>2]=e+r;c[b+16>>2]=f}if((l|0)==(j|0)){b=zc[c[(c[b>>2]|0)+52>>2]&255](b,d&255)|0;i=t;return b|0}else{c[s>>2]=h;a[l>>0]=d;b=d&255;i=t;return b|0}return 0}function Yd(a){a=a|0;c[a>>2]=12804;if(!(c[a+4>>2]|0))return;else Ha(74472,79014,56,74486)}function Zd(a){a=a|0;c[a>>2]=12804;if(!(c[a+4>>2]|0)){P_(a);return}else Ha(74472,79014,56,74486)}function _d(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;h=c[b>>2]|0;c[a>>2]=h;c[a+(c[h+-12>>2]|0)>>2]=c[b+12>>2];c[a+16>>2]=12480;h=a+32|0;d=c[h>>2]|0;if(d){g=a+36|0;e=c[g>>2]|0;if((e|0)!=(d|0)){do{e=e+-4|0;c[g>>2]=e;f=c[e>>2]|0;if((f|0)!=0?(k=f+4|0,j=(c[k>>2]|0)+-1|0,c[k>>2]=j,(j|0)==0):0){oc[c[(c[f>>2]|0)+4>>2]&2047](f);e=c[g>>2]|0}}while((e|0)!=(d|0));d=c[h>>2]|0}P_(d)}o2(a+20|0);h=c[b+4>>2]|0;c[a>>2]=h;c[a+(c[h+-12>>2]|0)>>2]=c[b+8>>2];h=a+4|0;d=c[h>>2]|0;if(!d)return;g=a+8|0;e=c[g>>2]|0;if((e|0)!=(d|0)){do{e=e+-4|0;c[g>>2]=e;f=c[e>>2]|0;if((f|0)!=0?(j=c[(c[f>>2]|0)+-12>>2]|0,i=f+j|0,j=f+(j+4)|0,k=(c[j>>2]|0)+-1|0,c[j>>2]=k,!((i|0)==0|(k|0)!=0)):0){oc[c[(c[i>>2]|0)+4>>2]&2047](i);e=c[g>>2]|0}}while((e|0)!=(d|0));d=c[h>>2]|0}P_(d);return}function $d(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0;i=b+32|0;p2(i,d)|0;h=b+44|0;c[h>>2]=0;j=b+48|0;g=c[j>>2]|0;if(g&8){d=a[i>>0]|0;if(!(d&1)){d=((d&255)>>>1)+(i+1)|0;c[h>>2]=d;e=i+1|0;f=i+1|0}else{d=(c[b+40>>2]|0)+(c[b+36>>2]|0)|0;c[h>>2]=d;f=c[b+40>>2]|0;e=f}c[b+8>>2]=e;c[b+12>>2]=f;c[b+16>>2]=d}if(!(g&16))return;d=a[i>>0]|0;if(!(d&1)){g=(d&255)>>>1;c[h>>2]=i+1+g;d=10;h=g}else{g=c[b+36>>2]|0;c[h>>2]=(c[b+40>>2]|0)+g;d=(c[i>>2]&-2)+-1|0;h=g}s2(i,d,0);d=a[i>>0]|0;if(!(d&1)){g=i+1|0;f=(d&255)>>>1;e=i+1|0}else{e=c[b+40>>2]|0;g=e;f=c[b+36>>2]|0}d=b+24|0;c[d>>2]=e;c[b+20>>2]=e;c[b+28>>2]=g+f;if(!(c[j>>2]&3))return;c[d>>2]=e+h;return}function ae(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0;t=a+4|0;e=c[a>>2]|0;g=((c[t>>2]|0)-e>>2)+1|0;if(g>>>0>1073741823){M_(a);e=c[a>>2]|0}q=a+8|0;o=e;f=(c[q>>2]|0)-o|0;if(f>>2>>>0<536870911){f=f>>1;f=f>>>0>>0?g:f;i=c[t>>2]|0;h=i;g=h-o>>2;if(!f){l=0;m=0;k=g;j=h}else n=6}else{i=c[t>>2]|0;h=i;f=1073741823;g=h-o>>2;n=6}if((n|0)==6){l=f;m=O_(f<<2)|0;k=g;j=h}h=m+(k<<2)|0;f=h;l=m+(l<<2)|0;g=c[b>>2]|0;c[h>>2]=g;if((g|0)!=0?(b=g+4|0,n=(c[b>>2]|0)+1|0,c[b>>2]=n,(n|0)==0):0)Ha(79054,79014,48,79068);k=m+(k+1<<2)|0;do if((i|0)!=(e|0)){while(1){i=i+-4|0;g=c[i>>2]|0;c[h+-4>>2]=g;if((g|0)!=0?(n=g+4|0,o=(c[n>>2]|0)+1|0,c[n>>2]=o,(o|0)==0):0){n=14;break}h=f+-4|0;f=h;if((i|0)==(e|0)){d=f;n=16;break}}if((n|0)==14)Ha(79054,79014,48,79068);else if((n|0)==16){r=a;s=t;p=d;u=c[a>>2]|0;d=c[t>>2]|0;break}}else{r=a;s=t;p=f;u=o;d=j}while(0);c[r>>2]=p;c[s>>2]=k;c[q>>2]=l;f=u;if((d|0)!=(f|0))do{d=d+-4|0;e=c[d>>2]|0;if((e|0)!=0?(t=e+4|0,a=(c[t>>2]|0)+-1|0,c[t>>2]=a,(a|0)==0):0)oc[c[(c[e>>2]|0)+4>>2]&2047](e)}while((d|0)!=(f|0));if(!u)return;P_(u);return}function be(a){a=a|0;P_(a);return}function ce(a,b){a=a|0;b=b|0;pc[c[(c[b>>2]|0)+32>>2]&1023](b,c[a+4>>2]|0);return}function de(a,b){a=a|0;b=b|0;pc[c[(c[b>>2]|0)+36>>2]&1023](b,c[a+4>>2]|0);return}function ee(b,c){b=b|0;c=c|0;a[b+8>>0]=c&1;return}function fe(b){b=b|0;return (a[b+8>>0]|0)!=0|0}function ge(a,b){a=a|0;b=b|0;c[a+4>>2]=b;return}function he(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0;t=a+4|0;e=c[a>>2]|0;g=((c[t>>2]|0)-e>>2)+1|0;if(g>>>0>1073741823){M_(a);e=c[a>>2]|0}q=a+8|0;o=e;f=(c[q>>2]|0)-o|0;if(f>>2>>>0<536870911){f=f>>1;f=f>>>0>>0?g:f;i=c[t>>2]|0;h=i;g=h-o>>2;if(!f){l=0;m=0;k=g;j=h}else n=6}else{i=c[t>>2]|0;h=i;f=1073741823;g=h-o>>2;n=6}if((n|0)==6){l=f;m=O_(f<<2)|0;k=g;j=h}h=m+(k<<2)|0;f=h;l=m+(l<<2)|0;g=c[b>>2]|0;c[h>>2]=g;if((g|0)!=0?(b=g+((c[(c[g>>2]|0)+-12>>2]|0)+4)|0,n=(c[b>>2]|0)+1|0,c[b>>2]=n,(n|0)==0):0)Ha(79054,79014,48,79068);k=m+(k+1<<2)|0;do if((i|0)!=(e|0)){while(1){i=i+-4|0;g=c[i>>2]|0;c[h+-4>>2]=g;if((g|0)!=0?(n=g+((c[(c[g>>2]|0)+-12>>2]|0)+4)|0,o=(c[n>>2]|0)+1|0,c[n>>2]=o,(o|0)==0):0){n=14;break}h=f+-4|0;f=h;if((i|0)==(e|0)){d=f;n=16;break}}if((n|0)==14)Ha(79054,79014,48,79068);else if((n|0)==16){r=a;s=t;p=d;u=c[a>>2]|0;d=c[t>>2]|0;break}}else{r=a;s=t;p=f;u=o;d=j}while(0);c[r>>2]=p;c[s>>2]=k;c[q>>2]=l;f=u;if((d|0)!=(f|0))do{d=d+-4|0;e=c[d>>2]|0;if((e|0)!=0?(t=c[(c[e>>2]|0)+-12>>2]|0,v=e+t|0,t=e+(t+4)|0,a=(c[t>>2]|0)+-1|0,c[t>>2]=a,!((v|0)==0|(a|0)!=0)):0)oc[c[(c[v>>2]|0)+4>>2]&2047](v)}while((d|0)!=(f|0));if(!u)return;P_(u);return}function ie(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0;q=i;i=i+16|0;k=q;l=a+16|0;c[l>>2]=c[d>>2];m=a+4|0;f=c[m>>2]|0;o=a+8|0;g=c[o>>2]|0;if((g|0)!=(f|0))c[o>>2]=g+(~((g+-4-f|0)>>>2)<<2);h=a+20|0;pc[c[(c[h>>2]|0)+12>>2]&1023](h,b);f=c[b+4>>2]|0;j=b+8|0;a:do if((f|0)==(c[j>>2]|0))p=5;else{while(1){a=rc[c[(c[h>>2]|0)+24>>2]&127](h)|0;g=c[h>>2]|0;if(a){n=g;break a}a=c[f>>2]|0;if(!a)break;pc[c[g+8>>2]&1023](h,a);f=f+4|0;if((f|0)==(c[j>>2]|0)){p=5;break a}}Ha(78999,79014,95,78956)}while(0);if((p|0)==5)n=c[h>>2]|0;pc[c[n+16>>2]&1023](h,b);C1(c[m>>2]|0,c[o>>2]|0,k);if((m|0)==(e|0)){p=c[l>>2]|0;c[d>>2]=p;i=q;return}ve(e,c[m>>2]|0,c[o>>2]|0);p=c[l>>2]|0;c[d>>2]=p;i=q;return}function je(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0;i=a+4|0;e=c[i>>2]|0;j=a+8|0;f=c[j>>2]|0;if((f|0)!=(e|0))c[j>>2]=f+(~((f+-8-e|0)>>>3)<<3);h=a+16|0;pc[c[(c[h>>2]|0)+12>>2]&1023](h,b);e=c[b+4>>2]|0;g=b+8|0;a:do if((e|0)==(c[g>>2]|0))l=5;else{while(1){a=rc[c[(c[h>>2]|0)+24>>2]&127](h)|0;f=c[h>>2]|0;if(a){k=f;break a}a=c[e>>2]|0;if(!a)break;pc[c[f+8>>2]&1023](h,a);e=e+4|0;if((e|0)==(c[g>>2]|0)){l=5;break a}}Ha(78999,79014,95,78956)}while(0);if((l|0)==5)k=c[h>>2]|0;pc[c[k+16>>2]&1023](h,b);if((i|0)==(d|0))return;we(d,c[i>>2]|0,c[j>>2]|0);return}function ke(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0;f=i;i=i+32|0;h=f;c[h>>2]=32;g=h+4|0;c[g>>2]=0;e=h+8|0;c[e>>2]=0;c[h+12>>2]=0;c[h+16>>2]=12880;c[h+20>>2]=h;a[h+24>>0]=0;je(h,b,d);c[h>>2]=32;d=c[g>>2]|0;if(!d){i=f;return}b=c[e>>2]|0;if((b|0)!=(d|0))c[e>>2]=b+(~((b+-8-d|0)>>>3)<<3);P_(d);i=f;return}function le(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,j=0,k=0;h=i;i=i+48|0;j=h+8|0;k=h;lM(k,e);e=j+4|0;c[e>>2]=0;g=j+8|0;c[g>>2]=0;c[j+12>>2]=0;c[j+16>>2]=12880;c[j+20>>2]=j;a[j+24>>0]=0;c[j>>2]=13072;lM(j+28|0,k);c[j+36>>2]=f;je(j,b,d);c[j>>2]=32;f=c[e>>2]|0;if(!f){i=h;return}e=c[g>>2]|0;if((e|0)!=(f|0))c[g>>2]=e+(~((e+-8-f|0)>>>3)<<3);P_(f);i=h;return}function me(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;f=i;i=i+16|0;e=f;d=o$(b,1488,1680,-1)|0;if(!d){id(a,b);i=f;return}c[e>>2]=a;if((a|0)!=0?(a=a+((c[(c[a>>2]|0)+-12>>2]|0)+4)|0,b=(c[a>>2]|0)+1|0,c[a>>2]=b,(b|0)==0):0)Ha(79054,79014,48,79068);pc[c[(c[d>>2]|0)+8>>2]&1023](d,e);d=c[e>>2]|0;if(!d){i=f;return}a=c[(c[d>>2]|0)+-12>>2]|0;e=d+a|0;a=d+(a+4)|0;b=(c[a>>2]|0)+-1|0;c[a>>2]=b;if((e|0)==0|(b|0)!=0){i=f;return}oc[c[(c[e>>2]|0)+4>>2]&2047](e);i=f;return}function ne(a,b){a=a|0;b=b|0;me(a+-16|0,b);return}function oe(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;f=i;i=i+16|0;e=f;d=o$(b,1488,1680,-1)|0;if(!d){kd(a,b);i=f;return}c[e>>2]=a;if((a|0)!=0?(a=a+((c[(c[a>>2]|0)+-12>>2]|0)+4)|0,b=(c[a>>2]|0)+1|0,c[a>>2]=b,(b|0)==0):0)Ha(79054,79014,48,79068);pc[c[(c[d>>2]|0)+12>>2]&1023](d,e);d=c[e>>2]|0;if(!d){i=f;return}a=c[(c[d>>2]|0)+-12>>2]|0;e=d+a|0;a=d+(a+4)|0;b=(c[a>>2]|0)+-1|0;c[a>>2]=b;if((e|0)==0|(b|0)!=0){i=f;return}oc[c[(c[e>>2]|0)+4>>2]&2047](e);i=f;return}function pe(a,b){a=a|0;b=b|0;oe(a+-16|0,b);return}function qe(){var b=0,d=0,e=0;b=O_(56)|0;e=b+52|0;c[e>>2]=0;c[b+4>>2]=0;c[b+8>>2]=0;c[b+12>>2]=0;d=b+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;a[d+24>>0]=0;c[b>>2]=12924;c[b+48>>2]=13024;c[b+16>>2]=12996;d=(c[e>>2]|0)+1|0;c[e>>2]=d;if(!d)Ha(79054,79014,48,79068);else return b|0;return 0}function re(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,j=0;g=i;i=i+32|0;j=g;c[j>>2]=13104;h=j+4|0;c[h>>2]=0;f=j+8|0;c[f>>2]=0;c[j+12>>2]=0;c[j+20>>2]=12880;c[j+24>>2]=j;a[j+28>>0]=0;ie(j,b,d,e);c[j>>2]=13104;d=c[h>>2]|0;if(!d){i=g;return}e=c[f>>2]|0;if((e|0)!=(d|0))c[f>>2]=e+(~((e+-4-d|0)>>>2)<<2);P_(d);i=g;return}function se(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,j=0,k=0;h=i;i=i+32|0;f=h+8|0;j=h;c[f>>2]=0;g=f+4|0;c[g>>2]=0;c[f+8>>2]=0;k=c[(c[b>>2]|0)+56>>2]|0;lM(j,d);Hc[k&15](b,f,j,e);kM(a,0,1);b=c[g>>2]|0;d=c[f>>2]|0;if((b|0)==(d|0)){e=b;d=b}else{b=0;while(1){if(sM(d+(b<<3)|0,a)|0)rM(a,(c[f>>2]|0)+(b<<3)|0)|0;b=b+1|0;d=c[g>>2]|0;e=c[f>>2]|0;if(b>>>0>=d-e>>3>>>0)break;else d=e}}if(!e){i=h;return}if((d|0)!=(e|0))c[g>>2]=d+(~((d+-8-e|0)>>>3)<<3);P_(e);i=h;return}function te(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,j=0;j=i;i=i+16|0;g=j;c[g>>2]=0;h=g+4|0;c[h>>2]=0;c[g+8>>2]=0;pc[c[(c[b>>2]|0)+52>>2]&1023](b,g);kM(a,0,1);e=c[h>>2]|0;b=c[g>>2]|0;do if((e|0)!=(b|0)){f=b;e=0;b=0;while(1){if(!e)d=b|(c[f>>2]|0)==-999999;else d=b;if(sM(f+(e<<3)|0,a)|0)rM(a,(c[g>>2]|0)+(e<<3)|0)|0;e=e+1|0;b=c[h>>2]|0;f=c[g>>2]|0;if(e>>>0>=b-f>>3>>>0)break;else b=d}if(d){d=c[a>>2]|0;if((d|0)>0){c[a>>2]=0-d;d=f;break}else{c[a>>2]=0;d=f;break}}else d=f}else{d=e;b=e}while(0);if(!d){i=j;return}if((b|0)!=(d|0))c[h>>2]=b+(~((b+-8-d|0)>>>3)<<3);P_(d);i=j;return}function ue(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,j=0;j=i;i=i+32|0;h=j;c[h>>2]=13136;g=h+4|0;kM(g,0,1);f=h+(c[(c[h>>2]|0)+-16>>2]|0)|0;c[h+12>>2]=12880;c[h+16>>2]=f;a[h+20>>0]=0;c[h>>2]=13172;rM(g,d)|0;h=h+12|0;pc[c[(c[h>>2]|0)+12>>2]&1023](h,b);d=c[b+4>>2]|0;g=b+8|0;a:do if((d|0)!=(c[g>>2]|0)){while(1){f=rc[c[(c[h>>2]|0)+24>>2]&127](h)|0;e=c[h>>2]|0;if(f){d=e;e=8;break}f=c[d>>2]|0;if(!f){e=6;break}pc[c[e+8>>2]&1023](h,f);d=d+4|0;if((d|0)==(c[g>>2]|0))break a}if((e|0)==6)Ha(78999,79014,95,78956);else if((e|0)==8){g=d+16|0;g=c[g>>2]|0;pc[g&1023](h,b);i=j;return b|0}}while(0);g=c[h>>2]|0;g=g+16|0;g=c[g>>2]|0;pc[g&1023](h,b);i=j;return b|0}function ve(a,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=b;h=d-k>>2;j=a+8|0;e=c[j>>2]|0;i=c[a>>2]|0;g=i;if(h>>>0<=e-g>>2>>>0){j=a+4|0;f=(c[j>>2]|0)-g>>2;a=h>>>0>f>>>0;h=a?b+(f<<2)|0:d;f=h;e=f-k|0;Sba(i|0,b|0,e|0)|0;e=i+(e>>2<<2)|0;if(!a){b=c[j>>2]|0;if((b|0)==(e|0))return;c[j>>2]=b+(~((b+-4-e|0)>>>2)<<2);return}if((h|0)==(d|0))return;g=c[j>>2]|0;f=(d+-4-f|0)>>>2;b=h;e=g;while(1){c[e>>2]=c[b>>2];b=b+4|0;if((b|0)==(d|0))break;else e=e+4|0}c[j>>2]=g+(f+1<<2);return}if(i){e=a+4|0;f=c[e>>2]|0;if((f|0)!=(i|0))c[e>>2]=f+(~((f+-4-g|0)>>>2)<<2);P_(i);c[j>>2]=0;c[e>>2]=0;c[a>>2]=0;e=0}if(h>>>0>1073741823){M_(a);e=c[j>>2]|0;f=c[a>>2]|0}else f=0;e=e-f|0;if(e>>2>>>0<536870911){e=e>>1;e=e>>>0>>0?h:e;if(e>>>0>1073741823)M_(a)}else e=1073741823;g=O_(e<<2)|0;h=a+4|0;c[h>>2]=g;c[a>>2]=g;c[j>>2]=g+(e<<2);if((b|0)==(d|0))return;f=(d+-4-k|0)>>>2;e=g;while(1){c[e>>2]=c[b>>2];b=b+4|0;if((b|0)==(d|0))break;else e=e+4|0}c[h>>2]=g+(f+1<<2);return}function we(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0;f=b;h=d-f>>3;i=a+8|0;e=c[i>>2]|0;j=c[a>>2]|0;g=j;if(h>>>0>e-g>>3>>>0){if(j){e=a+4|0;f=c[e>>2]|0;if((f|0)!=(j|0))c[e>>2]=f+(~((f+-8-g|0)>>>3)<<3);P_(j);c[i>>2]=0;c[e>>2]=0;c[a>>2]=0;e=0}if(h>>>0>536870911){M_(a);e=c[i>>2]|0;f=c[a>>2]|0}else f=0;e=e-f|0;if(e>>3>>>0<268435455){e=e>>2;e=e>>>0>>0?h:e;if(e>>>0>536870911){M_(a);f=e}else f=e}else f=536870911;e=O_(f<<3)|0;g=a+4|0;c[g>>2]=e;c[a>>2]=e;c[i>>2]=e+(f<<3);if((b|0)==(d|0))return;do{lM(e,b);e=(c[g>>2]|0)+8|0;c[g>>2]=e;b=b+8|0}while((b|0)!=(d|0));return}else{i=a+4|0;e=(c[i>>2]|0)-g>>3;h=h>>>0>e>>>0;e=h?b+(e<<3)|0:d;if((e|0)==(b|0))b=j;else{g=e+-8-f|0;f=j;while(1){rM(f,b)|0;b=b+8|0;if((b|0)==(e|0))break;else f=f+8|0}b=j+((g>>>3)+1<<3)|0}if(!h){e=c[i>>2]|0;if((e|0)==(b|0))return;c[i>>2]=e+(~((e+-8-b|0)>>>3)<<3);return}if((e|0)==(d|0))return;b=c[i>>2]|0;do{lM(b,e);b=(c[i>>2]|0)+8|0;c[i>>2]=b;e=e+8|0}while((e|0)!=(d|0));return}}function xe(a){a=a|0;_d(a,13036);c[a+48>>2]=12804;if(!(c[a+52>>2]|0))return;else Ha(74472,79014,56,74486)}function ye(a){a=a|0;xe(a);P_(a);return}function ze(a){a=a|0;a=a+-16|0;_d(a,13036);c[a+48>>2]=12804;if(!(c[a+52>>2]|0))return;else Ha(74472,79014,56,74486)}function Ae(a){a=a|0;a=a+-16|0;_d(a,13036);c[a+48>>2]=12804;if(!(c[a+52>>2]|0)){P_(a);return}else Ha(74472,79014,56,74486)}function Be(a){a=a|0;var b=0;b=c[(c[a>>2]|0)+-12>>2]|0;_d(a+b|0,13036);c[a+(b+48)>>2]=12804;if(!(c[a+(b+52)>>2]|0))return;else Ha(74472,79014,56,74486)}function Ce(a){a=a|0;var b=0,d=0;d=c[(c[a>>2]|0)+-12>>2]|0;b=a+d|0;_d(b,13036);c[a+(d+48)>>2]=12804;if(!(c[a+(d+52)>>2]|0)){P_(b);return}else Ha(74472,79014,56,74486)}function De(a,b){a=a|0;b=b|0;return}function Ee(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0;rM(a+4|0,d)|0;g=a+12|0;pc[c[(c[g>>2]|0)+12>>2]&1023](g,b);d=c[b+4>>2]|0;f=b+8|0;a:do if((d|0)!=(c[f>>2]|0)){e=d;while(1){a=rc[c[(c[g>>2]|0)+24>>2]&127](g)|0;d=c[g>>2]|0;if(a){a=8;break}a=c[e>>2]|0;if(!a){a=6;break}pc[c[d+8>>2]&1023](g,a);e=e+4|0;if((e|0)==(c[f>>2]|0))break a}if((a|0)==6)Ha(78999,79014,95,78956);else if((a|0)==8){f=d+16|0;f=c[f>>2]|0;pc[f&1023](g,b);return}}while(0);f=c[g>>2]|0;f=f+16|0;f=c[f>>2]|0;pc[f&1023](g,b);return}function Fe(a){a=a|0;return}function Ge(a){a=a|0;P_(a);return}function He(a,b){a=a|0;b=b|0;return}function Ie(a){a=a|0;return}function Je(a){a=a|0;P_(a);return}function Ke(a,b){a=a|0;b=b|0;b=c[b>>2]|0;if(!b)Ha(78999,79014,95,78956);else{GE(b,a+4|0)|0;return}}function Le(a){a=a|0;var b=0,d=0;c[a>>2]=13104;d=c[a+4>>2]|0;if(!d)return;a=a+8|0;b=c[a>>2]|0;if((b|0)!=(d|0))c[a>>2]=b+(~((b+-4-d|0)>>>2)<<2);P_(d);return}function Me(a){a=a|0;var b=0,d=0,e=0;c[a>>2]=13104;b=c[a+4>>2]|0;if(!b){P_(a);return}d=a+8|0;e=c[d>>2]|0;if((e|0)!=(b|0))c[d>>2]=e+(~((e+-4-b|0)>>>2)<<2);P_(b);P_(a);return}function Ne(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;g=i;i=i+16|0;f=g;b=c[b>>2]|0;if(!b)Ha(78999,79014,102,79043);b=DE(b,a+16|0)|0;c[f>>2]=b;d=a+8|0;e=c[d>>2]|0;if((e|0)==(c[a+12>>2]|0)){Oe(a+4|0,f);i=g;return}else{c[e>>2]=b;c[d>>2]=e+4;i=g;return}}function Oe(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;d=c[a>>2]|0;e=d;h=((c[l>>2]|0)-e>>2)+1|0;if(h>>>0>1073741823){M_(a);e=c[a>>2]|0;d=e}k=a+8|0;g=d;f=(c[k>>2]|0)-g|0;if(f>>2>>>0<536870911){f=f>>1;f=f>>>0>>0?h:f;h=(c[l>>2]|0)-g|0;g=h>>2;if(!f){j=0;i=0;f=h}else m=6}else{h=(c[l>>2]|0)-g|0;f=1073741823;g=h>>2;m=6}if((m|0)==6){j=f;i=O_(f<<2)|0;f=h}c[i+(g<<2)>>2]=c[b>>2];Rba(i|0,d|0,f|0)|0;c[a>>2]=i;c[l>>2]=i+(g+1<<2);c[k>>2]=i+(j<<2);if(!e)return;P_(e);return}function Pe(a){a=a|0;var b=0,d=0;c[a>>2]=32;d=c[a+4>>2]|0;if(!d)return;a=a+8|0;b=c[a>>2]|0;if((b|0)!=(d|0))c[a>>2]=b+(~((b+-8-d|0)>>>3)<<3);P_(d);return}function Qe(a){a=a|0;var b=0,d=0,e=0;c[a>>2]=32;b=c[a+4>>2]|0;if(!b){P_(a);return}d=a+8|0;e=c[d>>2]|0;if((e|0)!=(b|0))c[d>>2]=e+(~((e+-8-b|0)>>>3)<<3);P_(b);P_(a);return}function Re(a,b){a=a|0;b=b|0;var d=0,e=0;b=c[b>>2]|0;if(!b)Ha(78999,79014,102,79043);b=b+60|0;d=a+8|0;e=c[d>>2]|0;if((e|0)==(c[a+12>>2]|0)){Se(a+4|0,b);return}else{lM(e,b);c[d>>2]=(c[d>>2]|0)+8;return}}function Se(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;k=a+4|0;d=c[a>>2]|0;f=((c[k>>2]|0)-d>>3)+1|0;if(f>>>0>536870911){M_(a);d=c[a>>2]|0}j=a+8|0;e=(c[j>>2]|0)-d|0;if(e>>3>>>0<268435455){e=e>>2;e=e>>>0>>0?f:e;d=(c[k>>2]|0)-d>>3;if(!e){f=0;h=0;e=d}else g=6}else{e=536870911;d=(c[k>>2]|0)-d>>3;g=6}if((g|0)==6){f=e;h=O_(e<<3)|0;e=d}g=h+(e<<3)|0;d=g;i=h+(f<<3)|0;lM(g,b);h=h+(e+1<<3)|0;e=c[a>>2]|0;f=c[k>>2]|0;if((f|0)==(e|0))f=a;else{do{f=f+-8|0;lM(g+-8|0,f);g=d+-8|0;d=g}while((f|0)!=(e|0));f=a;e=c[a>>2]|0}c[f>>2]=d;c[k>>2]=h;c[j>>2]=i;if(!e)return;P_(e);return}function Te(a){a=a|0;var b=0,d=0;c[a>>2]=32;d=c[a+4>>2]|0;if(!d)return;a=a+8|0;b=c[a>>2]|0;if((b|0)!=(d|0))c[a>>2]=b+(~((b+-8-d|0)>>>3)<<3);P_(d);return}function Ue(a){a=a|0;var b=0,d=0,e=0;c[a>>2]=32;b=c[a+4>>2]|0;if(!b){P_(a);return}d=a+8|0;e=c[d>>2]|0;if((e|0)!=(b|0))c[d>>2]=e+(~((e+-8-b|0)>>>3)<<3);P_(b);P_(a);return}function Ve(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;f=i;i=i+16|0;e=f;b=c[b>>2]|0;if(!b)Ha(78999,79014,102,79043);FE(e,b,a+28|0,a+36|0);b=a+8|0;d=c[b>>2]|0;if((d|0)==(c[a+12>>2]|0)){Se(a+4|0,e);i=f;return}else{lM(d,e);c[b>>2]=(c[b>>2]|0)+8;i=f;return}}function We(a){a=a|0;var b=0,c=0;c=i;i=i+16|0;a=c;b=hF()|0;if(!b){i=c;return b|0}l2(a,61531,5);ad(b,a);o2(a);i=c;return b|0}function Xe(a){a=a|0;var b=0,c=0;c=i;i=i+16|0;a=c;b=mF()|0;if(!b){i=c;return b|0}l2(a,61537,5);ad(b,a);o2(a);i=c;return b|0}function Ye(a){a=a|0;var b=0,c=0;c=i;i=i+16|0;a=c;b=qe()|0;if(!b){i=c;return b|0}l2(a,61543,5);ad(b,a);o2(a);i=c;return b|0}function Ze(a,b){a=a|0;b=b|0;a=NE()|0;if(!a)return a|0;ad(a,b);return a|0}function _e(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,j=0;j=i;i=i+16|0;f=j;g=cf(b+4|0,d)|0;if((g|0)!=(b+8|0)?(h=c[g+28>>2]|0,(h|0)!=0):0){f=zc[c[(c[h>>2]|0)+8>>2]&255](h,e)|0;if(!f)Ha(78999,79014,102,79043);ad(f,d);d=f;i=j;return d|0}h=df(52028,61549,59)|0;b=a[d>>0]|0;e=(b&1)==0;d=df(df(h,e?d+1|0:c[d+8>>2]|0,e?(b&255)>>>1:c[d+4>>2]|0)|0,74470,1)|0;c[f>>2]=S2(d+(c[(c[d>>2]|0)+-12>>2]|0)|0)|0;b=o8(f,54552)|0;b=zc[c[(c[b>>2]|0)+28>>2]&255](b,10)|0;m8(f);R3(d,b)|0;B3(d)|0;d=0;i=j;return d|0}function $e(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0,ta=0,ua=0,va=0,wa=0,xa=0,ya=0,za=0,Aa=0,Ba=0,Ca=0,Da=0,Ea=0,Fa=0,Ga=0,Ha=0,Ia=0,Ja=0,Ka=0,La=0,Ma=0,Na=0,Oa=0,Pa=0,Qa=0,Ra=0,Sa=0,Ta=0,Ua=0,Va=0,Wa=0,Xa=0,Ya=0,Za=0,_a=0,$a=0,ab=0,bb=0,cb=0,db=0,eb=0,fb=0,gb=0,hb=0,ib=0,jb=0,kb=0,lb=0,mb=0,nb=0,ob=0,pb=0,qb=0,rb=0,sb=0,tb=0,ub=0,vb=0,wb=0,xb=0,yb=0,zb=0;b=i;i=i+1552|0;zb=b+1536|0;yb=b+1524|0;xb=b+1512|0;wb=b+1500|0;vb=b+1488|0;ub=b+1476|0;tb=b+1464|0;sb=b+1452|0;rb=b+1440|0;qb=b+1428|0;pb=b+1416|0;ob=b+1404|0;mb=b+1392|0;nb=b+1380|0;kb=b+1368|0;lb=b+1356|0;jb=b+1344|0;ib=b+1332|0;hb=b+1320|0;gb=b+1308|0;fb=b+1296|0;eb=b+1284|0;db=b+1272|0;cb=b+1260|0;bb=b+1248|0;$a=b+1236|0;ab=b+1224|0;_a=b+1212|0;Za=b+1200|0;Ya=b+1188|0;Xa=b+1176|0;Wa=b+1164|0;Va=b+1152|0;Ua=b+1140|0;Ta=b+1128|0;Sa=b+1116|0;Ra=b+1104|0;Qa=b+1092|0;Pa=b+1080|0;Oa=b+1068|0;Na=b+1056|0;Ma=b+1044|0;La=b+1032|0;Ka=b+1020|0;Ja=b+1008|0;Ia=b+996|0;Ha=b+984|0;Ga=b+972|0;Fa=b+960|0;Ea=b+948|0;Da=b+936|0;Ca=b+924|0;Ba=b+912|0;Aa=b+900|0;za=b+888|0;ya=b+876|0;xa=b+864|0;wa=b+852|0;ua=b+840|0;va=b+828|0;ta=b+816|0;sa=b+804|0;ra=b+792|0;qa=b+780|0;pa=b+768|0;oa=b+756|0;na=b+744|0;ma=b+732|0;la=b+720|0;ka=b+708|0;ja=b+696|0;ia=b+684|0;ha=b+672|0;ga=b+660|0;fa=b+648|0;ea=b+636|0;da=b+624|0;ca=b+612|0;ba=b+600|0;aa=b+588|0;$=b+576|0;_=b+564|0;Y=b+552|0;Z=b+540|0;X=b+528|0;W=b+516|0;U=b+504|0;V=b+492|0;T=b+480|0;S=b+468|0;R=b+456|0;Q=b+444|0;P=b+432|0;N=b+420|0;O=b+408|0;M=b+396|0;L=b+384|0;K=b+372|0;J=b+360|0;I=b+348|0;H=b+336|0;G=b+324|0;F=b+312|0;E=b+300|0;D=b+288|0;C=b+276|0;B=b+264|0;A=b+252|0;z=b+240|0;y=b+228|0;w=b+216|0;x=b+204|0;v=b+192|0;u=b+180|0;t=b+168|0;s=b+156|0;r=b+144|0;q=b+132|0;p=b+120|0;o=b+108|0;n=b+96|0;m=b+84|0;l=b+72|0;k=b+60|0;j=b+48|0;h=b+36|0;g=b+24|0;f=b+12|0;d=b;c[a>>2]=13200;e=a+4|0;c[a+8>>2]=0;c[a+12>>2]=0;c[e>>2]=a+8;a=O_(4)|0;c[a>>2]=13216;l2(zb,61609,3);c[(ef(e,zb)|0)>>2]=a;o2(zb);a=O_(4)|0;c[a>>2]=13236;l2(yb,61613,5);c[(ef(e,yb)|0)>>2]=a;o2(yb);a=O_(4)|0;c[a>>2]=13256;l2(xb,61619,10);c[(ef(e,xb)|0)>>2]=a;o2(xb);a=O_(4)|0;c[a>>2]=13276;l2(wb,61630,8);c[(ef(e,wb)|0)>>2]=a;o2(wb);a=O_(4)|0;c[a>>2]=13296;l2(vb,61639,6);c[(ef(e,vb)|0)>>2]=a;o2(vb);a=O_(4)|0;c[a>>2]=13316;l2(ub,61646,5);c[(ef(e,ub)|0)>>2]=a;o2(ub);a=O_(4)|0;c[a>>2]=13336;l2(tb,61652,5);c[(ef(e,tb)|0)>>2]=a;o2(tb);a=O_(4)|0;c[a>>2]=13356;l2(sb,61658,4);c[(ef(e,sb)|0)>>2]=a;o2(sb);a=O_(4)|0;c[a>>2]=13376;l2(rb,61663,9);c[(ef(e,rb)|0)>>2]=a;o2(rb);a=O_(4)|0;c[a>>2]=13396;l2(qb,78390,3);c[(ef(e,qb)|0)>>2]=a;o2(qb);a=O_(4)|0;c[a>>2]=13416;l2(pb,61673,9);c[(ef(e,pb)|0)>>2]=a;o2(pb);a=O_(4)|0;c[a>>2]=13436;l2(ob,61683,4);c[(ef(e,ob)|0)>>2]=a;o2(ob);l2(mb,61683,4);a=c[(ef(e,mb)|0)>>2]|0;l2(nb,61688,2);c[(ef(e,nb)|0)>>2]=a;o2(nb);o2(mb);l2(kb,61683,4);a=c[(ef(e,kb)|0)>>2]|0;l2(lb,76929,1);c[(ef(e,lb)|0)>>2]=a;o2(lb);o2(kb);a=O_(4)|0;c[a>>2]=13456;l2(jb,61691,9);c[(ef(e,jb)|0)>>2]=a;o2(jb);a=O_(4)|0;c[a>>2]=13476;l2(ib,61701,7);c[(ef(e,ib)|0)>>2]=a;o2(ib);a=O_(4)|0;c[a>>2]=13496;l2(hb,61709,9);c[(ef(e,hb)|0)>>2]=a;o2(hb);a=O_(4)|0;c[a>>2]=13516;l2(gb,61719,8);c[(ef(e,gb)|0)>>2]=a;o2(gb);a=O_(4)|0;c[a>>2]=13536;l2(fb,61728,6);c[(ef(e,fb)|0)>>2]=a;o2(fb);a=O_(4)|0;c[a>>2]=13556;l2(eb,61735,10);c[(ef(e,eb)|0)>>2]=a;o2(eb);a=O_(4)|0;c[a>>2]=13576;l2(db,61746,4);c[(ef(e,db)|0)>>2]=a;o2(db);a=O_(4)|0;c[a>>2]=13596;l2(cb,61751,4);c[(ef(e,cb)|0)>>2]=a;o2(cb);a=O_(4)|0;c[a>>2]=13616;l2(bb,61756,5);c[(ef(e,bb)|0)>>2]=a;o2(bb);l2($a,61756,5);a=c[(ef(e,$a)|0)>>2]|0;l2(ab,61762,6);c[(ef(e,ab)|0)>>2]=a;o2(ab);o2($a);a=O_(4)|0;c[a>>2]=13636;l2(_a,61769,8);c[(ef(e,_a)|0)>>2]=a;o2(_a);a=O_(4)|0;c[a>>2]=13656;l2(Za,61778,5);c[(ef(e,Za)|0)>>2]=a;o2(Za);a=O_(4)|0;c[a>>2]=13676;l2(Ya,61784,10);c[(ef(e,Ya)|0)>>2]=a;o2(Ya);a=O_(4)|0;c[a>>2]=13696;l2(Xa,61795,8);c[(ef(e,Xa)|0)>>2]=a;o2(Xa);a=O_(4)|0;c[a>>2]=13716;l2(Wa,61804,3);c[(ef(e,Wa)|0)>>2]=a;o2(Wa);a=O_(4)|0;c[a>>2]=13736;l2(Va,61808,6);c[(ef(e,Va)|0)>>2]=a;o2(Va);a=O_(4)|0;c[a>>2]=13756;l2(Ua,61815,12);c[(ef(e,Ua)|0)>>2]=a;o2(Ua);a=O_(4)|0;c[a>>2]=13776;l2(Ta,61828,6);c[(ef(e,Ta)|0)>>2]=a;o2(Ta);a=O_(4)|0;c[a>>2]=13796;l2(Sa,61835,8);c[(ef(e,Sa)|0)>>2]=a;o2(Sa);a=O_(4)|0;c[a>>2]=13816;l2(Ra,61844,14);c[(ef(e,Ra)|0)>>2]=a;o2(Ra);a=O_(4)|0;c[a>>2]=13836;l2(Qa,61859,7);c[(ef(e,Qa)|0)>>2]=a;o2(Qa);a=O_(4)|0;c[a>>2]=13856;l2(Pa,61867,9);c[(ef(e,Pa)|0)>>2]=a;o2(Pa);a=O_(4)|0;c[a>>2]=13876;l2(Oa,61877,3);c[(ef(e,Oa)|0)>>2]=a;o2(Oa);a=O_(4)|0;c[a>>2]=13896;l2(Na,61881,8);c[(ef(e,Na)|0)>>2]=a;o2(Na);a=O_(4)|0;c[a>>2]=13916;l2(Ma,61890,6);c[(ef(e,Ma)|0)>>2]=a;o2(Ma);a=O_(4)|0;c[a>>2]=13936;l2(La,61897,10);c[(ef(e,La)|0)>>2]=a;o2(La);a=O_(4)|0;c[a>>2]=13956;l2(Ka,61908,7);c[(ef(e,Ka)|0)>>2]=a;o2(Ka);a=O_(4)|0;c[a>>2]=13976;l2(Ja,61916,9);c[(ef(e,Ja)|0)>>2]=a;o2(Ja);a=O_(4)|0;c[a>>2]=13996;l2(Ia,61926,9);c[(ef(e,Ia)|0)>>2]=a;o2(Ia);a=O_(4)|0;c[a>>2]=14016;l2(Ha,61936,6);c[(ef(e,Ha)|0)>>2]=a;o2(Ha);a=O_(4)|0;c[a>>2]=14036;l2(Ga,61943,7);c[(ef(e,Ga)|0)>>2]=a;o2(Ga);a=O_(4)|0;c[a>>2]=14056;l2(Fa,61951,4);c[(ef(e,Fa)|0)>>2]=a;o2(Fa);a=O_(4)|0;c[a>>2]=14076;l2(Ea,61956,9);c[(ef(e,Ea)|0)>>2]=a;o2(Ea);a=O_(4)|0;c[a>>2]=14096;l2(Da,61966,5);c[(ef(e,Da)|0)>>2]=a;o2(Da);a=O_(4)|0;c[a>>2]=14116;l2(Ca,61972,11);c[(ef(e,Ca)|0)>>2]=a;o2(Ca);a=O_(4)|0;c[a>>2]=14136;l2(Ba,61984,9);c[(ef(e,Ba)|0)>>2]=a;o2(Ba);a=O_(4)|0;c[a>>2]=14156;l2(Aa,61994,11);c[(ef(e,Aa)|0)>>2]=a;o2(Aa);a=O_(4)|0;c[a>>2]=14176;l2(za,62006,12);c[(ef(e,za)|0)>>2]=a;o2(za);a=O_(4)|0;c[a>>2]=14196;l2(ya,62019,10);c[(ef(e,ya)|0)>>2]=a;o2(ya);a=O_(4)|0;c[a>>2]=14216;l2(xa,62030,5);c[(ef(e,xa)|0)>>2]=a;o2(xa);a=O_(4)|0;c[a>>2]=14236;l2(wa,62036,6);c[(ef(e,wa)|0)>>2]=a;o2(wa);l2(ua,62036,6);a=c[(ef(e,ua)|0)>>2]|0;l2(va,62043,1);c[(ef(e,va)|0)>>2]=a;o2(va);o2(ua);a=O_(4)|0;c[a>>2]=14256;l2(ta,76695,3);c[(ef(e,ta)|0)>>2]=a;o2(ta);a=O_(4)|0;c[a>>2]=14276;l2(sa,62045,5);c[(ef(e,sa)|0)>>2]=a;o2(sa);a=O_(4)|0;c[a>>2]=14296;l2(ra,62051,6);c[(ef(e,ra)|0)>>2]=a;o2(ra);a=O_(4)|0;c[a>>2]=14316;l2(qa,62058,7);c[(ef(e,qa)|0)>>2]=a;o2(qa);a=O_(4)|0;c[a>>2]=14336;l2(pa,62066,4);c[(ef(e,pa)|0)>>2]=a;o2(pa);a=O_(4)|0;c[a>>2]=14356;l2(oa,62071,5);c[(ef(e,oa)|0)>>2]=a;o2(oa);a=O_(4)|0;c[a>>2]=14376;l2(na,62077,5);c[(ef(e,na)|0)>>2]=a;o2(na);a=O_(4)|0;c[a>>2]=14396;l2(ma,62083,4);c[(ef(e,ma)|0)>>2]=a;o2(ma);a=O_(4)|0;c[a>>2]=14416;l2(la,62088,7);c[(ef(e,la)|0)>>2]=a;o2(la);a=O_(4)|0;c[a>>2]=14436;l2(ka,62096,7);c[(ef(e,ka)|0)>>2]=a;o2(ka);a=O_(4)|0;c[a>>2]=14456;l2(ja,62104,9);c[(ef(e,ja)|0)>>2]=a;o2(ja);a=O_(4)|0;c[a>>2]=14476;l2(ia,62114,10);c[(ef(e,ia)|0)>>2]=a;o2(ia);a=O_(4)|0;c[a>>2]=14496;l2(ha,62125,3);c[(ef(e,ha)|0)>>2]=a;o2(ha);a=O_(4)|0;c[a>>2]=14516;l2(ga,62129,10);c[(ef(e,ga)|0)>>2]=a;o2(ga);a=O_(4)|0;c[a>>2]=14536;l2(fa,62140,4);c[(ef(e,fa)|0)>>2]=a;o2(fa);a=O_(4)|0;c[a>>2]=14556;l2(ea,62145,11);c[(ef(e,ea)|0)>>2]=a;o2(ea);a=O_(4)|0;c[a>>2]=14576;l2(da,62157,9);c[(ef(e,da)|0)>>2]=a;o2(da);a=O_(4)|0;c[a>>2]=14596;l2(ca,62167,10);c[(ef(e,ca)|0)>>2]=a;o2(ca);a=O_(4)|0;c[a>>2]=14616;l2(ba,62178,3);c[(ef(e,ba)|0)>>2]=a;o2(ba);a=O_(4)|0;c[a>>2]=14636;l2(aa,62182,8);c[(ef(e,aa)|0)>>2]=a;o2(aa);a=O_(4)|0;c[a>>2]=14656;l2($,62191,6);c[(ef(e,$)|0)>>2]=a;o2($);a=O_(4)|0;c[a>>2]=14676;l2(_,62198,5);c[(ef(e,_)|0)>>2]=a;o2(_);l2(Y,61658,4);a=c[(ef(e,Y)|0)>>2]|0;l2(Z,62204,3);c[(ef(e,Z)|0)>>2]=a;o2(Z);o2(Y);a=O_(4)|0;c[a>>2]=14696;l2(X,62208,13);c[(ef(e,X)|0)>>2]=a;o2(X);a=O_(4)|0;c[a>>2]=14716;l2(W,62222,4);c[(ef(e,W)|0)>>2]=a;o2(W);l2(U,62222,4);a=c[(ef(e,U)|0)>>2]|0;l2(V,62227,2);c[(ef(e,V)|0)>>2]=a;o2(V);o2(U);a=O_(4)|0;c[a>>2]=14736;l2(T,62230,9);c[(ef(e,T)|0)>>2]=a;o2(T);a=O_(4)|0;c[a>>2]=14756;l2(S,62240,7);c[(ef(e,S)|0)>>2]=a;o2(S);a=O_(4)|0;c[a>>2]=14776;l2(R,62248,5);c[(ef(e,R)|0)>>2]=a;o2(R);a=O_(4)|0;c[a>>2]=14796;l2(Q,62254,7);c[(ef(e,Q)|0)>>2]=a;o2(Q);a=O_(4)|0;c[a>>2]=14816;l2(P,62262,10);c[(ef(e,P)|0)>>2]=a;o2(P);l2(N,62262,10);a=c[(ef(e,N)|0)>>2]|0;l2(O,61543,5);c[(ef(e,O)|0)>>2]=a;o2(O);o2(N);a=O_(4)|0;c[a>>2]=14836;l2(M,62273,5);c[(ef(e,M)|0)>>2]=a;o2(M);a=O_(4)|0;c[a>>2]=14856;l2(L,62279,10);c[(ef(e,L)|0)>>2]=a;o2(L);a=O_(4)|0;c[a>>2]=14876;l2(K,62290,8);c[(ef(e,K)|0)>>2]=a;o2(K);a=O_(4)|0;c[a>>2]=14896;l2(J,62299,5);c[(ef(e,J)|0)>>2]=a;o2(J);a=O_(4)|0;c[a>>2]=14916;l2(I,62305,11);c[(ef(e,I)|0)>>2]=a;o2(I);a=O_(4)|0;c[a>>2]=14936;l2(H,62317,8);c[(ef(e,H)|0)>>2]=a;o2(H);a=O_(4)|0;c[a>>2]=14956;l2(G,62326,7);c[(ef(e,G)|0)>>2]=a;o2(G);a=O_(4)|0;c[a>>2]=14976;l2(F,62334,9);c[(ef(e,F)|0)>>2]=a;o2(F);a=O_(4)|0;c[a>>2]=14996;l2(E,62344,9);c[(ef(e,E)|0)>>2]=a;o2(E);a=O_(4)|0;c[a>>2]=15016;l2(D,62354,8);c[(ef(e,D)|0)>>2]=a;o2(D);a=O_(4)|0;c[a>>2]=15036;l2(C,62363,7);c[(ef(e,C)|0)>>2]=a;o2(C);a=O_(4)|0;c[a>>2]=15056;l2(B,62371,12);c[(ef(e,B)|0)>>2]=a;o2(B);a=O_(4)|0;c[a>>2]=15076;l2(A,62384,5);c[(ef(e,A)|0)>>2]=a;o2(A);a=O_(4)|0;c[a>>2]=15096;l2(z,62390,3);c[(ef(e,z)|0)>>2]=a;o2(z);a=O_(4)|0;c[a>>2]=15116;l2(y,62394,4);c[(ef(e,y)|0)>>2]=a;o2(y);l2(w,62394,4);a=c[(ef(e,w)|0)>>2]|0;l2(x,62399,1);c[(ef(e,x)|0)>>2]=a;o2(x);o2(w);a=O_(4)|0;c[a>>2]=15136;l2(v,76802,3);c[(ef(e,v)|0)>>2]=a;o2(v);a=O_(4)|0;c[a>>2]=15156;l2(u,62401,8);c[(ef(e,u)|0)>>2]=a;o2(u);a=O_(4)|0;c[a>>2]=15176;l2(t,62410,6);c[(ef(e,t)|0)>>2]=a;o2(t);a=O_(4)|0;c[a>>2]=15196;l2(s,62417,5);c[(ef(e,s)|0)>>2]=a;o2(s);a=O_(4)|0;c[a>>2]=15216;l2(r,62423,4);c[(ef(e,r)|0)>>2]=a;o2(r);a=O_(4)|0;c[a>>2]=15236;l2(q,62428,5);c[(ef(e,q)|0)>>2]=a;o2(q);a=O_(4)|0;c[a>>2]=15256;l2(p,62434,6);c[(ef(e,p)|0)>>2]=a;o2(p);a=O_(4)|0;c[a>>2]=15276;l2(o,62441,4);c[(ef(e,o)|0)>>2]=a;o2(o);a=O_(4)|0;c[a>>2]=15296;l2(n,62446,5);c[(ef(e,n)|0)>>2]=a;o2(n);a=O_(4)|0;c[a>>2]=15316;l2(m,62452,5);c[(ef(e,m)|0)>>2]=a;o2(m);a=O_(4)|0;c[a>>2]=15336;l2(l,62458,10);c[(ef(e,l)|0)>>2]=a;o2(l);a=O_(4)|0;c[a>>2]=15356;l2(k,62469,8);c[(ef(e,k)|0)>>2]=a;o2(k);a=O_(4)|0;c[a>>2]=15376;l2(j,62478,6);c[(ef(e,j)|0)>>2]=a;o2(j);a=O_(4)|0;c[a>>2]=15396;l2(h,62485,6);c[(ef(e,h)|0)>>2]=a;o2(h);a=O_(4)|0;c[a>>2]=15416;l2(g,62492,8);c[(ef(e,g)|0)>>2]=a;o2(g);a=O_(4)|0;c[a>>2]=15436;l2(f,62501,8);c[(ef(e,f)|0)>>2]=a;o2(f);a=O_(4)|0;c[a>>2]=15456;l2(d,62510,4);c[(ef(e,d)|0)>>2]=a;o2(d);i=b;return}function af(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,j=0,k=0,l=0,m=0;f=i;i=i+96|0;m=f+84|0;l=f+72|0;k=f+60|0;j=f+48|0;h=f+36|0;g=f+24|0;d=f+12|0;b=f;c[a>>2]=13200;e=a+4|0;l2(m,61688,2);c[(ef(e,m)|0)>>2]=0;o2(m);l2(l,76929,1);c[(ef(e,l)|0)>>2]=0;o2(l);l2(k,61762,6);c[(ef(e,k)|0)>>2]=0;o2(k);l2(j,62043,1);c[(ef(e,j)|0)>>2]=0;o2(j);l2(h,62204,3);c[(ef(e,h)|0)>>2]=0;o2(h);l2(g,62227,2);c[(ef(e,g)|0)>>2]=0;o2(g);l2(d,61543,5);c[(ef(e,d)|0)>>2]=0;o2(d);l2(b,62399,1);c[(ef(e,b)|0)>>2]=0;o2(b);b=c[e>>2]|0;d=a+8|0;if((b|0)==(d|0)){m=c[d>>2]|0;ff(e,m);i=f;return}while(1){a=c[b+28>>2]|0;if(a)oc[c[(c[a>>2]|0)+4>>2]&2047](a);a=c[b+4>>2]|0;if(!a)while(1){a=c[b+8>>2]|0;if((c[a>>2]|0)==(b|0))break;else b=a}else while(1){b=c[a>>2]|0;if(!b)break;else a=b}if((a|0)==(d|0))break;else b=a}m=c[d>>2]|0;ff(e,m);i=f;return}function bf(a){a=a|0;af(a);P_(a);return}function cf(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0;f=b+4|0;e=c[f>>2]|0;if(e){g=a[d>>0]|0;b=(g&1)==0;g=b?(g&255)>>>1:c[d+4>>2]|0;d=b?d+1|0:c[d+8>>2]|0;b=f;a:do{while(1){h=e+16|0;i=a[h>>0]|0;j=(i&1)==0;i=j?(i&255)>>>1:c[e+20>>2]|0;h=c1(j?h+1|0:c[e+24>>2]|0,d,g>>>0>>0?g:i)|0;if((((h|0)==0?(i>>>0>>0?-2147483648:0):h)|0)>=0){b=e;break}e=c[e+4>>2]|0;if(!e)break a}e=c[b>>2]|0}while((e|0)!=0);if((b|0)!=(f|0)?(j=b+16|0,i=a[j>>0]|0,h=(i&1)==0,i=h?(i&255)>>>1:c[b+20>>2]|0,j=c1(d,h?j+1|0:c[b+24>>2]|0,i>>>0>>0?i:g)|0,(((j|0)==0?(g>>>0>>0?-2147483648:0):j)|0)>=0):0){j=b;return j|0}}j=f;return j|0}function df(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0;n=i;i=i+32|0;h=n+16|0;m=n+8|0;j=n;M3(m,b);if(!(a[m>>0]|0)){N3(m);i=n;return b|0}f=c[(c[b>>2]|0)+-12>>2]|0;c[j>>2]=c[b+(f+24)>>2];l=b+f|0;k=c[b+(f+4)>>2]|0;g=d+e|0;f=b+(f+76)|0;e=c[f>>2]|0;if((e|0)==-1){c[h>>2]=S2(l)|0;e=o8(h,54552)|0;e=zc[c[(c[e>>2]|0)+28>>2]&255](e,32)|0;m8(h);e=e<<24>>24;c[f>>2]=e}c[h>>2]=c[j>>2];if(xE(h,d,(k&176|0)==32?g:d,g,l,e&255)|0){N3(m);i=n;return b|0}d=c[(c[b>>2]|0)+-12>>2]|0;N2(b+d|0,c[b+(d+16)>>2]|5);N3(m);i=n;return b|0}function ef(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0;h=i;i=i+16|0;e=h;f=jE(a,e,b)|0;d=c[f>>2]|0;if(d){a=d;a=a+28|0;i=h;return a|0}g=O_(32)|0;k2(g+16|0,b);c[g+28>>2]=0;d=c[e>>2]|0;c[g>>2]=0;c[g+4>>2]=0;c[g+8>>2]=d;c[f>>2]=g;d=c[c[a>>2]>>2]|0;if(!d)d=g;else{c[a>>2]=d;d=c[f>>2]|0}kE(c[a+4>>2]|0,d);a=a+8|0;c[a>>2]=(c[a>>2]|0)+1;a=g;a=a+28|0;i=h;return a|0}function ff(a,b){a=a|0;b=b|0;if(!b)return;ff(a,c[b>>2]|0);ff(a,c[b+4>>2]|0);o2(b+16|0);P_(b);return}function gf(a){a=a|0;return}function hf(a){a=a|0;P_(a);return}function jf(b,d){b=b|0;d=d|0;var e=0,f=0;e=O_(64)|0;c[e+4>>2]=0;c[e+8>>2]=0;c[e+12>>2]=0;f=e+20|0;c[f>>2]=0;c[f+4>>2]=0;c[f+8>>2]=0;c[f+12>>2]=0;c[f+16>>2]=0;c[f+20>>2]=0;a[f+24>>0]=0;c[e+48>>2]=d;c[e>>2]=15480;c[e+56>>2]=15576;c[e+16>>2]=15548;c[e+52>>2]=122;c[e+60>>2]=2;f=c[(c[e>>2]|0)+-12>>2]|0;b=e+f|0;f=e+(f+4)|0;d=(c[f>>2]|0)+-1|0;c[f>>2]=d;if((b|0)==0|(d|0)!=0)return e|0;oc[c[(c[b>>2]|0)+4>>2]&2047](b);return e|0}function kf(a){a=a|0;_d(a,15592);c[a+56>>2]=12804;if(!(c[a+60>>2]|0))return;else Ha(74472,79014,56,74486)}function lf(a){a=a|0;kf(a);P_(a);return}function mf(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;f=i;i=i+16|0;e=f;d=o$(b,1488,1864,-1)|0;if(!d){DF(a,b);i=f;return}c[e>>2]=a;if((a|0)!=0?(a=a+((c[(c[a>>2]|0)+-12>>2]|0)+4)|0,b=(c[a>>2]|0)+1|0,c[a>>2]=b,(b|0)==0):0)Ha(79054,79014,48,79068);pc[c[(c[d>>2]|0)+8>>2]&1023](d,e);d=c[e>>2]|0;if(!d){i=f;return}a=c[(c[d>>2]|0)+-12>>2]|0;e=d+a|0;a=d+(a+4)|0;b=(c[a>>2]|0)+-1|0;c[a>>2]=b;if((e|0)==0|(b|0)!=0){i=f;return}oc[c[(c[e>>2]|0)+4>>2]&2047](e);i=f;return}function nf(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;f=i;i=i+16|0;e=f;d=o$(b,1488,1864,-1)|0;if(!d){FF(a,b);i=f;return}c[e>>2]=a;if((a|0)!=0?(a=a+((c[(c[a>>2]|0)+-12>>2]|0)+4)|0,b=(c[a>>2]|0)+1|0,c[a>>2]=b,(b|0)==0):0)Ha(79054,79014,48,79068);pc[c[(c[d>>2]|0)+12>>2]&1023](d,e);d=c[e>>2]|0;if(!d){i=f;return}a=c[(c[d>>2]|0)+-12>>2]|0;e=d+a|0;a=d+(a+4)|0;b=(c[a>>2]|0)+-1|0;c[a>>2]=b;if((e|0)==0|(b|0)!=0){i=f;return}oc[c[(c[e>>2]|0)+4>>2]&2047](e);i=f;return}function of(a,b){a=a|0;b=b|0;return (zc[c[(c[a>>2]|0)+52>>2]&255](a,b)|0)^1|0}function pf(a){a=a|0;a=a+-16|0;_d(a,15592);c[a+56>>2]=12804;if(!(c[a+60>>2]|0))return;else Ha(74472,79014,56,74486)}function qf(a){a=a|0;a=a+-16|0;_d(a,15592);c[a+56>>2]=12804;if(!(c[a+60>>2]|0)){P_(a);return}else Ha(74472,79014,56,74486)}function rf(a,b){a=a|0;b=b|0;mf(a+-16|0,b);return}function sf(a,b){a=a|0;b=b|0;nf(a+-16|0,b);return}function tf(a){a=a|0;var b=0;b=c[(c[a>>2]|0)+-12>>2]|0;_d(a+b|0,15592);c[a+(b+56)>>2]=12804;if(!(c[a+(b+60)>>2]|0))return;else Ha(74472,79014,56,74486)}function uf(a){a=a|0;var b=0,d=0;d=c[(c[a>>2]|0)+-12>>2]|0;b=a+d|0;_d(b,15592);c[a+(d+56)>>2]=12804;if(!(c[a+(d+60)>>2]|0)){P_(b);return}else Ha(74472,79014,56,74486)}function vf(a){a=a|0;_d(a,33196);c[a+56>>2]=12804;if(!(c[a+60>>2]|0))return;else Ha(74472,79014,56,74486)}function wf(a){a=a|0;vf(a);P_(a);return}function xf(a){a=a|0;var b=0;b=c[(c[a>>2]|0)+-12>>2]|0;_d(a+b|0,33196);c[a+(b+56)>>2]=12804;if(!(c[a+(b+60)>>2]|0))return;else Ha(74472,79014,56,74486)}function yf(a){a=a|0;var b=0,d=0;d=c[(c[a>>2]|0)+-12>>2]|0;b=a+d|0;_d(b,33196);c[a+(d+56)>>2]=12804;if(!(c[a+(d+60)>>2]|0)){P_(b);return}else Ha(74472,79014,56,74486)}function zf(a){a=a|0;P_(a);return}function Af(b,d){b=b|0;d=d|0;var e=0,f=0;e=O_(64)|0;c[e+4>>2]=0;c[e+8>>2]=0;c[e+12>>2]=0;f=e+20|0;c[f>>2]=0;c[f+4>>2]=0;c[f+8>>2]=0;c[f+12>>2]=0;c[f+16>>2]=0;c[f+20>>2]=0;a[f+24>>0]=0;c[e+48>>2]=d;c[e>>2]=15628;c[e+56>>2]=15724;c[e+16>>2]=15696;c[e+52>>2]=121;c[e+60>>2]=2;f=c[(c[e>>2]|0)+-12>>2]|0;b=e+f|0;f=e+(f+4)|0;d=(c[f>>2]|0)+-1|0;c[f>>2]=d;if((b|0)==0|(d|0)!=0)return e|0;oc[c[(c[b>>2]|0)+4>>2]&2047](b);return e|0}function Bf(a){a=a|0;_d(a,15740);c[a+56>>2]=12804;if(!(c[a+60>>2]|0))return;else Ha(74472,79014,56,74486)}function Cf(a){a=a|0;Bf(a);P_(a);return}function Df(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;f=i;i=i+16|0;e=f;d=o$(b,1488,1928,-1)|0;if(!d){DF(a,b);i=f;return}c[e>>2]=a;if((a|0)!=0?(a=a+((c[(c[a>>2]|0)+-12>>2]|0)+4)|0,b=(c[a>>2]|0)+1|0,c[a>>2]=b,(b|0)==0):0)Ha(79054,79014,48,79068);pc[c[(c[d>>2]|0)+8>>2]&1023](d,e);d=c[e>>2]|0;if(!d){i=f;return}a=c[(c[d>>2]|0)+-12>>2]|0;e=d+a|0;a=d+(a+4)|0;b=(c[a>>2]|0)+-1|0;c[a>>2]=b;if((e|0)==0|(b|0)!=0){i=f;return}oc[c[(c[e>>2]|0)+4>>2]&2047](e);i=f;return}function Ef(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;f=i;i=i+16|0;e=f;d=o$(b,1488,1928,-1)|0;if(!d){FF(a,b);i=f;return}c[e>>2]=a;if((a|0)!=0?(a=a+((c[(c[a>>2]|0)+-12>>2]|0)+4)|0,b=(c[a>>2]|0)+1|0,c[a>>2]=b,(b|0)==0):0)Ha(79054,79014,48,79068);pc[c[(c[d>>2]|0)+12>>2]&1023](d,e);d=c[e>>2]|0;if(!d){i=f;return}a=c[(c[d>>2]|0)+-12>>2]|0;e=d+a|0;a=d+(a+4)|0;b=(c[a>>2]|0)+-1|0;c[a>>2]=b;if((e|0)==0|(b|0)!=0){i=f;return}oc[c[(c[e>>2]|0)+4>>2]&2047](e);i=f;return}function Ff(a){a=a|0;a=a+-16|0;_d(a,15740);c[a+56>>2]=12804;if(!(c[a+60>>2]|0))return;else Ha(74472,79014,56,74486)}function Gf(a){a=a|0;a=a+-16|0;_d(a,15740);c[a+56>>2]=12804;if(!(c[a+60>>2]|0)){P_(a);return}else Ha(74472,79014,56,74486)}function Hf(a,b){a=a|0;b=b|0;Df(a+-16|0,b);return}function If(a,b){a=a|0;b=b|0;Ef(a+-16|0,b);return}function Jf(a){a=a|0;var b=0;b=c[(c[a>>2]|0)+-12>>2]|0;_d(a+b|0,15740);c[a+(b+56)>>2]=12804;if(!(c[a+(b+60)>>2]|0))return;else Ha(74472,79014,56,74486)}function Kf(a){a=a|0;var b=0,d=0;d=c[(c[a>>2]|0)+-12>>2]|0;b=a+d|0;_d(b,15740);c[a+(d+56)>>2]=12804;if(!(c[a+(d+60)>>2]|0)){P_(b);return}else Ha(74472,79014,56,74486)}function Lf(a){a=a|0;P_(a);return}function Mf(b,d){b=b|0;d=d|0;var e=0,f=0;e=O_(64)|0;c[e+4>>2]=0;c[e+8>>2]=0;c[e+12>>2]=0;f=e+20|0;c[f>>2]=0;c[f+4>>2]=0;c[f+8>>2]=0;c[f+12>>2]=0;c[f+16>>2]=0;c[f+20>>2]=0;a[f+24>>0]=0;c[e+48>>2]=d;c[e>>2]=15776;c[e+56>>2]=15872;c[e+16>>2]=15844;c[e+52>>2]=120;c[e+60>>2]=2;f=c[(c[e>>2]|0)+-12>>2]|0;b=e+f|0;f=e+(f+4)|0;d=(c[f>>2]|0)+-1|0;c[f>>2]=d;if((b|0)==0|(d|0)!=0)return e|0;oc[c[(c[b>>2]|0)+4>>2]&2047](b);return e|0}function Nf(a){a=a|0;_d(a,15888);c[a+56>>2]=12804;if(!(c[a+60>>2]|0))return;else Ha(74472,79014,56,74486)}function Of(a){a=a|0;Nf(a);P_(a);return}function Pf(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;f=i;i=i+16|0;e=f;d=o$(b,1488,1984,-1)|0;if(!d){DF(a,b);i=f;return}c[e>>2]=a;if((a|0)!=0?(a=a+((c[(c[a>>2]|0)+-12>>2]|0)+4)|0,b=(c[a>>2]|0)+1|0,c[a>>2]=b,(b|0)==0):0)Ha(79054,79014,48,79068);pc[c[(c[d>>2]|0)+8>>2]&1023](d,e);d=c[e>>2]|0;if(!d){i=f;return}a=c[(c[d>>2]|0)+-12>>2]|0;e=d+a|0;a=d+(a+4)|0;b=(c[a>>2]|0)+-1|0;c[a>>2]=b;if((e|0)==0|(b|0)!=0){i=f;return}oc[c[(c[e>>2]|0)+4>>2]&2047](e);i=f;return}function Qf(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;f=i;i=i+16|0;e=f;d=o$(b,1488,1984,-1)|0;if(!d){FF(a,b);i=f;return}c[e>>2]=a;if((a|0)!=0?(a=a+((c[(c[a>>2]|0)+-12>>2]|0)+4)|0,b=(c[a>>2]|0)+1|0,c[a>>2]=b,(b|0)==0):0)Ha(79054,79014,48,79068);pc[c[(c[d>>2]|0)+12>>2]&1023](d,e);d=c[e>>2]|0;if(!d){i=f;return}a=c[(c[d>>2]|0)+-12>>2]|0;e=d+a|0;a=d+(a+4)|0;b=(c[a>>2]|0)+-1|0;c[a>>2]=b;if((e|0)==0|(b|0)!=0){i=f;return}oc[c[(c[e>>2]|0)+4>>2]&2047](e);i=f;return}function Rf(a){a=a|0;a=a+-16|0;_d(a,15888);c[a+56>>2]=12804;if(!(c[a+60>>2]|0))return;else Ha(74472,79014,56,74486)}function Sf(a){a=a|0;a=a+-16|0;_d(a,15888);c[a+56>>2]=12804;if(!(c[a+60>>2]|0)){P_(a);return}else Ha(74472,79014,56,74486)}function Tf(a,b){a=a|0;b=b|0;Pf(a+-16|0,b);return}function Uf(a,b){a=a|0;b=b|0;Qf(a+-16|0,b);return}function Vf(a){a=a|0;var b=0;b=c[(c[a>>2]|0)+-12>>2]|0;_d(a+b|0,15888);c[a+(b+56)>>2]=12804;if(!(c[a+(b+60)>>2]|0))return;else Ha(74472,79014,56,74486)}function Wf(a){a=a|0;var b=0,d=0;d=c[(c[a>>2]|0)+-12>>2]|0;b=a+d|0;_d(b,15888);c[a+(d+56)>>2]=12804;if(!(c[a+(d+60)>>2]|0)){P_(b);return}else Ha(74472,79014,56,74486)}function Xf(a){a=a|0;P_(a);return}function Yf(b,d){b=b|0;d=d|0;var e=0,f=0;e=O_(64)|0;c[e+4>>2]=0;c[e+8>>2]=0;c[e+12>>2]=0;f=e+20|0;c[f>>2]=0;c[f+4>>2]=0;c[f+8>>2]=0;c[f+12>>2]=0;c[f+16>>2]=0;c[f+20>>2]=0;a[f+24>>0]=0;c[e+48>>2]=d;c[e>>2]=15924;c[e+56>>2]=16020;c[e+16>>2]=15992;c[e+52>>2]=119;c[e+60>>2]=2;f=c[(c[e>>2]|0)+-12>>2]|0;b=e+f|0;f=e+(f+4)|0;d=(c[f>>2]|0)+-1|0;c[f>>2]=d;if((b|0)==0|(d|0)!=0)return e|0;oc[c[(c[b>>2]|0)+4>>2]&2047](b);return e|0}function Zf(a){a=a|0;_d(a,16036);c[a+56>>2]=12804;if(!(c[a+60>>2]|0))return;else Ha(74472,79014,56,74486)}function _f(a){a=a|0;Zf(a);P_(a);return}function $f(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;f=i;i=i+16|0;e=f;d=o$(b,1488,2040,-1)|0;if(!d){DF(a,b);i=f;return}c[e>>2]=a;if((a|0)!=0?(a=a+((c[(c[a>>2]|0)+-12>>2]|0)+4)|0,b=(c[a>>2]|0)+1|0,c[a>>2]=b,(b|0)==0):0)Ha(79054,79014,48,79068);pc[c[(c[d>>2]|0)+8>>2]&1023](d,e);d=c[e>>2]|0;if(!d){i=f;return}a=c[(c[d>>2]|0)+-12>>2]|0;e=d+a|0;a=d+(a+4)|0;b=(c[a>>2]|0)+-1|0;c[a>>2]=b;if((e|0)==0|(b|0)!=0){i=f;return}oc[c[(c[e>>2]|0)+4>>2]&2047](e);i=f;return}function ag(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;f=i;i=i+16|0;e=f;d=o$(b,1488,2040,-1)|0;if(!d){FF(a,b);i=f;return}c[e>>2]=a;if((a|0)!=0?(a=a+((c[(c[a>>2]|0)+-12>>2]|0)+4)|0,b=(c[a>>2]|0)+1|0,c[a>>2]=b,(b|0)==0):0)Ha(79054,79014,48,79068);pc[c[(c[d>>2]|0)+12>>2]&1023](d,e);d=c[e>>2]|0;if(!d){i=f;return}a=c[(c[d>>2]|0)+-12>>2]|0;e=d+a|0;a=d+(a+4)|0;b=(c[a>>2]|0)+-1|0;c[a>>2]=b;if((e|0)==0|(b|0)!=0){i=f;return}oc[c[(c[e>>2]|0)+4>>2]&2047](e);i=f;return}function bg(a){a=a|0;a=a+-16|0;_d(a,16036);c[a+56>>2]=12804;if(!(c[a+60>>2]|0))return;else Ha(74472,79014,56,74486)}function cg(a){a=a|0;a=a+-16|0;_d(a,16036);c[a+56>>2]=12804;if(!(c[a+60>>2]|0)){P_(a);return}else Ha(74472,79014,56,74486)}function dg(a,b){a=a|0;b=b|0;$f(a+-16|0,b);return}function eg(a,b){a=a|0;b=b|0;ag(a+-16|0,b);return}function fg(a){a=a|0;var b=0;b=c[(c[a>>2]|0)+-12>>2]|0;_d(a+b|0,16036);c[a+(b+56)>>2]=12804;if(!(c[a+(b+60)>>2]|0))return;else Ha(74472,79014,56,74486)}function gg(a){a=a|0;var b=0,d=0;d=c[(c[a>>2]|0)+-12>>2]|0;b=a+d|0;_d(b,16036);c[a+(d+56)>>2]=12804;if(!(c[a+(d+60)>>2]|0)){P_(b);return}else Ha(74472,79014,56,74486)}function hg(a){a=a|0;P_(a);return}function ig(b,d){b=b|0;d=d|0;var e=0,f=0;e=O_(64)|0;c[e+4>>2]=0;c[e+8>>2]=0;c[e+12>>2]=0;f=e+20|0;c[f>>2]=0;c[f+4>>2]=0;c[f+8>>2]=0;c[f+12>>2]=0;c[f+16>>2]=0;c[f+20>>2]=0;a[f+24>>0]=0;c[e+48>>2]=d;c[e>>2]=16072;c[e+56>>2]=16168;c[e+16>>2]=16140;c[e+52>>2]=118;c[e+60>>2]=2;f=c[(c[e>>2]|0)+-12>>2]|0;b=e+f|0;f=e+(f+4)|0;d=(c[f>>2]|0)+-1|0;c[f>>2]=d;if((b|0)==0|(d|0)!=0)return e|0;oc[c[(c[b>>2]|0)+4>>2]&2047](b);return e|0}function jg(a){a=a|0;_d(a,16184);c[a+56>>2]=12804;if(!(c[a+60>>2]|0))return;else Ha(74472,79014,56,74486)}function kg(a){a=a|0;jg(a);P_(a);return}function lg(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;f=i;i=i+16|0;e=f;d=o$(b,1488,2096,-1)|0;if(!d){DF(a,b);i=f;return}c[e>>2]=a;if((a|0)!=0?(a=a+((c[(c[a>>2]|0)+-12>>2]|0)+4)|0,b=(c[a>>2]|0)+1|0,c[a>>2]=b,(b|0)==0):0)Ha(79054,79014,48,79068);pc[c[(c[d>>2]|0)+8>>2]&1023](d,e);d=c[e>>2]|0;if(!d){i=f;return}a=c[(c[d>>2]|0)+-12>>2]|0;e=d+a|0;a=d+(a+4)|0;b=(c[a>>2]|0)+-1|0;c[a>>2]=b;if((e|0)==0|(b|0)!=0){i=f;return}oc[c[(c[e>>2]|0)+4>>2]&2047](e);i=f;return}function mg(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;f=i;i=i+16|0;e=f;d=o$(b,1488,2096,-1)|0;if(!d){FF(a,b);i=f;return}c[e>>2]=a;if((a|0)!=0?(a=a+((c[(c[a>>2]|0)+-12>>2]|0)+4)|0,b=(c[a>>2]|0)+1|0,c[a>>2]=b,(b|0)==0):0)Ha(79054,79014,48,79068);pc[c[(c[d>>2]|0)+12>>2]&1023](d,e);d=c[e>>2]|0;if(!d){i=f;return}a=c[(c[d>>2]|0)+-12>>2]|0;e=d+a|0;a=d+(a+4)|0;b=(c[a>>2]|0)+-1|0;c[a>>2]=b;if((e|0)==0|(b|0)!=0){i=f;return}oc[c[(c[e>>2]|0)+4>>2]&2047](e);i=f;return}function ng(a){a=a|0;a=a+-16|0;_d(a,16184);c[a+56>>2]=12804;if(!(c[a+60>>2]|0))return;else Ha(74472,79014,56,74486)}function og(a){a=a|0;a=a+-16|0;_d(a,16184);c[a+56>>2]=12804;if(!(c[a+60>>2]|0)){P_(a);return}else Ha(74472,79014,56,74486)}function pg(a,b){a=a|0;b=b|0;lg(a+-16|0,b);return}function qg(a,b){a=a|0;b=b|0;mg(a+-16|0,b);return}function rg(a){a=a|0;var b=0;b=c[(c[a>>2]|0)+-12>>2]|0;_d(a+b|0,16184);c[a+(b+56)>>2]=12804;if(!(c[a+(b+60)>>2]|0))return;else Ha(74472,79014,56,74486)}function sg(a){a=a|0;var b=0,d=0;d=c[(c[a>>2]|0)+-12>>2]|0;b=a+d|0;_d(b,16184);c[a+(d+56)>>2]=12804;if(!(c[a+(d+60)>>2]|0)){P_(b);return}else Ha(74472,79014,56,74486)}function tg(a){a=a|0;P_(a);return}function ug(b,d){b=b|0;d=d|0;var e=0,f=0;e=O_(64)|0;c[e+4>>2]=0;c[e+8>>2]=0;c[e+12>>2]=0;f=e+20|0;c[f>>2]=0;c[f+4>>2]=0;c[f+8>>2]=0;c[f+12>>2]=0;c[f+16>>2]=0;c[f+20>>2]=0;a[f+24>>0]=0;c[e+48>>2]=d;c[e>>2]=16220;c[e+56>>2]=16316;c[e+16>>2]=16288;c[e+52>>2]=117;c[e+60>>2]=2;f=c[(c[e>>2]|0)+-12>>2]|0;b=e+f|0;f=e+(f+4)|0;d=(c[f>>2]|0)+-1|0;c[f>>2]=d;if((b|0)==0|(d|0)!=0)return e|0;oc[c[(c[b>>2]|0)+4>>2]&2047](b);return e|0}function vg(a){a=a|0;_d(a,16332);c[a+56>>2]=12804;if(!(c[a+60>>2]|0))return;else Ha(74472,79014,56,74486)}function wg(a){a=a|0;vg(a);P_(a);return}function xg(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;f=i;i=i+16|0;e=f;d=o$(b,1488,2152,-1)|0;if(!d){DF(a,b);i=f;return}c[e>>2]=a;if((a|0)!=0?(a=a+((c[(c[a>>2]|0)+-12>>2]|0)+4)|0,b=(c[a>>2]|0)+1|0,c[a>>2]=b,(b|0)==0):0)Ha(79054,79014,48,79068);pc[c[(c[d>>2]|0)+8>>2]&1023](d,e);d=c[e>>2]|0;if(!d){i=f;return}a=c[(c[d>>2]|0)+-12>>2]|0;e=d+a|0;a=d+(a+4)|0;b=(c[a>>2]|0)+-1|0;c[a>>2]=b;if((e|0)==0|(b|0)!=0){i=f;return}oc[c[(c[e>>2]|0)+4>>2]&2047](e);i=f;return}function yg(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;f=i;i=i+16|0;e=f;d=o$(b,1488,2152,-1)|0;if(!d){FF(a,b);i=f;return}c[e>>2]=a;if((a|0)!=0?(a=a+((c[(c[a>>2]|0)+-12>>2]|0)+4)|0,b=(c[a>>2]|0)+1|0,c[a>>2]=b,(b|0)==0):0)Ha(79054,79014,48,79068);pc[c[(c[d>>2]|0)+12>>2]&1023](d,e);d=c[e>>2]|0;if(!d){i=f;return}a=c[(c[d>>2]|0)+-12>>2]|0;e=d+a|0;a=d+(a+4)|0;b=(c[a>>2]|0)+-1|0;c[a>>2]=b;if((e|0)==0|(b|0)!=0){i=f;return}oc[c[(c[e>>2]|0)+4>>2]&2047](e);i=f;return}function zg(a){a=a|0;a=a+-16|0;_d(a,16332);c[a+56>>2]=12804;if(!(c[a+60>>2]|0))return;else Ha(74472,79014,56,74486)}function Ag(a){a=a|0;a=a+-16|0;_d(a,16332);c[a+56>>2]=12804;if(!(c[a+60>>2]|0)){P_(a);return}else Ha(74472,79014,56,74486)}function Bg(a,b){a=a|0;b=b|0;xg(a+-16|0,b);return}function Cg(a,b){a=a|0;b=b|0;yg(a+-16|0,b);return}function Dg(a){a=a|0;var b=0;b=c[(c[a>>2]|0)+-12>>2]|0;_d(a+b|0,16332);c[a+(b+56)>>2]=12804;if(!(c[a+(b+60)>>2]|0))return;else Ha(74472,79014,56,74486)}function Eg(a){a=a|0;var b=0,d=0;d=c[(c[a>>2]|0)+-12>>2]|0;b=a+d|0;_d(b,16332);c[a+(d+56)>>2]=12804;if(!(c[a+(d+60)>>2]|0)){P_(b);return}else Ha(74472,79014,56,74486)}function Fg(a){a=a|0;P_(a);return}function Gg(b,d){b=b|0;d=d|0;var e=0,f=0;e=O_(64)|0;c[e+4>>2]=0;c[e+8>>2]=0;c[e+12>>2]=0;f=e+20|0;c[f>>2]=0;c[f+4>>2]=0;c[f+8>>2]=0;c[f+12>>2]=0;c[f+16>>2]=0;c[f+20>>2]=0;a[f+24>>0]=0;c[e+48>>2]=d;c[e>>2]=16368;c[e+56>>2]=16464;c[e+16>>2]=16436;c[e+52>>2]=116;c[e+60>>2]=2;f=c[(c[e>>2]|0)+-12>>2]|0;b=e+f|0;f=e+(f+4)|0;d=(c[f>>2]|0)+-1|0;c[f>>2]=d;if((b|0)==0|(d|0)!=0)return e|0;oc[c[(c[b>>2]|0)+4>>2]&2047](b);return e|0}function Hg(a){a=a|0;_d(a,16480);c[a+56>>2]=12804;if(!(c[a+60>>2]|0))return;else Ha(74472,79014,56,74486)}function Ig(a){a=a|0;Hg(a);P_(a);return}function Jg(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;f=i;i=i+16|0;e=f;d=o$(b,1488,2208,-1)|0;if(!d){DF(a,b);i=f;return}c[e>>2]=a;if((a|0)!=0?(a=a+((c[(c[a>>2]|0)+-12>>2]|0)+4)|0,b=(c[a>>2]|0)+1|0,c[a>>2]=b,(b|0)==0):0)Ha(79054,79014,48,79068);pc[c[(c[d>>2]|0)+8>>2]&1023](d,e);d=c[e>>2]|0;if(!d){i=f;return}a=c[(c[d>>2]|0)+-12>>2]|0;e=d+a|0;a=d+(a+4)|0;b=(c[a>>2]|0)+-1|0;c[a>>2]=b;if((e|0)==0|(b|0)!=0){i=f;return}oc[c[(c[e>>2]|0)+4>>2]&2047](e);i=f;return}function Kg(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;f=i;i=i+16|0;e=f;d=o$(b,1488,2208,-1)|0;if(!d){FF(a,b);i=f;return}c[e>>2]=a;if((a|0)!=0?(a=a+((c[(c[a>>2]|0)+-12>>2]|0)+4)|0,b=(c[a>>2]|0)+1|0,c[a>>2]=b,(b|0)==0):0)Ha(79054,79014,48,79068);pc[c[(c[d>>2]|0)+12>>2]&1023](d,e);d=c[e>>2]|0;if(!d){i=f;return}a=c[(c[d>>2]|0)+-12>>2]|0;e=d+a|0;a=d+(a+4)|0;b=(c[a>>2]|0)+-1|0;c[a>>2]=b;if((e|0)==0|(b|0)!=0){i=f;return}oc[c[(c[e>>2]|0)+4>>2]&2047](e);i=f;return}function Lg(a){a=a|0;a=a+-16|0;_d(a,16480);c[a+56>>2]=12804;if(!(c[a+60>>2]|0))return;else Ha(74472,79014,56,74486)}function Mg(a){a=a|0;a=a+-16|0;_d(a,16480);c[a+56>>2]=12804;if(!(c[a+60>>2]|0)){P_(a);return}else Ha(74472,79014,56,74486)}function Ng(a,b){a=a|0;b=b|0;Jg(a+-16|0,b);return}function Og(a,b){a=a|0;b=b|0;Kg(a+-16|0,b);return}function Pg(a){a=a|0;var b=0;b=c[(c[a>>2]|0)+-12>>2]|0;_d(a+b|0,16480);c[a+(b+56)>>2]=12804;if(!(c[a+(b+60)>>2]|0))return;else Ha(74472,79014,56,74486)}function Qg(a){a=a|0;var b=0,d=0;d=c[(c[a>>2]|0)+-12>>2]|0;b=a+d|0;_d(b,16480);c[a+(d+56)>>2]=12804;if(!(c[a+(d+60)>>2]|0)){P_(b);return}else Ha(74472,79014,56,74486)}function Rg(a){a=a|0;P_(a);return}function Sg(b,d){b=b|0;d=d|0;var e=0,f=0;e=O_(64)|0;c[e+4>>2]=0;c[e+8>>2]=0;c[e+12>>2]=0;f=e+20|0;c[f>>2]=0;c[f+4>>2]=0;c[f+8>>2]=0;c[f+12>>2]=0;c[f+16>>2]=0;c[f+20>>2]=0;a[f+24>>0]=0;c[e+48>>2]=d;c[e>>2]=16516;c[e+56>>2]=16612;c[e+16>>2]=16584;c[e+52>>2]=115;c[e+60>>2]=2;f=c[(c[e>>2]|0)+-12>>2]|0;b=e+f|0;f=e+(f+4)|0;d=(c[f>>2]|0)+-1|0;c[f>>2]=d;if((b|0)==0|(d|0)!=0)return e|0;oc[c[(c[b>>2]|0)+4>>2]&2047](b);return e|0}function Tg(a){a=a|0;_d(a,16628);c[a+56>>2]=12804;if(!(c[a+60>>2]|0))return;else Ha(74472,79014,56,74486)}function Ug(a){a=a|0;Tg(a);P_(a);return}function Vg(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;f=i;i=i+16|0;e=f;d=o$(b,1488,2264,-1)|0;if(!d){DF(a,b);i=f;return}c[e>>2]=a;if((a|0)!=0?(a=a+((c[(c[a>>2]|0)+-12>>2]|0)+4)|0,b=(c[a>>2]|0)+1|0,c[a>>2]=b,(b|0)==0):0)Ha(79054,79014,48,79068);pc[c[(c[d>>2]|0)+8>>2]&1023](d,e);d=c[e>>2]|0;if(!d){i=f;return}a=c[(c[d>>2]|0)+-12>>2]|0;e=d+a|0;a=d+(a+4)|0;b=(c[a>>2]|0)+-1|0;c[a>>2]=b;if((e|0)==0|(b|0)!=0){i=f;return}oc[c[(c[e>>2]|0)+4>>2]&2047](e);i=f;return}function Wg(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;f=i;i=i+16|0;e=f;d=o$(b,1488,2264,-1)|0;if(!d){FF(a,b);i=f;return}c[e>>2]=a;if((a|0)!=0?(a=a+((c[(c[a>>2]|0)+-12>>2]|0)+4)|0,b=(c[a>>2]|0)+1|0,c[a>>2]=b,(b|0)==0):0)Ha(79054,79014,48,79068);pc[c[(c[d>>2]|0)+12>>2]&1023](d,e);d=c[e>>2]|0;if(!d){i=f;return}a=c[(c[d>>2]|0)+-12>>2]|0;e=d+a|0;a=d+(a+4)|0;b=(c[a>>2]|0)+-1|0;c[a>>2]=b;if((e|0)==0|(b|0)!=0){i=f;return}oc[c[(c[e>>2]|0)+4>>2]&2047](e);i=f;return}function Xg(a){a=a|0;a=a+-16|0;_d(a,16628);c[a+56>>2]=12804;if(!(c[a+60>>2]|0))return;else Ha(74472,79014,56,74486)}function Yg(a){a=a|0;a=a+-16|0;_d(a,16628);c[a+56>>2]=12804;if(!(c[a+60>>2]|0)){P_(a);return}else Ha(74472,79014,56,74486)}function Zg(a,b){a=a|0;b=b|0;Vg(a+-16|0,b);return}function _g(a,b){a=a|0;b=b|0;Wg(a+-16|0,b);return}function $g(a){a=a|0;var b=0;b=c[(c[a>>2]|0)+-12>>2]|0;_d(a+b|0,16628);c[a+(b+56)>>2]=12804;if(!(c[a+(b+60)>>2]|0))return;else Ha(74472,79014,56,74486)}function ah(a){a=a|0;var b=0,d=0;d=c[(c[a>>2]|0)+-12>>2]|0;b=a+d|0;_d(b,16628);c[a+(d+56)>>2]=12804;if(!(c[a+(d+60)>>2]|0)){P_(b);return}else Ha(74472,79014,56,74486)}function bh(a){a=a|0;P_(a);return}function ch(b,d){b=b|0;d=d|0;var e=0,f=0;e=O_(64)|0;c[e+4>>2]=0;c[e+8>>2]=0;c[e+12>>2]=0;f=e+20|0;c[f>>2]=0;c[f+4>>2]=0;c[f+8>>2]=0;c[f+12>>2]=0;c[f+16>>2]=0;c[f+20>>2]=0;a[f+24>>0]=0;c[e+48>>2]=d;c[e>>2]=16664;c[e+56>>2]=16760;c[e+16>>2]=16732;c[e+52>>2]=114;c[e+60>>2]=2;f=c[(c[e>>2]|0)+-12>>2]|0;b=e+f|0;f=e+(f+4)|0;d=(c[f>>2]|0)+-1|0;c[f>>2]=d;if((b|0)==0|(d|0)!=0)return e|0;oc[c[(c[b>>2]|0)+4>>2]&2047](b);return e|0}function dh(a){a=a|0;_d(a,16776);c[a+56>>2]=12804;if(!(c[a+60>>2]|0))return;else Ha(74472,79014,56,74486)}function eh(a){a=a|0;dh(a);P_(a);return}function fh(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;f=i;i=i+16|0;e=f;d=o$(b,1488,2320,-1)|0;if(!d){DF(a,b);i=f;return}c[e>>2]=a;if((a|0)!=0?(a=a+((c[(c[a>>2]|0)+-12>>2]|0)+4)|0,b=(c[a>>2]|0)+1|0,c[a>>2]=b,(b|0)==0):0)Ha(79054,79014,48,79068);pc[c[(c[d>>2]|0)+8>>2]&1023](d,e);d=c[e>>2]|0;if(!d){i=f;return}a=c[(c[d>>2]|0)+-12>>2]|0;e=d+a|0;a=d+(a+4)|0;b=(c[a>>2]|0)+-1|0;c[a>>2]=b;if((e|0)==0|(b|0)!=0){i=f;return}oc[c[(c[e>>2]|0)+4>>2]&2047](e);i=f;return}function gh(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;f=i;i=i+16|0;e=f;d=o$(b,1488,2320,-1)|0;if(!d){FF(a,b);i=f;return}c[e>>2]=a;if((a|0)!=0?(a=a+((c[(c[a>>2]|0)+-12>>2]|0)+4)|0,b=(c[a>>2]|0)+1|0,c[a>>2]=b,(b|0)==0):0)Ha(79054,79014,48,79068);pc[c[(c[d>>2]|0)+12>>2]&1023](d,e);d=c[e>>2]|0;if(!d){i=f;return}a=c[(c[d>>2]|0)+-12>>2]|0;e=d+a|0;a=d+(a+4)|0;b=(c[a>>2]|0)+-1|0;c[a>>2]=b;if((e|0)==0|(b|0)!=0){i=f;return}oc[c[(c[e>>2]|0)+4>>2]&2047](e);i=f;return}function hh(a){a=a|0;a=a+-16|0;_d(a,16776);c[a+56>>2]=12804;if(!(c[a+60>>2]|0))return;else Ha(74472,79014,56,74486)}function ih(a){a=a|0;a=a+-16|0;_d(a,16776);c[a+56>>2]=12804;if(!(c[a+60>>2]|0)){P_(a);return}else Ha(74472,79014,56,74486)}function jh(a,b){a=a|0;b=b|0;fh(a+-16|0,b);return}function kh(a,b){a=a|0;b=b|0;gh(a+-16|0,b);return}function lh(a){a=a|0;var b=0;b=c[(c[a>>2]|0)+-12>>2]|0;_d(a+b|0,16776);c[a+(b+56)>>2]=12804;if(!(c[a+(b+60)>>2]|0))return;else Ha(74472,79014,56,74486)}function mh(a){a=a|0;var b=0,d=0;d=c[(c[a>>2]|0)+-12>>2]|0;b=a+d|0;_d(b,16776);c[a+(d+56)>>2]=12804;if(!(c[a+(d+60)>>2]|0)){P_(b);return}else Ha(74472,79014,56,74486)}function nh(a){a=a|0;P_(a);return}function oh(b,d){b=b|0;d=d|0;var e=0,f=0;e=O_(64)|0;c[e+4>>2]=0;c[e+8>>2]=0;c[e+12>>2]=0;f=e+20|0;c[f>>2]=0;c[f+4>>2]=0;c[f+8>>2]=0;c[f+12>>2]=0;c[f+16>>2]=0;c[f+20>>2]=0;a[f+24>>0]=0;c[e+48>>2]=d;c[e>>2]=16812;c[e+56>>2]=16908;c[e+16>>2]=16880;c[e+52>>2]=113;c[e+60>>2]=2;f=c[(c[e>>2]|0)+-12>>2]|0;b=e+f|0;f=e+(f+4)|0;d=(c[f>>2]|0)+-1|0;c[f>>2]=d;if((b|0)==0|(d|0)!=0)return e|0;oc[c[(c[b>>2]|0)+4>>2]&2047](b);return e|0}function ph(a){a=a|0;_d(a,16924);c[a+56>>2]=12804;if(!(c[a+60>>2]|0))return;else Ha(74472,79014,56,74486)}function qh(a){a=a|0;ph(a);P_(a);return}function rh(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;f=i;i=i+16|0;e=f;d=o$(b,1488,2376,-1)|0;if(!d){DF(a,b);i=f;return}c[e>>2]=a;if((a|0)!=0?(a=a+((c[(c[a>>2]|0)+-12>>2]|0)+4)|0,b=(c[a>>2]|0)+1|0,c[a>>2]=b,(b|0)==0):0)Ha(79054,79014,48,79068);pc[c[(c[d>>2]|0)+8>>2]&1023](d,e);d=c[e>>2]|0;if(!d){i=f;return}a=c[(c[d>>2]|0)+-12>>2]|0;e=d+a|0;a=d+(a+4)|0;b=(c[a>>2]|0)+-1|0;c[a>>2]=b;if((e|0)==0|(b|0)!=0){i=f;return}oc[c[(c[e>>2]|0)+4>>2]&2047](e);i=f;return}function sh(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;f=i;i=i+16|0;e=f;d=o$(b,1488,2376,-1)|0;if(!d){FF(a,b);i=f;return}c[e>>2]=a;if((a|0)!=0?(a=a+((c[(c[a>>2]|0)+-12>>2]|0)+4)|0,b=(c[a>>2]|0)+1|0,c[a>>2]=b,(b|0)==0):0)Ha(79054,79014,48,79068);pc[c[(c[d>>2]|0)+12>>2]&1023](d,e);d=c[e>>2]|0;if(!d){i=f;return}a=c[(c[d>>2]|0)+-12>>2]|0;e=d+a|0;a=d+(a+4)|0;b=(c[a>>2]|0)+-1|0;c[a>>2]=b;if((e|0)==0|(b|0)!=0){i=f;return}oc[c[(c[e>>2]|0)+4>>2]&2047](e);i=f;return}function th(a){a=a|0;a=a+-16|0;_d(a,16924);c[a+56>>2]=12804;if(!(c[a+60>>2]|0))return;else Ha(74472,79014,56,74486)}function uh(a){a=a|0;a=a+-16|0;_d(a,16924);c[a+56>>2]=12804;if(!(c[a+60>>2]|0)){P_(a);return}else Ha(74472,79014,56,74486)}function vh(a,b){a=a|0;b=b|0;rh(a+-16|0,b);return}function wh(a,b){a=a|0;b=b|0;sh(a+-16|0,b);return}function xh(a){a=a|0;var b=0;b=c[(c[a>>2]|0)+-12>>2]|0;_d(a+b|0,16924);c[a+(b+56)>>2]=12804;if(!(c[a+(b+60)>>2]|0))return;else Ha(74472,79014,56,74486)}function yh(a){a=a|0;var b=0,d=0;d=c[(c[a>>2]|0)+-12>>2]|0;b=a+d|0;_d(b,16924);c[a+(d+56)>>2]=12804;if(!(c[a+(d+60)>>2]|0)){P_(b);return}else Ha(74472,79014,56,74486)}function zh(a){a=a|0;P_(a);return}function Ah(b,d){b=b|0;d=d|0;var e=0,f=0;e=O_(64)|0;c[e+4>>2]=0;c[e+8>>2]=0;c[e+12>>2]=0;f=e+20|0;c[f>>2]=0;c[f+4>>2]=0;c[f+8>>2]=0;c[f+12>>2]=0;c[f+16>>2]=0;c[f+20>>2]=0;a[f+24>>0]=0;c[e+48>>2]=d;c[e>>2]=16960;c[e+56>>2]=17056;c[e+16>>2]=17028;c[e+52>>2]=112;c[e+60>>2]=2;f=c[(c[e>>2]|0)+-12>>2]|0;b=e+f|0;f=e+(f+4)|0;d=(c[f>>2]|0)+-1|0;c[f>>2]=d;if((b|0)==0|(d|0)!=0)return e|0;oc[c[(c[b>>2]|0)+4>>2]&2047](b);return e|0}function Bh(a){a=a|0;_d(a,17072);c[a+56>>2]=12804;if(!(c[a+60>>2]|0))return;else Ha(74472,79014,56,74486)}function Ch(a){a=a|0;Bh(a);P_(a);return}function Dh(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;f=i;i=i+16|0;e=f;d=o$(b,1488,2432,-1)|0;if(!d){DF(a,b);i=f;return}c[e>>2]=a;if((a|0)!=0?(a=a+((c[(c[a>>2]|0)+-12>>2]|0)+4)|0,b=(c[a>>2]|0)+1|0,c[a>>2]=b,(b|0)==0):0)Ha(79054,79014,48,79068);pc[c[(c[d>>2]|0)+8>>2]&1023](d,e);d=c[e>>2]|0;if(!d){i=f;return}a=c[(c[d>>2]|0)+-12>>2]|0;e=d+a|0;a=d+(a+4)|0;b=(c[a>>2]|0)+-1|0;c[a>>2]=b;if((e|0)==0|(b|0)!=0){i=f;return}oc[c[(c[e>>2]|0)+4>>2]&2047](e);i=f;return}function Eh(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;f=i;i=i+16|0;e=f;d=o$(b,1488,2432,-1)|0;if(!d){FF(a,b);i=f;return}c[e>>2]=a;if((a|0)!=0?(a=a+((c[(c[a>>2]|0)+-12>>2]|0)+4)|0,b=(c[a>>2]|0)+1|0,c[a>>2]=b,(b|0)==0):0)Ha(79054,79014,48,79068);pc[c[(c[d>>2]|0)+12>>2]&1023](d,e);d=c[e>>2]|0;if(!d){i=f;return}a=c[(c[d>>2]|0)+-12>>2]|0;e=d+a|0;a=d+(a+4)|0;b=(c[a>>2]|0)+-1|0;c[a>>2]=b;if((e|0)==0|(b|0)!=0){i=f;return}oc[c[(c[e>>2]|0)+4>>2]&2047](e);i=f;return}function Fh(a){a=a|0;a=a+-16|0;_d(a,17072);c[a+56>>2]=12804;if(!(c[a+60>>2]|0))return;else Ha(74472,79014,56,74486)}function Gh(a){a=a|0;a=a+-16|0;_d(a,17072);c[a+56>>2]=12804;if(!(c[a+60>>2]|0)){P_(a);return}else Ha(74472,79014,56,74486)}function Hh(a,b){a=a|0;b=b|0;Dh(a+-16|0,b);return}function Ih(a,b){a=a|0;b=b|0;Eh(a+-16|0,b);return}function Jh(a){a=a|0;var b=0;b=c[(c[a>>2]|0)+-12>>2]|0;_d(a+b|0,17072);c[a+(b+56)>>2]=12804;if(!(c[a+(b+60)>>2]|0))return;else Ha(74472,79014,56,74486)}function Kh(a){a=a|0;var b=0,d=0;d=c[(c[a>>2]|0)+-12>>2]|0;b=a+d|0;_d(b,17072);c[a+(d+56)>>2]=12804;if(!(c[a+(d+60)>>2]|0)){P_(b);return}else Ha(74472,79014,56,74486)}function Lh(a){a=a|0;P_(a);return}function Mh(b,d){b=b|0;d=d|0;var e=0,f=0;e=O_(64)|0;c[e+4>>2]=0;c[e+8>>2]=0;c[e+12>>2]=0;f=e+20|0;c[f>>2]=0;c[f+4>>2]=0;c[f+8>>2]=0;c[f+12>>2]=0;c[f+16>>2]=0;c[f+20>>2]=0;a[f+24>>0]=0;c[e+48>>2]=d;c[e>>2]=17108;c[e+56>>2]=17204;c[e+16>>2]=17176;c[e+52>>2]=111;c[e+60>>2]=2;f=c[(c[e>>2]|0)+-12>>2]|0;b=e+f|0;f=e+(f+4)|0;d=(c[f>>2]|0)+-1|0;c[f>>2]=d;if((b|0)==0|(d|0)!=0)return e|0;oc[c[(c[b>>2]|0)+4>>2]&2047](b);return e|0}function Nh(a){a=a|0;_d(a,17220);c[a+56>>2]=12804;if(!(c[a+60>>2]|0))return;else Ha(74472,79014,56,74486)}function Oh(a){a=a|0;Nh(a);P_(a);return}function Ph(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;f=i;i=i+16|0;e=f;d=o$(b,1488,2488,-1)|0;if(!d){DF(a,b);i=f;return}c[e>>2]=a;if((a|0)!=0?(a=a+((c[(c[a>>2]|0)+-12>>2]|0)+4)|0,b=(c[a>>2]|0)+1|0,c[a>>2]=b,(b|0)==0):0)Ha(79054,79014,48,79068);pc[c[(c[d>>2]|0)+8>>2]&1023](d,e);d=c[e>>2]|0;if(!d){i=f;return}a=c[(c[d>>2]|0)+-12>>2]|0;e=d+a|0;a=d+(a+4)|0;b=(c[a>>2]|0)+-1|0;c[a>>2]=b;if((e|0)==0|(b|0)!=0){i=f;return}oc[c[(c[e>>2]|0)+4>>2]&2047](e);i=f;return}function Qh(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;f=i;i=i+16|0;e=f;d=o$(b,1488,2488,-1)|0;if(!d){FF(a,b);i=f;return}c[e>>2]=a;if((a|0)!=0?(a=a+((c[(c[a>>2]|0)+-12>>2]|0)+4)|0,b=(c[a>>2]|0)+1|0,c[a>>2]=b,(b|0)==0):0)Ha(79054,79014,48,79068);pc[c[(c[d>>2]|0)+12>>2]&1023](d,e);d=c[e>>2]|0;if(!d){i=f;return}a=c[(c[d>>2]|0)+-12>>2]|0;e=d+a|0;a=d+(a+4)|0;b=(c[a>>2]|0)+-1|0;c[a>>2]=b;if((e|0)==0|(b|0)!=0){i=f;return}oc[c[(c[e>>2]|0)+4>>2]&2047](e);i=f;return}function Rh(a){a=a|0;a=a+-16|0;_d(a,17220);c[a+56>>2]=12804;if(!(c[a+60>>2]|0))return;else Ha(74472,79014,56,74486)}function Sh(a){a=a|0;a=a+-16|0;_d(a,17220);c[a+56>>2]=12804;if(!(c[a+60>>2]|0)){P_(a);return}else Ha(74472,79014,56,74486)}function Th(a,b){a=a|0;b=b|0;Ph(a+-16|0,b);return}function Uh(a,b){a=a|0;b=b|0;Qh(a+-16|0,b);return}function Vh(a){a=a|0;var b=0;b=c[(c[a>>2]|0)+-12>>2]|0;_d(a+b|0,17220);c[a+(b+56)>>2]=12804;if(!(c[a+(b+60)>>2]|0))return;else Ha(74472,79014,56,74486)}function Wh(a){a=a|0;var b=0,d=0;d=c[(c[a>>2]|0)+-12>>2]|0;b=a+d|0;_d(b,17220);c[a+(d+56)>>2]=12804;if(!(c[a+(d+60)>>2]|0)){P_(b);return}else Ha(74472,79014,56,74486)}function Xh(a){a=a|0;P_(a);return}function Yh(b,d){b=b|0;d=d|0;var e=0,f=0;e=O_(64)|0;c[e+4>>2]=0;c[e+8>>2]=0;c[e+12>>2]=0;f=e+20|0;c[f>>2]=0;c[f+4>>2]=0;c[f+8>>2]=0;c[f+12>>2]=0;c[f+16>>2]=0;c[f+20>>2]=0;a[f+24>>0]=0;c[e+48>>2]=d;c[e>>2]=17256;c[e+56>>2]=17352;c[e+16>>2]=17324;c[e+52>>2]=110;c[e+60>>2]=2;f=c[(c[e>>2]|0)+-12>>2]|0;b=e+f|0;f=e+(f+4)|0;d=(c[f>>2]|0)+-1|0;c[f>>2]=d;if((b|0)==0|(d|0)!=0)return e|0;oc[c[(c[b>>2]|0)+4>>2]&2047](b);return e|0}function Zh(a){a=a|0;_d(a,17368);c[a+56>>2]=12804;if(!(c[a+60>>2]|0))return;else Ha(74472,79014,56,74486)}function _h(a){a=a|0;Zh(a);P_(a);return}function $h(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;f=i;i=i+16|0;e=f;d=o$(b,1488,2544,-1)|0;if(!d){DF(a,b);i=f;return}c[e>>2]=a;if((a|0)!=0?(a=a+((c[(c[a>>2]|0)+-12>>2]|0)+4)|0,b=(c[a>>2]|0)+1|0,c[a>>2]=b,(b|0)==0):0)Ha(79054,79014,48,79068);pc[c[(c[d>>2]|0)+8>>2]&1023](d,e);d=c[e>>2]|0;if(!d){i=f;return}a=c[(c[d>>2]|0)+-12>>2]|0;e=d+a|0;a=d+(a+4)|0;b=(c[a>>2]|0)+-1|0;c[a>>2]=b;if((e|0)==0|(b|0)!=0){i=f;return}oc[c[(c[e>>2]|0)+4>>2]&2047](e);i=f;return}function ai(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;f=i;i=i+16|0;e=f;d=o$(b,1488,2544,-1)|0;if(!d){FF(a,b);i=f;return}c[e>>2]=a;if((a|0)!=0?(a=a+((c[(c[a>>2]|0)+-12>>2]|0)+4)|0,b=(c[a>>2]|0)+1|0,c[a>>2]=b,(b|0)==0):0)Ha(79054,79014,48,79068);pc[c[(c[d>>2]|0)+12>>2]&1023](d,e);d=c[e>>2]|0;if(!d){i=f;return}a=c[(c[d>>2]|0)+-12>>2]|0;e=d+a|0;a=d+(a+4)|0;b=(c[a>>2]|0)+-1|0;c[a>>2]=b;if((e|0)==0|(b|0)!=0){i=f;return}oc[c[(c[e>>2]|0)+4>>2]&2047](e);i=f;return}function bi(a){a=a|0;a=a+-16|0;_d(a,17368);c[a+56>>2]=12804;if(!(c[a+60>>2]|0))return;else Ha(74472,79014,56,74486)}function ci(a){a=a|0;a=a+-16|0;_d(a,17368);c[a+56>>2]=12804;if(!(c[a+60>>2]|0)){P_(a);return}else Ha(74472,79014,56,74486)}function di(a,b){a=a|0;b=b|0;$h(a+-16|0,b);return}function ei(a,b){a=a|0;b=b|0;ai(a+-16|0,b);return}function fi(a){a=a|0;var b=0;b=c[(c[a>>2]|0)+-12>>2]|0;_d(a+b|0,17368);c[a+(b+56)>>2]=12804;if(!(c[a+(b+60)>>2]|0))return;else Ha(74472,79014,56,74486)}function gi(a){a=a|0;var b=0,d=0;d=c[(c[a>>2]|0)+-12>>2]|0;b=a+d|0;_d(b,17368);c[a+(d+56)>>2]=12804;if(!(c[a+(d+60)>>2]|0)){P_(b);return}else Ha(74472,79014,56,74486)}function hi(a){a=a|0;P_(a);return}function ii(b,d){b=b|0;d=d|0;var e=0,f=0;e=O_(64)|0;c[e+4>>2]=0;c[e+8>>2]=0;c[e+12>>2]=0;f=e+20|0;c[f>>2]=0;c[f+4>>2]=0;c[f+8>>2]=0;c[f+12>>2]=0;c[f+16>>2]=0;c[f+20>>2]=0;a[f+24>>0]=0;c[e+48>>2]=d;c[e>>2]=17404;c[e+56>>2]=17500;c[e+16>>2]=17472;c[e+52>>2]=109;c[e+60>>2]=2;f=c[(c[e>>2]|0)+-12>>2]|0;b=e+f|0;f=e+(f+4)|0;d=(c[f>>2]|0)+-1|0;c[f>>2]=d;if((b|0)==0|(d|0)!=0)return e|0;oc[c[(c[b>>2]|0)+4>>2]&2047](b);return e|0}function ji(a){a=a|0;_d(a,17516);c[a+56>>2]=12804;if(!(c[a+60>>2]|0))return;else Ha(74472,79014,56,74486)}function ki(a){a=a|0;ji(a);P_(a);return}function li(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;f=i;i=i+16|0;e=f;d=o$(b,1488,2600,-1)|0;if(!d){DF(a,b);i=f;return}c[e>>2]=a;if((a|0)!=0?(a=a+((c[(c[a>>2]|0)+-12>>2]|0)+4)|0,b=(c[a>>2]|0)+1|0,c[a>>2]=b,(b|0)==0):0)Ha(79054,79014,48,79068);pc[c[(c[d>>2]|0)+8>>2]&1023](d,e);d=c[e>>2]|0;if(!d){i=f;return}a=c[(c[d>>2]|0)+-12>>2]|0;e=d+a|0;a=d+(a+4)|0;b=(c[a>>2]|0)+-1|0;c[a>>2]=b;if((e|0)==0|(b|0)!=0){i=f;return}oc[c[(c[e>>2]|0)+4>>2]&2047](e);i=f;return}function mi(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;f=i;i=i+16|0;e=f;d=o$(b,1488,2600,-1)|0;if(!d){FF(a,b);i=f;return}c[e>>2]=a;if((a|0)!=0?(a=a+((c[(c[a>>2]|0)+-12>>2]|0)+4)|0,b=(c[a>>2]|0)+1|0,c[a>>2]=b,(b|0)==0):0)Ha(79054,79014,48,79068);pc[c[(c[d>>2]|0)+12>>2]&1023](d,e);d=c[e>>2]|0;if(!d){i=f;return}a=c[(c[d>>2]|0)+-12>>2]|0;e=d+a|0;a=d+(a+4)|0;b=(c[a>>2]|0)+-1|0;c[a>>2]=b;if((e|0)==0|(b|0)!=0){i=f;return}oc[c[(c[e>>2]|0)+4>>2]&2047](e);i=f;return}function ni(a){a=a|0;a=a+-16|0;_d(a,17516);c[a+56>>2]=12804;if(!(c[a+60>>2]|0))return;else Ha(74472,79014,56,74486)}function oi(a){a=a|0;a=a+-16|0;_d(a,17516);c[a+56>>2]=12804;if(!(c[a+60>>2]|0)){P_(a);return}else Ha(74472,79014,56,74486)}function pi(a,b){a=a|0;b=b|0;li(a+-16|0,b);return}function qi(a,b){a=a|0;b=b|0;mi(a+-16|0,b);return}function ri(a){a=a|0;var b=0;b=c[(c[a>>2]|0)+-12>>2]|0;_d(a+b|0,17516);c[a+(b+56)>>2]=12804;if(!(c[a+(b+60)>>2]|0))return;else Ha(74472,79014,56,74486)}function si(a){a=a|0;var b=0,d=0;d=c[(c[a>>2]|0)+-12>>2]|0;b=a+d|0;_d(b,17516);c[a+(d+56)>>2]=12804;if(!(c[a+(d+60)>>2]|0)){P_(b);return}else Ha(74472,79014,56,74486)}function ti(a){a=a|0;P_(a);return}function ui(b,d){b=b|0;d=d|0;var e=0,f=0;e=O_(64)|0;c[e+4>>2]=0;c[e+8>>2]=0;c[e+12>>2]=0;f=e+20|0;c[f>>2]=0;c[f+4>>2]=0;c[f+8>>2]=0;c[f+12>>2]=0;c[f+16>>2]=0;c[f+20>>2]=0;a[f+24>>0]=0;c[e+48>>2]=d;c[e>>2]=17552;c[e+56>>2]=17648;c[e+16>>2]=17620;c[e+52>>2]=108;c[e+60>>2]=2;f=c[(c[e>>2]|0)+-12>>2]|0;b=e+f|0;f=e+(f+4)|0;d=(c[f>>2]|0)+-1|0;c[f>>2]=d;if((b|0)==0|(d|0)!=0)return e|0;oc[c[(c[b>>2]|0)+4>>2]&2047](b);return e|0}function vi(a){a=a|0;_d(a,17664);c[a+56>>2]=12804;if(!(c[a+60>>2]|0))return;else Ha(74472,79014,56,74486)}function wi(a){a=a|0;vi(a);P_(a);return}function xi(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;f=i;i=i+16|0;e=f;d=o$(b,1488,2656,-1)|0;if(!d){DF(a,b);i=f;return}c[e>>2]=a;if((a|0)!=0?(a=a+((c[(c[a>>2]|0)+-12>>2]|0)+4)|0,b=(c[a>>2]|0)+1|0,c[a>>2]=b,(b|0)==0):0)Ha(79054,79014,48,79068);pc[c[(c[d>>2]|0)+8>>2]&1023](d,e);d=c[e>>2]|0;if(!d){i=f;return}a=c[(c[d>>2]|0)+-12>>2]|0;e=d+a|0;a=d+(a+4)|0;b=(c[a>>2]|0)+-1|0;c[a>>2]=b;if((e|0)==0|(b|0)!=0){i=f;return}oc[c[(c[e>>2]|0)+4>>2]&2047](e);i=f;return}function yi(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;f=i;i=i+16|0;e=f;d=o$(b,1488,2656,-1)|0;if(!d){FF(a,b);i=f;return}c[e>>2]=a;if((a|0)!=0?(a=a+((c[(c[a>>2]|0)+-12>>2]|0)+4)|0,b=(c[a>>2]|0)+1|0,c[a>>2]=b,(b|0)==0):0)Ha(79054,79014,48,79068);pc[c[(c[d>>2]|0)+12>>2]&1023](d,e);d=c[e>>2]|0;if(!d){i=f;return}a=c[(c[d>>2]|0)+-12>>2]|0;e=d+a|0;a=d+(a+4)|0;b=(c[a>>2]|0)+-1|0;c[a>>2]=b;if((e|0)==0|(b|0)!=0){i=f;return}oc[c[(c[e>>2]|0)+4>>2]&2047](e);i=f;return}function zi(a){a=a|0;a=a+-16|0;_d(a,17664);c[a+56>>2]=12804;if(!(c[a+60>>2]|0))return;else Ha(74472,79014,56,74486)}function Ai(a){a=a|0;a=a+-16|0;_d(a,17664);c[a+56>>2]=12804;if(!(c[a+60>>2]|0)){P_(a);return}else Ha(74472,79014,56,74486)}function Bi(a,b){a=a|0;b=b|0;xi(a+-16|0,b);return}function Ci(a,b){a=a|0;b=b|0;yi(a+-16|0,b);return}function Di(a){a=a|0;var b=0;b=c[(c[a>>2]|0)+-12>>2]|0;_d(a+b|0,17664);c[a+(b+56)>>2]=12804;if(!(c[a+(b+60)>>2]|0))return;else Ha(74472,79014,56,74486)}function Ei(a){a=a|0;var b=0,d=0;d=c[(c[a>>2]|0)+-12>>2]|0;b=a+d|0;_d(b,17664);c[a+(d+56)>>2]=12804;if(!(c[a+(d+60)>>2]|0)){P_(b);return}else Ha(74472,79014,56,74486)}function Fi(a){a=a|0;P_(a);return}function Gi(b,d){b=b|0;d=d|0;var e=0,f=0;e=O_(64)|0;c[e+4>>2]=0;c[e+8>>2]=0;c[e+12>>2]=0;f=e+20|0;c[f>>2]=0;c[f+4>>2]=0;c[f+8>>2]=0;c[f+12>>2]=0;c[f+16>>2]=0;c[f+20>>2]=0;a[f+24>>0]=0;c[e+48>>2]=d;c[e>>2]=17700;c[e+56>>2]=17796;c[e+16>>2]=17768;c[e+52>>2]=107;c[e+60>>2]=2;f=c[(c[e>>2]|0)+-12>>2]|0;b=e+f|0;f=e+(f+4)|0;d=(c[f>>2]|0)+-1|0;c[f>>2]=d;if((b|0)==0|(d|0)!=0)return e|0;oc[c[(c[b>>2]|0)+4>>2]&2047](b);return e|0}function Hi(a){a=a|0;_d(a,17812);c[a+56>>2]=12804;if(!(c[a+60>>2]|0))return;else Ha(74472,79014,56,74486)}function Ii(a){a=a|0;Hi(a);P_(a);return}function Ji(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;f=i;i=i+16|0;e=f;d=o$(b,1488,2712,-1)|0;if(!d){DF(a,b);i=f;return}c[e>>2]=a;if((a|0)!=0?(a=a+((c[(c[a>>2]|0)+-12>>2]|0)+4)|0,b=(c[a>>2]|0)+1|0,c[a>>2]=b,(b|0)==0):0)Ha(79054,79014,48,79068);pc[c[(c[d>>2]|0)+8>>2]&1023](d,e);d=c[e>>2]|0;if(!d){i=f;return}a=c[(c[d>>2]|0)+-12>>2]|0;e=d+a|0;a=d+(a+4)|0;b=(c[a>>2]|0)+-1|0;c[a>>2]=b;if((e|0)==0|(b|0)!=0){i=f;return}oc[c[(c[e>>2]|0)+4>>2]&2047](e);i=f;return}function Ki(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;f=i;i=i+16|0;e=f;d=o$(b,1488,2712,-1)|0;if(!d){FF(a,b);i=f;return}c[e>>2]=a;if((a|0)!=0?(a=a+((c[(c[a>>2]|0)+-12>>2]|0)+4)|0,b=(c[a>>2]|0)+1|0,c[a>>2]=b,(b|0)==0):0)Ha(79054,79014,48,79068);pc[c[(c[d>>2]|0)+12>>2]&1023](d,e);d=c[e>>2]|0;if(!d){i=f;return}a=c[(c[d>>2]|0)+-12>>2]|0;e=d+a|0;a=d+(a+4)|0;b=(c[a>>2]|0)+-1|0;c[a>>2]=b;if((e|0)==0|(b|0)!=0){i=f;return}oc[c[(c[e>>2]|0)+4>>2]&2047](e);i=f;return}function Li(a){a=a|0;a=a+-16|0;_d(a,17812);c[a+56>>2]=12804;if(!(c[a+60>>2]|0))return;else Ha(74472,79014,56,74486)}function Mi(a){a=a|0;a=a+-16|0;_d(a,17812);c[a+56>>2]=12804;if(!(c[a+60>>2]|0)){P_(a);return}else Ha(74472,79014,56,74486)}function Ni(a,b){a=a|0;b=b|0;Ji(a+-16|0,b);return}function Oi(a,b){a=a|0;b=b|0;Ki(a+-16|0,b);return}function Pi(a){a=a|0;var b=0;b=c[(c[a>>2]|0)+-12>>2]|0;_d(a+b|0,17812);c[a+(b+56)>>2]=12804;if(!(c[a+(b+60)>>2]|0))return;else Ha(74472,79014,56,74486)}function Qi(a){a=a|0;var b=0,d=0;d=c[(c[a>>2]|0)+-12>>2]|0;b=a+d|0;_d(b,17812);c[a+(d+56)>>2]=12804;if(!(c[a+(d+60)>>2]|0)){P_(b);return}else Ha(74472,79014,56,74486)}function Ri(a){a=a|0;P_(a);return}function Si(b,d){b=b|0;d=d|0;var e=0,f=0;e=O_(64)|0;c[e+4>>2]=0;c[e+8>>2]=0;c[e+12>>2]=0;f=e+20|0;c[f>>2]=0;c[f+4>>2]=0;c[f+8>>2]=0;c[f+12>>2]=0;c[f+16>>2]=0;c[f+20>>2]=0;a[f+24>>0]=0;c[e+48>>2]=d;c[e>>2]=17848;c[e+56>>2]=17944;c[e+16>>2]=17916;c[e+52>>2]=106;c[e+60>>2]=2;f=c[(c[e>>2]|0)+-12>>2]|0;b=e+f|0;f=e+(f+4)|0;d=(c[f>>2]|0)+-1|0;c[f>>2]=d;if((b|0)==0|(d|0)!=0)return e|0;oc[c[(c[b>>2]|0)+4>>2]&2047](b);return e|0}function Ti(a){a=a|0;_d(a,17960);c[a+56>>2]=12804;if(!(c[a+60>>2]|0))return;else Ha(74472,79014,56,74486)}function Ui(a){a=a|0;Ti(a);P_(a);return}function Vi(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;f=i;i=i+16|0;e=f;d=o$(b,1488,2768,-1)|0;if(!d){DF(a,b);i=f;return}c[e>>2]=a;if((a|0)!=0?(a=a+((c[(c[a>>2]|0)+-12>>2]|0)+4)|0,b=(c[a>>2]|0)+1|0,c[a>>2]=b,(b|0)==0):0)Ha(79054,79014,48,79068);pc[c[(c[d>>2]|0)+8>>2]&1023](d,e);d=c[e>>2]|0;if(!d){i=f;return}a=c[(c[d>>2]|0)+-12>>2]|0;e=d+a|0;a=d+(a+4)|0;b=(c[a>>2]|0)+-1|0;c[a>>2]=b;if((e|0)==0|(b|0)!=0){i=f;return}oc[c[(c[e>>2]|0)+4>>2]&2047](e);i=f;return}function Wi(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;f=i;i=i+16|0;e=f;d=o$(b,1488,2768,-1)|0;if(!d){FF(a,b);i=f;return}c[e>>2]=a;if((a|0)!=0?(a=a+((c[(c[a>>2]|0)+-12>>2]|0)+4)|0,b=(c[a>>2]|0)+1|0,c[a>>2]=b,(b|0)==0):0)Ha(79054,79014,48,79068);pc[c[(c[d>>2]|0)+12>>2]&1023](d,e);d=c[e>>2]|0;if(!d){i=f;return}a=c[(c[d>>2]|0)+-12>>2]|0;e=d+a|0;a=d+(a+4)|0;b=(c[a>>2]|0)+-1|0;c[a>>2]=b;if((e|0)==0|(b|0)!=0){i=f;return}oc[c[(c[e>>2]|0)+4>>2]&2047](e);i=f;return}function Xi(a){a=a|0;a=a+-16|0;_d(a,17960);c[a+56>>2]=12804;if(!(c[a+60>>2]|0))return;else Ha(74472,79014,56,74486)}function Yi(a){a=a|0;a=a+-16|0;_d(a,17960);c[a+56>>2]=12804;if(!(c[a+60>>2]|0)){P_(a);return}else Ha(74472,79014,56,74486)}function Zi(a,b){a=a|0;b=b|0;Vi(a+-16|0,b);return}function _i(a,b){a=a|0;b=b|0;Wi(a+-16|0,b);return}function $i(a){a=a|0;var b=0;b=c[(c[a>>2]|0)+-12>>2]|0;_d(a+b|0,17960);c[a+(b+56)>>2]=12804;if(!(c[a+(b+60)>>2]|0))return;else Ha(74472,79014,56,74486)}function aj(a){a=a|0;var b=0,d=0;d=c[(c[a>>2]|0)+-12>>2]|0;b=a+d|0;_d(b,17960);c[a+(d+56)>>2]=12804;if(!(c[a+(d+60)>>2]|0)){P_(b);return}else Ha(74472,79014,56,74486)}function bj(a){a=a|0;P_(a);return}function cj(b,d){b=b|0;d=d|0;var e=0,f=0;e=O_(64)|0;c[e+4>>2]=0;c[e+8>>2]=0;c[e+12>>2]=0;f=e+20|0;c[f>>2]=0;c[f+4>>2]=0;c[f+8>>2]=0;c[f+12>>2]=0;c[f+16>>2]=0;c[f+20>>2]=0;a[f+24>>0]=0;c[e+48>>2]=d;c[e>>2]=17996;c[e+56>>2]=18092;c[e+16>>2]=18064;c[e+52>>2]=105;c[e+60>>2]=2;f=c[(c[e>>2]|0)+-12>>2]|0;b=e+f|0;f=e+(f+4)|0;d=(c[f>>2]|0)+-1|0;c[f>>2]=d;if((b|0)==0|(d|0)!=0)return e|0;oc[c[(c[b>>2]|0)+4>>2]&2047](b);return e|0}function dj(a){a=a|0;_d(a,18108);c[a+56>>2]=12804;if(!(c[a+60>>2]|0))return;else Ha(74472,79014,56,74486)}function ej(a){a=a|0;dj(a);P_(a);return}function fj(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;f=i;i=i+16|0;e=f;d=o$(b,1488,2824,-1)|0;if(!d){DF(a,b);i=f;return}c[e>>2]=a;if((a|0)!=0?(a=a+((c[(c[a>>2]|0)+-12>>2]|0)+4)|0,b=(c[a>>2]|0)+1|0,c[a>>2]=b,(b|0)==0):0)Ha(79054,79014,48,79068);pc[c[(c[d>>2]|0)+8>>2]&1023](d,e);d=c[e>>2]|0;if(!d){i=f;return}a=c[(c[d>>2]|0)+-12>>2]|0;e=d+a|0;a=d+(a+4)|0;b=(c[a>>2]|0)+-1|0;c[a>>2]=b;if((e|0)==0|(b|0)!=0){i=f;return}oc[c[(c[e>>2]|0)+4>>2]&2047](e);i=f;return}function gj(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;f=i;i=i+16|0;e=f;d=o$(b,1488,2824,-1)|0;if(!d){FF(a,b);i=f;return}c[e>>2]=a;if((a|0)!=0?(a=a+((c[(c[a>>2]|0)+-12>>2]|0)+4)|0,b=(c[a>>2]|0)+1|0,c[a>>2]=b,(b|0)==0):0)Ha(79054,79014,48,79068);pc[c[(c[d>>2]|0)+12>>2]&1023](d,e);d=c[e>>2]|0;if(!d){i=f;return}a=c[(c[d>>2]|0)+-12>>2]|0;e=d+a|0;a=d+(a+4)|0;b=(c[a>>2]|0)+-1|0;c[a>>2]=b;if((e|0)==0|(b|0)!=0){i=f;return}oc[c[(c[e>>2]|0)+4>>2]&2047](e);i=f;return}function hj(a){a=a|0;a=a+-16|0;_d(a,18108);c[a+56>>2]=12804;if(!(c[a+60>>2]|0))return;else Ha(74472,79014,56,74486)}function ij(a){a=a|0;a=a+-16|0;_d(a,18108);c[a+56>>2]=12804;if(!(c[a+60>>2]|0)){P_(a);return}else Ha(74472,79014,56,74486)}function jj(a,b){a=a|0;b=b|0;fj(a+-16|0,b);return}function kj(a,b){a=a|0;b=b|0;gj(a+-16|0,b);return}function lj(a){a=a|0;var b=0;b=c[(c[a>>2]|0)+-12>>2]|0;_d(a+b|0,18108);c[a+(b+56)>>2]=12804;if(!(c[a+(b+60)>>2]|0))return;else Ha(74472,79014,56,74486)}function mj(a){a=a|0;var b=0,d=0;d=c[(c[a>>2]|0)+-12>>2]|0;b=a+d|0;_d(b,18108);c[a+(d+56)>>2]=12804;if(!(c[a+(d+60)>>2]|0)){P_(b);return}else Ha(74472,79014,56,74486)}function nj(a){a=a|0;P_(a);return}function oj(b,d){b=b|0;d=d|0;var e=0,f=0;e=O_(64)|0;c[e+4>>2]=0;c[e+8>>2]=0;c[e+12>>2]=0;f=e+20|0;c[f>>2]=0;c[f+4>>2]=0;c[f+8>>2]=0;c[f+12>>2]=0;c[f+16>>2]=0;c[f+20>>2]=0;a[f+24>>0]=0;c[e+48>>2]=d;c[e>>2]=18144;c[e+56>>2]=18240;c[e+16>>2]=18212;c[e+52>>2]=104;c[e+60>>2]=2;f=c[(c[e>>2]|0)+-12>>2]|0;b=e+f|0;f=e+(f+4)|0;d=(c[f>>2]|0)+-1|0;c[f>>2]=d;if((b|0)==0|(d|0)!=0)return e|0;oc[c[(c[b>>2]|0)+4>>2]&2047](b);return e|0}function pj(a){a=a|0;_d(a,18256);c[a+56>>2]=12804;if(!(c[a+60>>2]|0))return;else Ha(74472,79014,56,74486)}function qj(a){a=a|0;pj(a);P_(a);return}function rj(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;f=i;i=i+16|0;e=f;d=o$(b,1488,2880,-1)|0;if(!d){DF(a,b);i=f;return}c[e>>2]=a;if((a|0)!=0?(a=a+((c[(c[a>>2]|0)+-12>>2]|0)+4)|0,b=(c[a>>2]|0)+1|0,c[a>>2]=b,(b|0)==0):0)Ha(79054,79014,48,79068);pc[c[(c[d>>2]|0)+8>>2]&1023](d,e);d=c[e>>2]|0;if(!d){i=f;return}a=c[(c[d>>2]|0)+-12>>2]|0;e=d+a|0;a=d+(a+4)|0;b=(c[a>>2]|0)+-1|0;c[a>>2]=b;if((e|0)==0|(b|0)!=0){i=f;return}oc[c[(c[e>>2]|0)+4>>2]&2047](e);i=f;return}function sj(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;f=i;i=i+16|0;e=f;d=o$(b,1488,2880,-1)|0;if(!d){FF(a,b);i=f;return}c[e>>2]=a;if((a|0)!=0?(a=a+((c[(c[a>>2]|0)+-12>>2]|0)+4)|0,b=(c[a>>2]|0)+1|0,c[a>>2]=b,(b|0)==0):0)Ha(79054,79014,48,79068);pc[c[(c[d>>2]|0)+12>>2]&1023](d,e);d=c[e>>2]|0;if(!d){i=f;return}a=c[(c[d>>2]|0)+-12>>2]|0;e=d+a|0;a=d+(a+4)|0;b=(c[a>>2]|0)+-1|0;c[a>>2]=b;if((e|0)==0|(b|0)!=0){i=f;return}oc[c[(c[e>>2]|0)+4>>2]&2047](e);i=f;return}function tj(a){a=a|0;a=a+-16|0;_d(a,18256);c[a+56>>2]=12804;if(!(c[a+60>>2]|0))return;else Ha(74472,79014,56,74486)}function uj(a){a=a|0;a=a+-16|0;_d(a,18256);c[a+56>>2]=12804;if(!(c[a+60>>2]|0)){P_(a);return}else Ha(74472,79014,56,74486)}function vj(a,b){a=a|0;b=b|0;rj(a+-16|0,b);return}function wj(a,b){a=a|0;b=b|0;sj(a+-16|0,b);return}function xj(a){a=a|0;var b=0;b=c[(c[a>>2]|0)+-12>>2]|0;_d(a+b|0,18256);c[a+(b+56)>>2]=12804;if(!(c[a+(b+60)>>2]|0))return;else Ha(74472,79014,56,74486)}function yj(a){a=a|0;var b=0,d=0;d=c[(c[a>>2]|0)+-12>>2]|0;b=a+d|0;_d(b,18256);c[a+(d+56)>>2]=12804;if(!(c[a+(d+60)>>2]|0)){P_(b);return}else Ha(74472,79014,56,74486)}function zj(a){a=a|0;P_(a);return}function Aj(b,d){b=b|0;d=d|0;var e=0,f=0;e=O_(64)|0;c[e+4>>2]=0;c[e+8>>2]=0;c[e+12>>2]=0;f=e+20|0;c[f>>2]=0;c[f+4>>2]=0;c[f+8>>2]=0;c[f+12>>2]=0;c[f+16>>2]=0;c[f+20>>2]=0;a[f+24>>0]=0;c[e+48>>2]=d;c[e>>2]=18292;c[e+56>>2]=18388;c[e+16>>2]=18360;c[e+52>>2]=103;c[e+60>>2]=2;f=c[(c[e>>2]|0)+-12>>2]|0;b=e+f|0;f=e+(f+4)|0;d=(c[f>>2]|0)+-1|0;c[f>>2]=d;if((b|0)==0|(d|0)!=0)return e|0;oc[c[(c[b>>2]|0)+4>>2]&2047](b);return e|0}function Bj(a){a=a|0;_d(a,18404);c[a+56>>2]=12804;if(!(c[a+60>>2]|0))return;else Ha(74472,79014,56,74486)}function Cj(a){a=a|0;Bj(a);P_(a);return}function Dj(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;f=i;i=i+16|0;e=f;d=o$(b,1488,2936,-1)|0;if(!d){DF(a,b);i=f;return}c[e>>2]=a;if((a|0)!=0?(a=a+((c[(c[a>>2]|0)+-12>>2]|0)+4)|0,b=(c[a>>2]|0)+1|0,c[a>>2]=b,(b|0)==0):0)Ha(79054,79014,48,79068);pc[c[(c[d>>2]|0)+8>>2]&1023](d,e);d=c[e>>2]|0;if(!d){i=f;return}a=c[(c[d>>2]|0)+-12>>2]|0;e=d+a|0;a=d+(a+4)|0;b=(c[a>>2]|0)+-1|0;c[a>>2]=b;if((e|0)==0|(b|0)!=0){i=f;return}oc[c[(c[e>>2]|0)+4>>2]&2047](e);i=f;return}function Ej(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;f=i;i=i+16|0;e=f;d=o$(b,1488,2936,-1)|0;if(!d){FF(a,b);i=f;return}c[e>>2]=a;if((a|0)!=0?(a=a+((c[(c[a>>2]|0)+-12>>2]|0)+4)|0,b=(c[a>>2]|0)+1|0,c[a>>2]=b,(b|0)==0):0)Ha(79054,79014,48,79068);pc[c[(c[d>>2]|0)+12>>2]&1023](d,e);d=c[e>>2]|0;if(!d){i=f;return}a=c[(c[d>>2]|0)+-12>>2]|0;e=d+a|0;a=d+(a+4)|0;b=(c[a>>2]|0)+-1|0;c[a>>2]=b;if((e|0)==0|(b|0)!=0){i=f;return}oc[c[(c[e>>2]|0)+4>>2]&2047](e);i=f;return}function Fj(a){a=a|0;a=a+-16|0;_d(a,18404);c[a+56>>2]=12804;if(!(c[a+60>>2]|0))return;else Ha(74472,79014,56,74486)}function Gj(a){a=a|0;a=a+-16|0;_d(a,18404);c[a+56>>2]=12804;if(!(c[a+60>>2]|0)){P_(a);return}else Ha(74472,79014,56,74486)}function Hj(a,b){a=a|0;b=b|0;Dj(a+-16|0,b);return}function Ij(a,b){a=a|0;b=b|0;Ej(a+-16|0,b);return}function Jj(a){a=a|0;var b=0;b=c[(c[a>>2]|0)+-12>>2]|0;_d(a+b|0,18404);c[a+(b+56)>>2]=12804;if(!(c[a+(b+60)>>2]|0))return;else Ha(74472,79014,56,74486)}function Kj(a){a=a|0;var b=0,d=0;d=c[(c[a>>2]|0)+-12>>2]|0;b=a+d|0;_d(b,18404);c[a+(d+56)>>2]=12804;if(!(c[a+(d+60)>>2]|0)){P_(b);return}else Ha(74472,79014,56,74486)}function Lj(a){a=a|0;P_(a);return}function Mj(b,d){b=b|0;d=d|0;var e=0,f=0;e=O_(64)|0;c[e+4>>2]=0;c[e+8>>2]=0;c[e+12>>2]=0;f=e+20|0;c[f>>2]=0;c[f+4>>2]=0;c[f+8>>2]=0;c[f+12>>2]=0;c[f+16>>2]=0;c[f+20>>2]=0;a[f+24>>0]=0;c[e+48>>2]=d;c[e>>2]=18440;c[e+56>>2]=18536;c[e+16>>2]=18508;c[e+52>>2]=102;c[e+60>>2]=2;f=c[(c[e>>2]|0)+-12>>2]|0;b=e+f|0;f=e+(f+4)|0;d=(c[f>>2]|0)+-1|0;c[f>>2]=d;if((b|0)==0|(d|0)!=0)return e|0;oc[c[(c[b>>2]|0)+4>>2]&2047](b);return e|0}function Nj(a){a=a|0;_d(a,18552);c[a+56>>2]=12804;if(!(c[a+60>>2]|0))return;else Ha(74472,79014,56,74486)}function Oj(a){a=a|0;Nj(a);P_(a);return}function Pj(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;f=i;i=i+16|0;e=f;d=o$(b,1488,2992,-1)|0;if(!d){DF(a,b);i=f;return}c[e>>2]=a;if((a|0)!=0?(a=a+((c[(c[a>>2]|0)+-12>>2]|0)+4)|0,b=(c[a>>2]|0)+1|0,c[a>>2]=b,(b|0)==0):0)Ha(79054,79014,48,79068);pc[c[(c[d>>2]|0)+8>>2]&1023](d,e);d=c[e>>2]|0;if(!d){i=f;return}a=c[(c[d>>2]|0)+-12>>2]|0;e=d+a|0;a=d+(a+4)|0;b=(c[a>>2]|0)+-1|0;c[a>>2]=b;if((e|0)==0|(b|0)!=0){i=f;return}oc[c[(c[e>>2]|0)+4>>2]&2047](e);i=f;return}function Qj(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;f=i;i=i+16|0;e=f;d=o$(b,1488,2992,-1)|0;if(!d){FF(a,b);i=f;return}c[e>>2]=a;if((a|0)!=0?(a=a+((c[(c[a>>2]|0)+-12>>2]|0)+4)|0,b=(c[a>>2]|0)+1|0,c[a>>2]=b,(b|0)==0):0)Ha(79054,79014,48,79068);pc[c[(c[d>>2]|0)+12>>2]&1023](d,e);d=c[e>>2]|0;if(!d){i=f;return}a=c[(c[d>>2]|0)+-12>>2]|0;e=d+a|0;a=d+(a+4)|0;b=(c[a>>2]|0)+-1|0;c[a>>2]=b;if((e|0)==0|(b|0)!=0){i=f;return}oc[c[(c[e>>2]|0)+4>>2]&2047](e);i=f;return}function Rj(a){a=a|0;a=a+-16|0;_d(a,18552);c[a+56>>2]=12804;if(!(c[a+60>>2]|0))return;else Ha(74472,79014,56,74486)}function Sj(a){a=a|0;a=a+-16|0;_d(a,18552);c[a+56>>2]=12804;if(!(c[a+60>>2]|0)){P_(a);return}else Ha(74472,79014,56,74486)}function Tj(a,b){a=a|0;b=b|0;Pj(a+-16|0,b);return}function Uj(a,b){a=a|0;b=b|0;Qj(a+-16|0,b);return}function Vj(a){a=a|0;var b=0;b=c[(c[a>>2]|0)+-12>>2]|0;_d(a+b|0,18552);c[a+(b+56)>>2]=12804;if(!(c[a+(b+60)>>2]|0))return;else Ha(74472,79014,56,74486)}function Wj(a){a=a|0;var b=0,d=0;d=c[(c[a>>2]|0)+-12>>2]|0;b=a+d|0;_d(b,18552);c[a+(d+56)>>2]=12804;if(!(c[a+(d+60)>>2]|0)){P_(b);return}else Ha(74472,79014,56,74486)}function Xj(a){a=a|0;P_(a);return}function Yj(b,d){b=b|0;d=d|0;var e=0,f=0;e=O_(64)|0;c[e+4>>2]=0;c[e+8>>2]=0;c[e+12>>2]=0;f=e+20|0;c[f>>2]=0;c[f+4>>2]=0;c[f+8>>2]=0;c[f+12>>2]=0;c[f+16>>2]=0;c[f+20>>2]=0;a[f+24>>0]=0;c[e+48>>2]=d;c[e>>2]=18588;c[e+56>>2]=18684;c[e+16>>2]=18656;c[e+52>>2]=101;c[e+60>>2]=2;f=c[(c[e>>2]|0)+-12>>2]|0;b=e+f|0;f=e+(f+4)|0;d=(c[f>>2]|0)+-1|0;c[f>>2]=d;if((b|0)==0|(d|0)!=0)return e|0;oc[c[(c[b>>2]|0)+4>>2]&2047](b);return e|0}function Zj(a){a=a|0;_d(a,18700);c[a+56>>2]=12804;if(!(c[a+60>>2]|0))return;else Ha(74472,79014,56,74486)}function _j(a){a=a|0;Zj(a);P_(a);return}function $j(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;f=i;i=i+16|0;e=f;d=o$(b,1488,3048,-1)|0;if(!d){DF(a,b);i=f;return}c[e>>2]=a;if((a|0)!=0?(a=a+((c[(c[a>>2]|0)+-12>>2]|0)+4)|0,b=(c[a>>2]|0)+1|0,c[a>>2]=b,(b|0)==0):0)Ha(79054,79014,48,79068);pc[c[(c[d>>2]|0)+8>>2]&1023](d,e);d=c[e>>2]|0;if(!d){i=f;return}a=c[(c[d>>2]|0)+-12>>2]|0;e=d+a|0;a=d+(a+4)|0;b=(c[a>>2]|0)+-1|0;c[a>>2]=b;if((e|0)==0|(b|0)!=0){i=f;return}oc[c[(c[e>>2]|0)+4>>2]&2047](e);i=f;return}function ak(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;f=i;i=i+16|0;e=f;d=o$(b,1488,3048,-1)|0;if(!d){FF(a,b);i=f;return}c[e>>2]=a;if((a|0)!=0?(a=a+((c[(c[a>>2]|0)+-12>>2]|0)+4)|0,b=(c[a>>2]|0)+1|0,c[a>>2]=b,(b|0)==0):0)Ha(79054,79014,48,79068);pc[c[(c[d>>2]|0)+12>>2]&1023](d,e);d=c[e>>2]|0;if(!d){i=f;return}a=c[(c[d>>2]|0)+-12>>2]|0;e=d+a|0;a=d+(a+4)|0;b=(c[a>>2]|0)+-1|0;c[a>>2]=b;if((e|0)==0|(b|0)!=0){i=f;return}oc[c[(c[e>>2]|0)+4>>2]&2047](e);i=f;return}function bk(a){a=a|0;a=a+-16|0;_d(a,18700);c[a+56>>2]=12804;if(!(c[a+60>>2]|0))return;else Ha(74472,79014,56,74486)}function ck(a){a=a|0;a=a+-16|0;_d(a,18700);c[a+56>>2]=12804;if(!(c[a+60>>2]|0)){P_(a);return}else Ha(74472,79014,56,74486)}function dk(a,b){a=a|0;b=b|0;$j(a+-16|0,b);return}function ek(a,b){a=a|0;b=b|0;ak(a+-16|0,b);return}function fk(a){a=a|0;var b=0;b=c[(c[a>>2]|0)+-12>>2]|0;_d(a+b|0,18700);c[a+(b+56)>>2]=12804;if(!(c[a+(b+60)>>2]|0))return;else Ha(74472,79014,56,74486)}function gk(a){a=a|0;var b=0,d=0;d=c[(c[a>>2]|0)+-12>>2]|0;b=a+d|0;_d(b,18700);c[a+(d+56)>>2]=12804;if(!(c[a+(d+60)>>2]|0)){P_(b);return}else Ha(74472,79014,56,74486)}function hk(a){a=a|0;P_(a);return}function ik(b,d){b=b|0;d=d|0;var e=0,f=0;e=O_(64)|0;c[e+4>>2]=0;c[e+8>>2]=0;c[e+12>>2]=0;f=e+20|0;c[f>>2]=0;c[f+4>>2]=0;c[f+8>>2]=0;c[f+12>>2]=0;c[f+16>>2]=0;c[f+20>>2]=0;a[f+24>>0]=0;c[e+48>>2]=d;c[e>>2]=18736;c[e+56>>2]=18832;c[e+16>>2]=18804;c[e+52>>2]=100;c[e+60>>2]=2;f=c[(c[e>>2]|0)+-12>>2]|0;b=e+f|0;f=e+(f+4)|0;d=(c[f>>2]|0)+-1|0;c[f>>2]=d;if((b|0)==0|(d|0)!=0)return e|0;oc[c[(c[b>>2]|0)+4>>2]&2047](b);return e|0}function jk(a){a=a|0;_d(a,18848);c[a+56>>2]=12804;if(!(c[a+60>>2]|0))return;else Ha(74472,79014,56,74486)}function kk(a){a=a|0;jk(a);P_(a);return}function lk(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;f=i;i=i+16|0;e=f;d=o$(b,1488,3104,-1)|0;if(!d){DF(a,b);i=f;return}c[e>>2]=a;if((a|0)!=0?(a=a+((c[(c[a>>2]|0)+-12>>2]|0)+4)|0,b=(c[a>>2]|0)+1|0,c[a>>2]=b,(b|0)==0):0)Ha(79054,79014,48,79068);pc[c[(c[d>>2]|0)+8>>2]&1023](d,e);d=c[e>>2]|0;if(!d){i=f;return}a=c[(c[d>>2]|0)+-12>>2]|0;e=d+a|0;a=d+(a+4)|0;b=(c[a>>2]|0)+-1|0;c[a>>2]=b;if((e|0)==0|(b|0)!=0){i=f;return}oc[c[(c[e>>2]|0)+4>>2]&2047](e);i=f;return}function mk(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;f=i;i=i+16|0;e=f;d=o$(b,1488,3104,-1)|0;if(!d){FF(a,b);i=f;return}c[e>>2]=a;if((a|0)!=0?(a=a+((c[(c[a>>2]|0)+-12>>2]|0)+4)|0,b=(c[a>>2]|0)+1|0,c[a>>2]=b,(b|0)==0):0)Ha(79054,79014,48,79068);pc[c[(c[d>>2]|0)+12>>2]&1023](d,e);d=c[e>>2]|0;if(!d){i=f;return}a=c[(c[d>>2]|0)+-12>>2]|0;e=d+a|0;a=d+(a+4)|0;b=(c[a>>2]|0)+-1|0;c[a>>2]=b;if((e|0)==0|(b|0)!=0){i=f;return}oc[c[(c[e>>2]|0)+4>>2]&2047](e);i=f;return}function nk(a){a=a|0;a=a+-16|0;_d(a,18848);c[a+56>>2]=12804;if(!(c[a+60>>2]|0))return;else Ha(74472,79014,56,74486)}function ok(a){a=a|0;a=a+-16|0;_d(a,18848);c[a+56>>2]=12804;if(!(c[a+60>>2]|0)){P_(a);return}else Ha(74472,79014,56,74486)}function pk(a,b){a=a|0;b=b|0;lk(a+-16|0,b);return}function qk(a,b){a=a|0;b=b|0;mk(a+-16|0,b);return}function rk(a){a=a|0;var b=0;b=c[(c[a>>2]|0)+-12>>2]|0;_d(a+b|0,18848);c[a+(b+56)>>2]=12804;if(!(c[a+(b+60)>>2]|0))return;else Ha(74472,79014,56,74486)}function sk(a){a=a|0;var b=0,d=0;d=c[(c[a>>2]|0)+-12>>2]|0;b=a+d|0;_d(b,18848);c[a+(d+56)>>2]=12804;if(!(c[a+(d+60)>>2]|0)){P_(b);return}else Ha(74472,79014,56,74486)}function tk(a){a=a|0;P_(a);return}function uk(b,d){b=b|0;d=d|0;var e=0,f=0;e=O_(64)|0;c[e+4>>2]=0;c[e+8>>2]=0;c[e+12>>2]=0;f=e+20|0;c[f>>2]=0;c[f+4>>2]=0;c[f+8>>2]=0;c[f+12>>2]=0;c[f+16>>2]=0;c[f+20>>2]=0;a[f+24>>0]=0;c[e+48>>2]=d;c[e>>2]=18884;c[e+56>>2]=18980;c[e+16>>2]=18952;c[e+52>>2]=99;c[e+60>>2]=2;f=c[(c[e>>2]|0)+-12>>2]|0;b=e+f|0;f=e+(f+4)|0;d=(c[f>>2]|0)+-1|0;c[f>>2]=d;if((b|0)==0|(d|0)!=0)return e|0;oc[c[(c[b>>2]|0)+4>>2]&2047](b);return e|0}function vk(a){a=a|0;_d(a,18996);c[a+56>>2]=12804;if(!(c[a+60>>2]|0))return;else Ha(74472,79014,56,74486)}function wk(a){a=a|0;vk(a);P_(a);return}function xk(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;f=i;i=i+16|0;e=f;d=o$(b,1488,3160,-1)|0;if(!d){DF(a,b);i=f;return}c[e>>2]=a;if((a|0)!=0?(a=a+((c[(c[a>>2]|0)+-12>>2]|0)+4)|0,b=(c[a>>2]|0)+1|0,c[a>>2]=b,(b|0)==0):0)Ha(79054,79014,48,79068);pc[c[(c[d>>2]|0)+8>>2]&1023](d,e);d=c[e>>2]|0;if(!d){i=f;return}a=c[(c[d>>2]|0)+-12>>2]|0;e=d+a|0;a=d+(a+4)|0;b=(c[a>>2]|0)+-1|0;c[a>>2]=b;if((e|0)==0|(b|0)!=0){i=f;return}oc[c[(c[e>>2]|0)+4>>2]&2047](e);i=f;return}function yk(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;f=i;i=i+16|0;e=f;d=o$(b,1488,3160,-1)|0;if(!d){FF(a,b);i=f;return}c[e>>2]=a;if((a|0)!=0?(a=a+((c[(c[a>>2]|0)+-12>>2]|0)+4)|0,b=(c[a>>2]|0)+1|0,c[a>>2]=b,(b|0)==0):0)Ha(79054,79014,48,79068);pc[c[(c[d>>2]|0)+12>>2]&1023](d,e);d=c[e>>2]|0;if(!d){i=f;return}a=c[(c[d>>2]|0)+-12>>2]|0;e=d+a|0;a=d+(a+4)|0;b=(c[a>>2]|0)+-1|0;c[a>>2]=b;if((e|0)==0|(b|0)!=0){i=f;return}oc[c[(c[e>>2]|0)+4>>2]&2047](e);i=f;return}function zk(a){a=a|0;a=a+-16|0;_d(a,18996);c[a+56>>2]=12804;if(!(c[a+60>>2]|0))return;else Ha(74472,79014,56,74486)}function Ak(a){a=a|0;a=a+-16|0;_d(a,18996);c[a+56>>2]=12804;if(!(c[a+60>>2]|0)){P_(a);return}else Ha(74472,79014,56,74486)}function Bk(a,b){a=a|0;b=b|0;xk(a+-16|0,b);return}function Ck(a,b){a=a|0;b=b|0;yk(a+-16|0,b);return}function Dk(a){a=a|0;var b=0;b=c[(c[a>>2]|0)+-12>>2]|0;_d(a+b|0,18996);c[a+(b+56)>>2]=12804;if(!(c[a+(b+60)>>2]|0))return;else Ha(74472,79014,56,74486)}function Ek(a){a=a|0;var b=0,d=0;d=c[(c[a>>2]|0)+-12>>2]|0;b=a+d|0;_d(b,18996);c[a+(d+56)>>2]=12804;if(!(c[a+(d+60)>>2]|0)){P_(b);return}else Ha(74472,79014,56,74486)}function Fk(a){a=a|0;P_(a);return}function Gk(b,d){b=b|0;d=d|0;var e=0,f=0;e=O_(64)|0;c[e+4>>2]=0;c[e+8>>2]=0;c[e+12>>2]=0;f=e+20|0;c[f>>2]=0;c[f+4>>2]=0;c[f+8>>2]=0;c[f+12>>2]=0;c[f+16>>2]=0;c[f+20>>2]=0;a[f+24>>0]=0;c[e+48>>2]=d;c[e>>2]=19032;c[e+56>>2]=19128;c[e+16>>2]=19100;c[e+52>>2]=98;c[e+60>>2]=2;f=c[(c[e>>2]|0)+-12>>2]|0;b=e+f|0;f=e+(f+4)|0;d=(c[f>>2]|0)+-1|0;c[f>>2]=d;if((b|0)==0|(d|0)!=0)return e|0;oc[c[(c[b>>2]|0)+4>>2]&2047](b);return e|0}function Hk(a){a=a|0;_d(a,19144);c[a+56>>2]=12804;if(!(c[a+60>>2]|0))return;else Ha(74472,79014,56,74486)}function Ik(a){a=a|0;Hk(a);P_(a);return}function Jk(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;f=i;i=i+16|0;e=f;d=o$(b,1488,3216,-1)|0;if(!d){DF(a,b);i=f;return}c[e>>2]=a;if((a|0)!=0?(a=a+((c[(c[a>>2]|0)+-12>>2]|0)+4)|0,b=(c[a>>2]|0)+1|0,c[a>>2]=b,(b|0)==0):0)Ha(79054,79014,48,79068);pc[c[(c[d>>2]|0)+8>>2]&1023](d,e);d=c[e>>2]|0;if(!d){i=f;return}a=c[(c[d>>2]|0)+-12>>2]|0;e=d+a|0;a=d+(a+4)|0;b=(c[a>>2]|0)+-1|0;c[a>>2]=b;if((e|0)==0|(b|0)!=0){i=f;return}oc[c[(c[e>>2]|0)+4>>2]&2047](e);i=f;return}function Kk(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;f=i;i=i+16|0;e=f;d=o$(b,1488,3216,-1)|0;if(!d){FF(a,b);i=f;return}c[e>>2]=a;if((a|0)!=0?(a=a+((c[(c[a>>2]|0)+-12>>2]|0)+4)|0,b=(c[a>>2]|0)+1|0,c[a>>2]=b,(b|0)==0):0)Ha(79054,79014,48,79068);pc[c[(c[d>>2]|0)+12>>2]&1023](d,e);d=c[e>>2]|0;if(!d){i=f;return}a=c[(c[d>>2]|0)+-12>>2]|0;e=d+a|0;a=d+(a+4)|0;b=(c[a>>2]|0)+-1|0;c[a>>2]=b;if((e|0)==0|(b|0)!=0){i=f;return}oc[c[(c[e>>2]|0)+4>>2]&2047](e);i=f;return}function Lk(a){a=a|0;a=a+-16|0;_d(a,19144);c[a+56>>2]=12804;if(!(c[a+60>>2]|0))return;else Ha(74472,79014,56,74486)}function Mk(a){a=a|0;a=a+-16|0;_d(a,19144);c[a+56>>2]=12804;if(!(c[a+60>>2]|0)){P_(a);return}else Ha(74472,79014,56,74486)}function Nk(a,b){a=a|0;b=b|0;Jk(a+-16|0,b);return}function Ok(a,b){a=a|0;b=b|0;Kk(a+-16|0,b);return}function Pk(a){a=a|0;var b=0;b=c[(c[a>>2]|0)+-12>>2]|0;_d(a+b|0,19144);c[a+(b+56)>>2]=12804;if(!(c[a+(b+60)>>2]|0))return;else Ha(74472,79014,56,74486)}function Qk(a){a=a|0;var b=0,d=0;d=c[(c[a>>2]|0)+-12>>2]|0;b=a+d|0;_d(b,19144);c[a+(d+56)>>2]=12804;if(!(c[a+(d+60)>>2]|0)){P_(b);return}else Ha(74472,79014,56,74486)}function Rk(a){a=a|0;P_(a);return}function Sk(b,d){b=b|0;d=d|0;var e=0,f=0;e=O_(64)|0;c[e+4>>2]=0;c[e+8>>2]=0;c[e+12>>2]=0;f=e+20|0;c[f>>2]=0;c[f+4>>2]=0;c[f+8>>2]=0;c[f+12>>2]=0;c[f+16>>2]=0;c[f+20>>2]=0;a[f+24>>0]=0;c[e+48>>2]=d;c[e>>2]=19180;c[e+56>>2]=19276;c[e+16>>2]=19248;c[e+52>>2]=97;c[e+60>>2]=2;f=c[(c[e>>2]|0)+-12>>2]|0;b=e+f|0;f=e+(f+4)|0;d=(c[f>>2]|0)+-1|0;c[f>>2]=d;if((b|0)==0|(d|0)!=0)return e|0;oc[c[(c[b>>2]|0)+4>>2]&2047](b);return e|0}function Tk(a){a=a|0;_d(a,19292);c[a+56>>2]=12804;if(!(c[a+60>>2]|0))return;else Ha(74472,79014,56,74486)}function Uk(a){a=a|0;Tk(a);P_(a);return}function Vk(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;f=i;i=i+16|0;e=f;d=o$(b,1488,3272,-1)|0;if(!d){DF(a,b);i=f;return}c[e>>2]=a;if((a|0)!=0?(a=a+((c[(c[a>>2]|0)+-12>>2]|0)+4)|0,b=(c[a>>2]|0)+1|0,c[a>>2]=b,(b|0)==0):0)Ha(79054,79014,48,79068);pc[c[(c[d>>2]|0)+8>>2]&1023](d,e);d=c[e>>2]|0;if(!d){i=f;return}a=c[(c[d>>2]|0)+-12>>2]|0;e=d+a|0;a=d+(a+4)|0;b=(c[a>>2]|0)+-1|0;c[a>>2]=b;if((e|0)==0|(b|0)!=0){i=f;return}oc[c[(c[e>>2]|0)+4>>2]&2047](e);i=f;return}function Wk(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;f=i;i=i+16|0;e=f;d=o$(b,1488,3272,-1)|0;if(!d){FF(a,b);i=f;return}c[e>>2]=a;if((a|0)!=0?(a=a+((c[(c[a>>2]|0)+-12>>2]|0)+4)|0,b=(c[a>>2]|0)+1|0,c[a>>2]=b,(b|0)==0):0)Ha(79054,79014,48,79068);pc[c[(c[d>>2]|0)+12>>2]&1023](d,e);d=c[e>>2]|0;if(!d){i=f;return}a=c[(c[d>>2]|0)+-12>>2]|0;e=d+a|0;a=d+(a+4)|0;b=(c[a>>2]|0)+-1|0;c[a>>2]=b;if((e|0)==0|(b|0)!=0){i=f;return}oc[c[(c[e>>2]|0)+4>>2]&2047](e);i=f;return}function Xk(a){a=a|0;a=a+-16|0;_d(a,19292);c[a+56>>2]=12804;if(!(c[a+60>>2]|0))return;else Ha(74472,79014,56,74486)}function Yk(a){a=a|0;a=a+-16|0;_d(a,19292);c[a+56>>2]=12804;if(!(c[a+60>>2]|0)){P_(a);return}else Ha(74472,79014,56,74486)}function Zk(a,b){a=a|0;b=b|0;Vk(a+-16|0,b);return}function _k(a,b){a=a|0;b=b|0;Wk(a+-16|0,b);return}function $k(a){a=a|0;var b=0;b=c[(c[a>>2]|0)+-12>>2]|0;_d(a+b|0,19292);c[a+(b+56)>>2]=12804;if(!(c[a+(b+60)>>2]|0))return;else Ha(74472,79014,56,74486)}function al(a){a=a|0;var b=0,d=0;d=c[(c[a>>2]|0)+-12>>2]|0;b=a+d|0;_d(b,19292);c[a+(d+56)>>2]=12804;if(!(c[a+(d+60)>>2]|0)){P_(b);return}else Ha(74472,79014,56,74486)}function bl(a){a=a|0;P_(a);return}function cl(b,d){b=b|0;d=d|0;var e=0,f=0;e=O_(64)|0;c[e+4>>2]=0;c[e+8>>2]=0;c[e+12>>2]=0;f=e+20|0;c[f>>2]=0;c[f+4>>2]=0;c[f+8>>2]=0;c[f+12>>2]=0;c[f+16>>2]=0;c[f+20>>2]=0;a[f+24>>0]=0;c[e+48>>2]=d;c[e>>2]=19328;c[e+56>>2]=19424;c[e+16>>2]=19396;c[e+52>>2]=96;c[e+60>>2]=2;f=c[(c[e>>2]|0)+-12>>2]|0;b=e+f|0;f=e+(f+4)|0;d=(c[f>>2]|0)+-1|0;c[f>>2]=d;if((b|0)==0|(d|0)!=0)return e|0;oc[c[(c[b>>2]|0)+4>>2]&2047](b);return e|0}function dl(a){a=a|0;_d(a,19440);c[a+56>>2]=12804;if(!(c[a+60>>2]|0))return;else Ha(74472,79014,56,74486)}function el(a){a=a|0;dl(a);P_(a);return}function fl(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;f=i;i=i+16|0;e=f;d=o$(b,1488,3328,-1)|0;if(!d){DF(a,b);i=f;return}c[e>>2]=a;if((a|0)!=0?(a=a+((c[(c[a>>2]|0)+-12>>2]|0)+4)|0,b=(c[a>>2]|0)+1|0,c[a>>2]=b,(b|0)==0):0)Ha(79054,79014,48,79068);pc[c[(c[d>>2]|0)+8>>2]&1023](d,e);d=c[e>>2]|0;if(!d){i=f;return}a=c[(c[d>>2]|0)+-12>>2]|0;e=d+a|0;a=d+(a+4)|0;b=(c[a>>2]|0)+-1|0;c[a>>2]=b;if((e|0)==0|(b|0)!=0){i=f;return}oc[c[(c[e>>2]|0)+4>>2]&2047](e);i=f;return}function gl(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;f=i;i=i+16|0;e=f;d=o$(b,1488,3328,-1)|0;if(!d){FF(a,b);i=f;return}c[e>>2]=a;if((a|0)!=0?(a=a+((c[(c[a>>2]|0)+-12>>2]|0)+4)|0,b=(c[a>>2]|0)+1|0,c[a>>2]=b,(b|0)==0):0)Ha(79054,79014,48,79068);pc[c[(c[d>>2]|0)+12>>2]&1023](d,e);d=c[e>>2]|0;if(!d){i=f;return}a=c[(c[d>>2]|0)+-12>>2]|0;e=d+a|0;a=d+(a+4)|0;b=(c[a>>2]|0)+-1|0;c[a>>2]=b;if((e|0)==0|(b|0)!=0){i=f;return}oc[c[(c[e>>2]|0)+4>>2]&2047](e);i=f;return}function hl(a){a=a|0;a=a+-16|0;_d(a,19440);c[a+56>>2]=12804;if(!(c[a+60>>2]|0))return;else Ha(74472,79014,56,74486)}function il(a){a=a|0;a=a+-16|0;_d(a,19440);c[a+56>>2]=12804;if(!(c[a+60>>2]|0)){P_(a);return}else Ha(74472,79014,56,74486)}function jl(a,b){a=a|0;b=b|0;fl(a+-16|0,b);return}function kl(a,b){a=a|0;b=b|0;gl(a+-16|0,b);return}function ll(a){a=a|0;var b=0;b=c[(c[a>>2]|0)+-12>>2]|0;_d(a+b|0,19440);c[a+(b+56)>>2]=12804;if(!(c[a+(b+60)>>2]|0))return;else Ha(74472,79014,56,74486)}function ml(a){a=a|0;var b=0,d=0;d=c[(c[a>>2]|0)+-12>>2]|0;b=a+d|0;_d(b,19440);c[a+(d+56)>>2]=12804;if(!(c[a+(d+60)>>2]|0)){P_(b);return}else Ha(74472,79014,56,74486)}function nl(a){a=a|0;P_(a);return}function ol(b,d){b=b|0;d=d|0;var e=0,f=0;e=O_(64)|0;c[e+4>>2]=0;c[e+8>>2]=0;c[e+12>>2]=0;f=e+20|0;c[f>>2]=0;c[f+4>>2]=0;c[f+8>>2]=0;c[f+12>>2]=0;c[f+16>>2]=0;c[f+20>>2]=0;a[f+24>>0]=0;c[e+48>>2]=d;c[e>>2]=19476;c[e+56>>2]=19572;c[e+16>>2]=19544;c[e+52>>2]=95;c[e+60>>2]=2;f=c[(c[e>>2]|0)+-12>>2]|0;b=e+f|0;f=e+(f+4)|0;d=(c[f>>2]|0)+-1|0;c[f>>2]=d;if((b|0)==0|(d|0)!=0)return e|0;oc[c[(c[b>>2]|0)+4>>2]&2047](b);return e|0}function pl(a){a=a|0;_d(a,19588);c[a+56>>2]=12804;if(!(c[a+60>>2]|0))return;else Ha(74472,79014,56,74486)}function ql(a){a=a|0;pl(a);P_(a);return}function rl(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;f=i;i=i+16|0;e=f;d=o$(b,1488,3384,-1)|0;if(!d){DF(a,b);i=f;return}c[e>>2]=a;if((a|0)!=0?(a=a+((c[(c[a>>2]|0)+-12>>2]|0)+4)|0,b=(c[a>>2]|0)+1|0,c[a>>2]=b,(b|0)==0):0)Ha(79054,79014,48,79068);pc[c[(c[d>>2]|0)+8>>2]&1023](d,e);d=c[e>>2]|0;if(!d){i=f;return}a=c[(c[d>>2]|0)+-12>>2]|0;e=d+a|0;a=d+(a+4)|0;b=(c[a>>2]|0)+-1|0;c[a>>2]=b;if((e|0)==0|(b|0)!=0){i=f;return}oc[c[(c[e>>2]|0)+4>>2]&2047](e);i=f;return}function sl(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;f=i;i=i+16|0;e=f;d=o$(b,1488,3384,-1)|0;if(!d){FF(a,b);i=f;return}c[e>>2]=a;if((a|0)!=0?(a=a+((c[(c[a>>2]|0)+-12>>2]|0)+4)|0,b=(c[a>>2]|0)+1|0,c[a>>2]=b,(b|0)==0):0)Ha(79054,79014,48,79068);pc[c[(c[d>>2]|0)+12>>2]&1023](d,e);d=c[e>>2]|0;if(!d){i=f;return}a=c[(c[d>>2]|0)+-12>>2]|0;e=d+a|0;a=d+(a+4)|0;b=(c[a>>2]|0)+-1|0;c[a>>2]=b;if((e|0)==0|(b|0)!=0){i=f;return}oc[c[(c[e>>2]|0)+4>>2]&2047](e);i=f;return}function tl(a){a=a|0;a=a+-16|0;_d(a,19588);c[a+56>>2]=12804;if(!(c[a+60>>2]|0))return;else Ha(74472,79014,56,74486)}function ul(a){a=a|0;a=a+-16|0;_d(a,19588);c[a+56>>2]=12804;if(!(c[a+60>>2]|0)){P_(a);return}else Ha(74472,79014,56,74486)}function vl(a,b){a=a|0;b=b|0;rl(a+-16|0,b);return}function wl(a,b){a=a|0;b=b|0;sl(a+-16|0,b);return}function xl(a){a=a|0;var b=0;b=c[(c[a>>2]|0)+-12>>2]|0;_d(a+b|0,19588);c[a+(b+56)>>2]=12804;if(!(c[a+(b+60)>>2]|0))return;else Ha(74472,79014,56,74486)}function yl(a){a=a|0;var b=0,d=0;d=c[(c[a>>2]|0)+-12>>2]|0;b=a+d|0;_d(b,19588);c[a+(d+56)>>2]=12804;if(!(c[a+(d+60)>>2]|0)){P_(b);return}else Ha(74472,79014,56,74486)}function zl(a){a=a|0;P_(a);return}function Al(b,d){b=b|0;d=d|0;var e=0,f=0;e=O_(64)|0;c[e+4>>2]=0;c[e+8>>2]=0;c[e+12>>2]=0;f=e+20|0;c[f>>2]=0;c[f+4>>2]=0;c[f+8>>2]=0;c[f+12>>2]=0;c[f+16>>2]=0;c[f+20>>2]=0;a[f+24>>0]=0;c[e+48>>2]=d;c[e>>2]=19624;c[e+56>>2]=19720;c[e+16>>2]=19692;c[e+52>>2]=94;c[e+60>>2]=2;f=c[(c[e>>2]|0)+-12>>2]|0;b=e+f|0;f=e+(f+4)|0;d=(c[f>>2]|0)+-1|0;c[f>>2]=d;if((b|0)==0|(d|0)!=0)return e|0;oc[c[(c[b>>2]|0)+4>>2]&2047](b);return e|0}function Bl(a){a=a|0;_d(a,19736);c[a+56>>2]=12804;if(!(c[a+60>>2]|0))return;else Ha(74472,79014,56,74486)}function Cl(a){a=a|0;Bl(a);P_(a);return}function Dl(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;f=i;i=i+16|0;e=f;d=o$(b,1488,3440,-1)|0;if(!d){DF(a,b);i=f;return}c[e>>2]=a;if((a|0)!=0?(a=a+((c[(c[a>>2]|0)+-12>>2]|0)+4)|0,b=(c[a>>2]|0)+1|0,c[a>>2]=b,(b|0)==0):0)Ha(79054,79014,48,79068);pc[c[(c[d>>2]|0)+8>>2]&1023](d,e);d=c[e>>2]|0;if(!d){i=f;return}a=c[(c[d>>2]|0)+-12>>2]|0;e=d+a|0;a=d+(a+4)|0;b=(c[a>>2]|0)+-1|0;c[a>>2]=b;if((e|0)==0|(b|0)!=0){i=f;return}oc[c[(c[e>>2]|0)+4>>2]&2047](e);i=f;return}function El(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;f=i;i=i+16|0;e=f;d=o$(b,1488,3440,-1)|0;if(!d){FF(a,b);i=f;return}c[e>>2]=a;if((a|0)!=0?(a=a+((c[(c[a>>2]|0)+-12>>2]|0)+4)|0,b=(c[a>>2]|0)+1|0,c[a>>2]=b,(b|0)==0):0)Ha(79054,79014,48,79068);pc[c[(c[d>>2]|0)+12>>2]&1023](d,e);d=c[e>>2]|0;if(!d){i=f;return}a=c[(c[d>>2]|0)+-12>>2]|0;e=d+a|0;a=d+(a+4)|0;b=(c[a>>2]|0)+-1|0;c[a>>2]=b;if((e|0)==0|(b|0)!=0){i=f;return}oc[c[(c[e>>2]|0)+4>>2]&2047](e);i=f;return}function Fl(a){a=a|0;a=a+-16|0;_d(a,19736);c[a+56>>2]=12804;if(!(c[a+60>>2]|0))return;else Ha(74472,79014,56,74486)}function Gl(a){a=a|0;a=a+-16|0;_d(a,19736);c[a+56>>2]=12804;if(!(c[a+60>>2]|0)){P_(a);return}else Ha(74472,79014,56,74486)}function Hl(a,b){a=a|0;b=b|0;Dl(a+-16|0,b);return}function Il(a,b){a=a|0;b=b|0;El(a+-16|0,b);return}function Jl(a){a=a|0;var b=0;b=c[(c[a>>2]|0)+-12>>2]|0;_d(a+b|0,19736);c[a+(b+56)>>2]=12804;if(!(c[a+(b+60)>>2]|0))return;else Ha(74472,79014,56,74486)}function Kl(a){a=a|0;var b=0,d=0;d=c[(c[a>>2]|0)+-12>>2]|0;b=a+d|0;_d(b,19736);c[a+(d+56)>>2]=12804;if(!(c[a+(d+60)>>2]|0)){P_(b);return}else Ha(74472,79014,56,74486)}function Ll(a){a=a|0;P_(a);return}function Ml(b,d){b=b|0;d=d|0;var e=0,f=0;e=O_(64)|0;c[e+4>>2]=0;c[e+8>>2]=0;c[e+12>>2]=0;f=e+20|0;c[f>>2]=0;c[f+4>>2]=0;c[f+8>>2]=0;c[f+12>>2]=0;c[f+16>>2]=0;c[f+20>>2]=0;a[f+24>>0]=0;c[e+48>>2]=d;c[e>>2]=19772;c[e+56>>2]=19868;c[e+16>>2]=19840;c[e+52>>2]=93;c[e+60>>2]=2;f=c[(c[e>>2]|0)+-12>>2]|0;b=e+f|0;f=e+(f+4)|0;d=(c[f>>2]|0)+-1|0;c[f>>2]=d;if((b|0)==0|(d|0)!=0)return e|0;oc[c[(c[b>>2]|0)+4>>2]&2047](b);return e|0}function Nl(a){a=a|0;_d(a,19884);c[a+56>>2]=12804;if(!(c[a+60>>2]|0))return;else Ha(74472,79014,56,74486)}function Ol(a){a=a|0;Nl(a);P_(a);return}function Pl(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;f=i;i=i+16|0;e=f;d=o$(b,1488,3496,-1)|0;if(!d){DF(a,b);i=f;return}c[e>>2]=a;if((a|0)!=0?(a=a+((c[(c[a>>2]|0)+-12>>2]|0)+4)|0,b=(c[a>>2]|0)+1|0,c[a>>2]=b,(b|0)==0):0)Ha(79054,79014,48,79068);pc[c[(c[d>>2]|0)+8>>2]&1023](d,e);d=c[e>>2]|0;if(!d){i=f;return}a=c[(c[d>>2]|0)+-12>>2]|0;e=d+a|0;a=d+(a+4)|0;b=(c[a>>2]|0)+-1|0;c[a>>2]=b;if((e|0)==0|(b|0)!=0){i=f;return}oc[c[(c[e>>2]|0)+4>>2]&2047](e);i=f;return}function Ql(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;f=i;i=i+16|0;e=f;d=o$(b,1488,3496,-1)|0;if(!d){FF(a,b);i=f;return}c[e>>2]=a;if((a|0)!=0?(a=a+((c[(c[a>>2]|0)+-12>>2]|0)+4)|0,b=(c[a>>2]|0)+1|0,c[a>>2]=b,(b|0)==0):0)Ha(79054,79014,48,79068);pc[c[(c[d>>2]|0)+12>>2]&1023](d,e);d=c[e>>2]|0;if(!d){i=f;return}a=c[(c[d>>2]|0)+-12>>2]|0;e=d+a|0;a=d+(a+4)|0;b=(c[a>>2]|0)+-1|0;c[a>>2]=b;if((e|0)==0|(b|0)!=0){i=f;return}oc[c[(c[e>>2]|0)+4>>2]&2047](e);i=f;return}function Rl(a){a=a|0;a=a+-16|0;_d(a,19884);c[a+56>>2]=12804;if(!(c[a+60>>2]|0))return;else Ha(74472,79014,56,74486)}function Sl(a){a=a|0;a=a+-16|0;_d(a,19884);c[a+56>>2]=12804;if(!(c[a+60>>2]|0)){P_(a);return}else Ha(74472,79014,56,74486)}function Tl(a,b){a=a|0;b=b|0;Pl(a+-16|0,b);return}function Ul(a,b){a=a|0;b=b|0;Ql(a+-16|0,b);return}function Vl(a){a=a|0;var b=0;b=c[(c[a>>2]|0)+-12>>2]|0;_d(a+b|0,19884);c[a+(b+56)>>2]=12804;if(!(c[a+(b+60)>>2]|0))return;else Ha(74472,79014,56,74486)}function Wl(a){a=a|0;var b=0,d=0;d=c[(c[a>>2]|0)+-12>>2]|0;b=a+d|0;_d(b,19884);c[a+(d+56)>>2]=12804;if(!(c[a+(d+60)>>2]|0)){P_(b);return}else Ha(74472,79014,56,74486)}function Xl(a){a=a|0;P_(a);return}function Yl(b,d){b=b|0;d=d|0;var e=0,f=0;e=O_(64)|0;c[e+4>>2]=0;c[e+8>>2]=0;c[e+12>>2]=0;f=e+20|0;c[f>>2]=0;c[f+4>>2]=0;c[f+8>>2]=0;c[f+12>>2]=0;c[f+16>>2]=0;c[f+20>>2]=0;a[f+24>>0]=0;c[e+48>>2]=d;c[e>>2]=19920;c[e+56>>2]=20016;c[e+16>>2]=19988;c[e+52>>2]=92;c[e+60>>2]=2;f=c[(c[e>>2]|0)+-12>>2]|0;b=e+f|0;f=e+(f+4)|0;d=(c[f>>2]|0)+-1|0;c[f>>2]=d;if((b|0)==0|(d|0)!=0)return e|0;oc[c[(c[b>>2]|0)+4>>2]&2047](b);return e|0}function Zl(a){a=a|0;_d(a,20032);c[a+56>>2]=12804;if(!(c[a+60>>2]|0))return;else Ha(74472,79014,56,74486)}function _l(a){a=a|0;Zl(a);P_(a);return}function $l(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;f=i;i=i+16|0;e=f;d=o$(b,1488,3552,-1)|0;if(!d){DF(a,b);i=f;return}c[e>>2]=a;if((a|0)!=0?(a=a+((c[(c[a>>2]|0)+-12>>2]|0)+4)|0,b=(c[a>>2]|0)+1|0,c[a>>2]=b,(b|0)==0):0)Ha(79054,79014,48,79068);pc[c[(c[d>>2]|0)+8>>2]&1023](d,e);d=c[e>>2]|0;if(!d){i=f;return}a=c[(c[d>>2]|0)+-12>>2]|0;e=d+a|0;a=d+(a+4)|0;b=(c[a>>2]|0)+-1|0;c[a>>2]=b;if((e|0)==0|(b|0)!=0){i=f;return}oc[c[(c[e>>2]|0)+4>>2]&2047](e);i=f;return}function am(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;f=i;i=i+16|0;e=f;d=o$(b,1488,3552,-1)|0;if(!d){FF(a,b);i=f;return}c[e>>2]=a;if((a|0)!=0?(a=a+((c[(c[a>>2]|0)+-12>>2]|0)+4)|0,b=(c[a>>2]|0)+1|0,c[a>>2]=b,(b|0)==0):0)Ha(79054,79014,48,79068);pc[c[(c[d>>2]|0)+12>>2]&1023](d,e);d=c[e>>2]|0;if(!d){i=f;return}a=c[(c[d>>2]|0)+-12>>2]|0;e=d+a|0;a=d+(a+4)|0;b=(c[a>>2]|0)+-1|0;c[a>>2]=b;if((e|0)==0|(b|0)!=0){i=f;return}oc[c[(c[e>>2]|0)+4>>2]&2047](e);i=f;return}function bm(a){a=a|0;a=a+-16|0;_d(a,20032);c[a+56>>2]=12804;if(!(c[a+60>>2]|0))return;else Ha(74472,79014,56,74486)}function cm(a){a=a|0;a=a+-16|0;_d(a,20032);c[a+56>>2]=12804;if(!(c[a+60>>2]|0)){P_(a);return}else Ha(74472,79014,56,74486)}function dm(a,b){a=a|0;b=b|0;$l(a+-16|0,b);return}function em(a,b){a=a|0;b=b|0;am(a+-16|0,b);return}function fm(a){a=a|0;var b=0;b=c[(c[a>>2]|0)+-12>>2]|0;_d(a+b|0,20032);c[a+(b+56)>>2]=12804;if(!(c[a+(b+60)>>2]|0))return;else Ha(74472,79014,56,74486)}function gm(a){a=a|0;var b=0,d=0;d=c[(c[a>>2]|0)+-12>>2]|0;b=a+d|0;_d(b,20032);c[a+(d+56)>>2]=12804;if(!(c[a+(d+60)>>2]|0)){P_(b);return}else Ha(74472,79014,56,74486)}function hm(a){a=a|0;P_(a);return}function im(b,d){b=b|0;d=d|0;var e=0,f=0;e=O_(64)|0;c[e+4>>2]=0;c[e+8>>2]=0;c[e+12>>2]=0;f=e+20|0;c[f>>2]=0;c[f+4>>2]=0;c[f+8>>2]=0;c[f+12>>2]=0;c[f+16>>2]=0;c[f+20>>2]=0;a[f+24>>0]=0;c[e+48>>2]=d;c[e>>2]=20068;c[e+56>>2]=20164;c[e+16>>2]=20136;c[e+52>>2]=91;c[e+60>>2]=2;f=c[(c[e>>2]|0)+-12>>2]|0;b=e+f|0;f=e+(f+4)|0;d=(c[f>>2]|0)+-1|0;c[f>>2]=d;if((b|0)==0|(d|0)!=0)return e|0;oc[c[(c[b>>2]|0)+4>>2]&2047](b);return e|0}function jm(a){a=a|0;_d(a,20180);c[a+56>>2]=12804;if(!(c[a+60>>2]|0))return;else Ha(74472,79014,56,74486)}function km(a){a=a|0;jm(a);P_(a);return}function lm(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;f=i;i=i+16|0;e=f;d=o$(b,1488,3608,-1)|0;if(!d){DF(a,b);i=f;return}c[e>>2]=a;if((a|0)!=0?(a=a+((c[(c[a>>2]|0)+-12>>2]|0)+4)|0,b=(c[a>>2]|0)+1|0,c[a>>2]=b,(b|0)==0):0)Ha(79054,79014,48,79068);pc[c[(c[d>>2]|0)+8>>2]&1023](d,e);d=c[e>>2]|0;if(!d){i=f;return}a=c[(c[d>>2]|0)+-12>>2]|0;e=d+a|0;a=d+(a+4)|0;b=(c[a>>2]|0)+-1|0;c[a>>2]=b;if((e|0)==0|(b|0)!=0){i=f;return}oc[c[(c[e>>2]|0)+4>>2]&2047](e);i=f;return}function mm(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;f=i;i=i+16|0;e=f;d=o$(b,1488,3608,-1)|0;if(!d){FF(a,b);i=f;return}c[e>>2]=a;if((a|0)!=0?(a=a+((c[(c[a>>2]|0)+-12>>2]|0)+4)|0,b=(c[a>>2]|0)+1|0,c[a>>2]=b,(b|0)==0):0)Ha(79054,79014,48,79068);pc[c[(c[d>>2]|0)+12>>2]&1023](d,e);d=c[e>>2]|0;if(!d){i=f;return}a=c[(c[d>>2]|0)+-12>>2]|0;e=d+a|0;a=d+(a+4)|0;b=(c[a>>2]|0)+-1|0;c[a>>2]=b;if((e|0)==0|(b|0)!=0){i=f;return}oc[c[(c[e>>2]|0)+4>>2]&2047](e);i=f;return}function nm(a){a=a|0;a=a+-16|0;_d(a,20180);c[a+56>>2]=12804;if(!(c[a+60>>2]|0))return;else Ha(74472,79014,56,74486)}function om(a){a=a|0;a=a+-16|0;_d(a,20180);c[a+56>>2]=12804;if(!(c[a+60>>2]|0)){P_(a);return}else Ha(74472,79014,56,74486)}function pm(a,b){a=a|0;b=b|0;lm(a+-16|0,b);return}function qm(a,b){a=a|0;b=b|0;mm(a+-16|0,b);return}function rm(a){a=a|0;var b=0;b=c[(c[a>>2]|0)+-12>>2]|0;_d(a+b|0,20180);c[a+(b+56)>>2]=12804;if(!(c[a+(b+60)>>2]|0))return;else Ha(74472,79014,56,74486)}function sm(a){a=a|0;var b=0,d=0;d=c[(c[a>>2]|0)+-12>>2]|0;b=a+d|0;_d(b,20180);c[a+(d+56)>>2]=12804;if(!(c[a+(d+60)>>2]|0)){P_(b);return}else Ha(74472,79014,56,74486)}function tm(a){a=a|0;P_(a);return}function um(b,d){b=b|0;d=d|0;var e=0,f=0;e=O_(64)|0;c[e+4>>2]=0;c[e+8>>2]=0;c[e+12>>2]=0;f=e+20|0;c[f>>2]=0;c[f+4>>2]=0;c[f+8>>2]=0;c[f+12>>2]=0;c[f+16>>2]=0;c[f+20>>2]=0;a[f+24>>0]=0;c[e+48>>2]=d;c[e>>2]=20216;c[e+56>>2]=20312;c[e+16>>2]=20284;c[e+52>>2]=90;c[e+60>>2]=2;f=c[(c[e>>2]|0)+-12>>2]|0;b=e+f|0;f=e+(f+4)|0;d=(c[f>>2]|0)+-1|0;c[f>>2]=d;if((b|0)==0|(d|0)!=0)return e|0;oc[c[(c[b>>2]|0)+4>>2]&2047](b);return e|0}function vm(a){a=a|0;_d(a,20328);c[a+56>>2]=12804;if(!(c[a+60>>2]|0))return;else Ha(74472,79014,56,74486)}function wm(a){a=a|0;vm(a);P_(a);return}function xm(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;f=i;i=i+16|0;e=f;d=o$(b,1488,3664,-1)|0;if(!d){DF(a,b);i=f;return}c[e>>2]=a;if((a|0)!=0?(a=a+((c[(c[a>>2]|0)+-12>>2]|0)+4)|0,b=(c[a>>2]|0)+1|0,c[a>>2]=b,(b|0)==0):0)Ha(79054,79014,48,79068);pc[c[(c[d>>2]|0)+8>>2]&1023](d,e);d=c[e>>2]|0;if(!d){i=f;return}a=c[(c[d>>2]|0)+-12>>2]|0;e=d+a|0;a=d+(a+4)|0;b=(c[a>>2]|0)+-1|0;c[a>>2]=b;if((e|0)==0|(b|0)!=0){i=f;return}oc[c[(c[e>>2]|0)+4>>2]&2047](e);i=f;return}function ym(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;f=i;i=i+16|0;e=f;d=o$(b,1488,3664,-1)|0;if(!d){FF(a,b);i=f;return}c[e>>2]=a;if((a|0)!=0?(a=a+((c[(c[a>>2]|0)+-12>>2]|0)+4)|0,b=(c[a>>2]|0)+1|0,c[a>>2]=b,(b|0)==0):0)Ha(79054,79014,48,79068);pc[c[(c[d>>2]|0)+12>>2]&1023](d,e);d=c[e>>2]|0;if(!d){i=f;return}a=c[(c[d>>2]|0)+-12>>2]|0;e=d+a|0;a=d+(a+4)|0;b=(c[a>>2]|0)+-1|0;c[a>>2]=b;if((e|0)==0|(b|0)!=0){i=f;return}oc[c[(c[e>>2]|0)+4>>2]&2047](e);i=f;return}function zm(a){a=a|0;a=a+-16|0;_d(a,20328);c[a+56>>2]=12804;if(!(c[a+60>>2]|0))return;else Ha(74472,79014,56,74486)}function Am(a){a=a|0;a=a+-16|0;_d(a,20328);c[a+56>>2]=12804;if(!(c[a+60>>2]|0)){P_(a);return}else Ha(74472,79014,56,74486)}function Bm(a,b){a=a|0;b=b|0;xm(a+-16|0,b);return}function Cm(a,b){a=a|0;b=b|0;ym(a+-16|0,b);return}function Dm(a){a=a|0;var b=0;b=c[(c[a>>2]|0)+-12>>2]|0;_d(a+b|0,20328);c[a+(b+56)>>2]=12804;if(!(c[a+(b+60)>>2]|0))return;else Ha(74472,79014,56,74486)}function Em(a){a=a|0;var b=0,d=0;d=c[(c[a>>2]|0)+-12>>2]|0;b=a+d|0;_d(b,20328);c[a+(d+56)>>2]=12804;if(!(c[a+(d+60)>>2]|0)){P_(b);return}else Ha(74472,79014,56,74486)}function Fm(a){a=a|0;P_(a);return}function Gm(b,d){b=b|0;d=d|0;var e=0,f=0;e=O_(64)|0;c[e+4>>2]=0;c[e+8>>2]=0;c[e+12>>2]=0;f=e+20|0;c[f>>2]=0;c[f+4>>2]=0;c[f+8>>2]=0;c[f+12>>2]=0;c[f+16>>2]=0;c[f+20>>2]=0;a[f+24>>0]=0;c[e+48>>2]=d;c[e>>2]=20364;c[e+56>>2]=20460;c[e+16>>2]=20432;c[e+52>>2]=89;c[e+60>>2]=2;f=c[(c[e>>2]|0)+-12>>2]|0;b=e+f|0;f=e+(f+4)|0;d=(c[f>>2]|0)+-1|0;c[f>>2]=d;if((b|0)==0|(d|0)!=0)return e|0;oc[c[(c[b>>2]|0)+4>>2]&2047](b);return e|0}function Hm(a){a=a|0;_d(a,20476);c[a+56>>2]=12804;if(!(c[a+60>>2]|0))return;else Ha(74472,79014,56,74486)}function Im(a){a=a|0;Hm(a);P_(a);return}function Jm(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;f=i;i=i+16|0;e=f;d=o$(b,1488,3720,-1)|0;if(!d){DF(a,b);i=f;return}c[e>>2]=a;if((a|0)!=0?(a=a+((c[(c[a>>2]|0)+-12>>2]|0)+4)|0,b=(c[a>>2]|0)+1|0,c[a>>2]=b,(b|0)==0):0)Ha(79054,79014,48,79068);pc[c[(c[d>>2]|0)+8>>2]&1023](d,e);d=c[e>>2]|0;if(!d){i=f;return}a=c[(c[d>>2]|0)+-12>>2]|0;e=d+a|0;a=d+(a+4)|0;b=(c[a>>2]|0)+-1|0;c[a>>2]=b;if((e|0)==0|(b|0)!=0){i=f;return}oc[c[(c[e>>2]|0)+4>>2]&2047](e);i=f;return}function Km(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;f=i;i=i+16|0;e=f;d=o$(b,1488,3720,-1)|0;if(!d){FF(a,b);i=f;return}c[e>>2]=a;if((a|0)!=0?(a=a+((c[(c[a>>2]|0)+-12>>2]|0)+4)|0,b=(c[a>>2]|0)+1|0,c[a>>2]=b,(b|0)==0):0)Ha(79054,79014,48,79068);pc[c[(c[d>>2]|0)+12>>2]&1023](d,e);d=c[e>>2]|0;if(!d){i=f;return}a=c[(c[d>>2]|0)+-12>>2]|0;e=d+a|0;a=d+(a+4)|0;b=(c[a>>2]|0)+-1|0;c[a>>2]=b;if((e|0)==0|(b|0)!=0){i=f;return}oc[c[(c[e>>2]|0)+4>>2]&2047](e);i=f;return}function Lm(a){a=a|0;a=a+-16|0;_d(a,20476);c[a+56>>2]=12804;if(!(c[a+60>>2]|0))return;else Ha(74472,79014,56,74486)}function Mm(a){a=a|0;a=a+-16|0;_d(a,20476);c[a+56>>2]=12804;if(!(c[a+60>>2]|0)){P_(a);return}else Ha(74472,79014,56,74486)}function Nm(a,b){a=a|0;b=b|0;Jm(a+-16|0,b);return}function Om(a,b){a=a|0;b=b|0;Km(a+-16|0,b);return}function Pm(a){a=a|0;var b=0;b=c[(c[a>>2]|0)+-12>>2]|0;_d(a+b|0,20476);c[a+(b+56)>>2]=12804;if(!(c[a+(b+60)>>2]|0))return;else Ha(74472,79014,56,74486)}function Qm(a){a=a|0;var b=0,d=0;d=c[(c[a>>2]|0)+-12>>2]|0;b=a+d|0;_d(b,20476);c[a+(d+56)>>2]=12804;if(!(c[a+(d+60)>>2]|0)){P_(b);return}else Ha(74472,79014,56,74486)}function Rm(a){a=a|0;P_(a);return}function Sm(b,d){b=b|0;d=d|0;var e=0,f=0;e=O_(64)|0;c[e+4>>2]=0;c[e+8>>2]=0;c[e+12>>2]=0;f=e+20|0;c[f>>2]=0;c[f+4>>2]=0;c[f+8>>2]=0;c[f+12>>2]=0;c[f+16>>2]=0;c[f+20>>2]=0;a[f+24>>0]=0;c[e+48>>2]=d;c[e>>2]=20512;c[e+56>>2]=20608;c[e+16>>2]=20580;c[e+52>>2]=88;c[e+60>>2]=2;f=c[(c[e>>2]|0)+-12>>2]|0;b=e+f|0;f=e+(f+4)|0;d=(c[f>>2]|0)+-1|0;c[f>>2]=d;if((b|0)==0|(d|0)!=0)return e|0;oc[c[(c[b>>2]|0)+4>>2]&2047](b);return e|0}function Tm(a){a=a|0;_d(a,20624);c[a+56>>2]=12804;if(!(c[a+60>>2]|0))return;else Ha(74472,79014,56,74486)}function Um(a){a=a|0;Tm(a);P_(a);return}function Vm(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;f=i;i=i+16|0;e=f;d=o$(b,1488,3776,-1)|0;if(!d){DF(a,b);i=f;return}c[e>>2]=a;if((a|0)!=0?(a=a+((c[(c[a>>2]|0)+-12>>2]|0)+4)|0,b=(c[a>>2]|0)+1|0,c[a>>2]=b,(b|0)==0):0)Ha(79054,79014,48,79068);pc[c[(c[d>>2]|0)+8>>2]&1023](d,e);d=c[e>>2]|0;if(!d){i=f;return}a=c[(c[d>>2]|0)+-12>>2]|0;e=d+a|0;a=d+(a+4)|0;b=(c[a>>2]|0)+-1|0;c[a>>2]=b;if((e|0)==0|(b|0)!=0){i=f;return}oc[c[(c[e>>2]|0)+4>>2]&2047](e);i=f;return}function Wm(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;f=i;i=i+16|0;e=f;d=o$(b,1488,3776,-1)|0;if(!d){FF(a,b);i=f;return}c[e>>2]=a;if((a|0)!=0?(a=a+((c[(c[a>>2]|0)+-12>>2]|0)+4)|0,b=(c[a>>2]|0)+1|0,c[a>>2]=b,(b|0)==0):0)Ha(79054,79014,48,79068);pc[c[(c[d>>2]|0)+12>>2]&1023](d,e);d=c[e>>2]|0;if(!d){i=f;return}a=c[(c[d>>2]|0)+-12>>2]|0;e=d+a|0;a=d+(a+4)|0;b=(c[a>>2]|0)+-1|0;c[a>>2]=b;if((e|0)==0|(b|0)!=0){i=f;return}oc[c[(c[e>>2]|0)+4>>2]&2047](e);i=f;return}function Xm(a){a=a|0;a=a+-16|0;_d(a,20624);c[a+56>>2]=12804;if(!(c[a+60>>2]|0))return;else Ha(74472,79014,56,74486)}function Ym(a){a=a|0;a=a+-16|0;_d(a,20624);c[a+56>>2]=12804;if(!(c[a+60>>2]|0)){P_(a);return}else Ha(74472,79014,56,74486)}function Zm(a,b){a=a|0;b=b|0;Vm(a+-16|0,b);return}function _m(a,b){a=a|0;b=b|0;Wm(a+-16|0,b);return}function $m(a){a=a|0;var b=0;b=c[(c[a>>2]|0)+-12>>2]|0;_d(a+b|0,20624);c[a+(b+56)>>2]=12804;if(!(c[a+(b+60)>>2]|0))return;else Ha(74472,79014,56,74486)} +function kB(a){a=a|0;a=a+-16|0;_d(a,30096);c[a+56>>2]=12804;if(!(c[a+60>>2]|0)){P_(a);return}else Ha(74472,79014,56,74486)}function lB(a,b){a=a|0;b=b|0;hB(a+-16|0,b);return}function mB(a,b){a=a|0;b=b|0;iB(a+-16|0,b);return}function nB(a){a=a|0;var b=0;b=c[(c[a>>2]|0)+-12>>2]|0;_d(a+b|0,30096);c[a+(b+56)>>2]=12804;if(!(c[a+(b+60)>>2]|0))return;else Ha(74472,79014,56,74486)}function oB(a){a=a|0;var b=0,d=0;d=c[(c[a>>2]|0)+-12>>2]|0;b=a+d|0;_d(b,30096);c[a+(d+56)>>2]=12804;if(!(c[a+(d+60)>>2]|0)){P_(b);return}else Ha(74472,79014,56,74486)}function pB(a){a=a|0;P_(a);return}function qB(b,d){b=b|0;d=d|0;var e=0,f=0;e=O_(64)|0;c[e+4>>2]=0;c[e+8>>2]=0;c[e+12>>2]=0;f=e+20|0;c[f>>2]=0;c[f+4>>2]=0;c[f+8>>2]=0;c[f+12>>2]=0;c[f+16>>2]=0;c[f+20>>2]=0;a[f+24>>0]=0;c[e+48>>2]=d;c[e>>2]=30132;c[e+56>>2]=30228;c[e+16>>2]=30200;c[e+52>>2]=23;c[e+60>>2]=2;f=c[(c[e>>2]|0)+-12>>2]|0;b=e+f|0;f=e+(f+4)|0;d=(c[f>>2]|0)+-1|0;c[f>>2]=d;if((b|0)==0|(d|0)!=0)return e|0;oc[c[(c[b>>2]|0)+4>>2]&2047](b);return e|0}function rB(a){a=a|0;_d(a,30244);c[a+56>>2]=12804;if(!(c[a+60>>2]|0))return;else Ha(74472,79014,56,74486)}function sB(a){a=a|0;rB(a);P_(a);return}function tB(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;f=i;i=i+16|0;e=f;d=o$(b,1488,7416,-1)|0;if(!d){DF(a,b);i=f;return}c[e>>2]=a;if((a|0)!=0?(a=a+((c[(c[a>>2]|0)+-12>>2]|0)+4)|0,b=(c[a>>2]|0)+1|0,c[a>>2]=b,(b|0)==0):0)Ha(79054,79014,48,79068);pc[c[(c[d>>2]|0)+8>>2]&1023](d,e);d=c[e>>2]|0;if(!d){i=f;return}a=c[(c[d>>2]|0)+-12>>2]|0;e=d+a|0;a=d+(a+4)|0;b=(c[a>>2]|0)+-1|0;c[a>>2]=b;if((e|0)==0|(b|0)!=0){i=f;return}oc[c[(c[e>>2]|0)+4>>2]&2047](e);i=f;return}function uB(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;f=i;i=i+16|0;e=f;d=o$(b,1488,7416,-1)|0;if(!d){FF(a,b);i=f;return}c[e>>2]=a;if((a|0)!=0?(a=a+((c[(c[a>>2]|0)+-12>>2]|0)+4)|0,b=(c[a>>2]|0)+1|0,c[a>>2]=b,(b|0)==0):0)Ha(79054,79014,48,79068);pc[c[(c[d>>2]|0)+12>>2]&1023](d,e);d=c[e>>2]|0;if(!d){i=f;return}a=c[(c[d>>2]|0)+-12>>2]|0;e=d+a|0;a=d+(a+4)|0;b=(c[a>>2]|0)+-1|0;c[a>>2]=b;if((e|0)==0|(b|0)!=0){i=f;return}oc[c[(c[e>>2]|0)+4>>2]&2047](e);i=f;return}function vB(a){a=a|0;a=a+-16|0;_d(a,30244);c[a+56>>2]=12804;if(!(c[a+60>>2]|0))return;else Ha(74472,79014,56,74486)}function wB(a){a=a|0;a=a+-16|0;_d(a,30244);c[a+56>>2]=12804;if(!(c[a+60>>2]|0)){P_(a);return}else Ha(74472,79014,56,74486)}function xB(a,b){a=a|0;b=b|0;tB(a+-16|0,b);return}function yB(a,b){a=a|0;b=b|0;uB(a+-16|0,b);return}function zB(a){a=a|0;var b=0;b=c[(c[a>>2]|0)+-12>>2]|0;_d(a+b|0,30244);c[a+(b+56)>>2]=12804;if(!(c[a+(b+60)>>2]|0))return;else Ha(74472,79014,56,74486)}function AB(a){a=a|0;var b=0,d=0;d=c[(c[a>>2]|0)+-12>>2]|0;b=a+d|0;_d(b,30244);c[a+(d+56)>>2]=12804;if(!(c[a+(d+60)>>2]|0)){P_(b);return}else Ha(74472,79014,56,74486)}function BB(a){a=a|0;P_(a);return}function CB(b,d){b=b|0;d=d|0;var e=0,f=0;e=O_(64)|0;c[e+4>>2]=0;c[e+8>>2]=0;c[e+12>>2]=0;f=e+20|0;c[f>>2]=0;c[f+4>>2]=0;c[f+8>>2]=0;c[f+12>>2]=0;c[f+16>>2]=0;c[f+20>>2]=0;a[f+24>>0]=0;c[e+48>>2]=d;c[e>>2]=30280;c[e+56>>2]=30376;c[e+16>>2]=30348;c[e+52>>2]=22;c[e+60>>2]=2;f=c[(c[e>>2]|0)+-12>>2]|0;b=e+f|0;f=e+(f+4)|0;d=(c[f>>2]|0)+-1|0;c[f>>2]=d;if((b|0)==0|(d|0)!=0)return e|0;oc[c[(c[b>>2]|0)+4>>2]&2047](b);return e|0}function DB(a){a=a|0;_d(a,30392);c[a+56>>2]=12804;if(!(c[a+60>>2]|0))return;else Ha(74472,79014,56,74486)}function EB(a){a=a|0;DB(a);P_(a);return}function FB(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;f=i;i=i+16|0;e=f;d=o$(b,1488,7472,-1)|0;if(!d){DF(a,b);i=f;return}c[e>>2]=a;if((a|0)!=0?(a=a+((c[(c[a>>2]|0)+-12>>2]|0)+4)|0,b=(c[a>>2]|0)+1|0,c[a>>2]=b,(b|0)==0):0)Ha(79054,79014,48,79068);pc[c[(c[d>>2]|0)+8>>2]&1023](d,e);d=c[e>>2]|0;if(!d){i=f;return}a=c[(c[d>>2]|0)+-12>>2]|0;e=d+a|0;a=d+(a+4)|0;b=(c[a>>2]|0)+-1|0;c[a>>2]=b;if((e|0)==0|(b|0)!=0){i=f;return}oc[c[(c[e>>2]|0)+4>>2]&2047](e);i=f;return}function GB(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;f=i;i=i+16|0;e=f;d=o$(b,1488,7472,-1)|0;if(!d){FF(a,b);i=f;return}c[e>>2]=a;if((a|0)!=0?(a=a+((c[(c[a>>2]|0)+-12>>2]|0)+4)|0,b=(c[a>>2]|0)+1|0,c[a>>2]=b,(b|0)==0):0)Ha(79054,79014,48,79068);pc[c[(c[d>>2]|0)+12>>2]&1023](d,e);d=c[e>>2]|0;if(!d){i=f;return}a=c[(c[d>>2]|0)+-12>>2]|0;e=d+a|0;a=d+(a+4)|0;b=(c[a>>2]|0)+-1|0;c[a>>2]=b;if((e|0)==0|(b|0)!=0){i=f;return}oc[c[(c[e>>2]|0)+4>>2]&2047](e);i=f;return}function HB(a){a=a|0;a=a+-16|0;_d(a,30392);c[a+56>>2]=12804;if(!(c[a+60>>2]|0))return;else Ha(74472,79014,56,74486)}function IB(a){a=a|0;a=a+-16|0;_d(a,30392);c[a+56>>2]=12804;if(!(c[a+60>>2]|0)){P_(a);return}else Ha(74472,79014,56,74486)}function JB(a,b){a=a|0;b=b|0;FB(a+-16|0,b);return}function KB(a,b){a=a|0;b=b|0;GB(a+-16|0,b);return}function LB(a){a=a|0;var b=0;b=c[(c[a>>2]|0)+-12>>2]|0;_d(a+b|0,30392);c[a+(b+56)>>2]=12804;if(!(c[a+(b+60)>>2]|0))return;else Ha(74472,79014,56,74486)}function MB(a){a=a|0;var b=0,d=0;d=c[(c[a>>2]|0)+-12>>2]|0;b=a+d|0;_d(b,30392);c[a+(d+56)>>2]=12804;if(!(c[a+(d+60)>>2]|0)){P_(b);return}else Ha(74472,79014,56,74486)}function NB(a){a=a|0;P_(a);return}function OB(b,d){b=b|0;d=d|0;var e=0,f=0;e=O_(64)|0;c[e+4>>2]=0;c[e+8>>2]=0;c[e+12>>2]=0;f=e+20|0;c[f>>2]=0;c[f+4>>2]=0;c[f+8>>2]=0;c[f+12>>2]=0;c[f+16>>2]=0;c[f+20>>2]=0;a[f+24>>0]=0;c[e+48>>2]=d;c[e>>2]=30428;c[e+56>>2]=30524;c[e+16>>2]=30496;c[e+52>>2]=21;c[e+60>>2]=2;f=c[(c[e>>2]|0)+-12>>2]|0;b=e+f|0;f=e+(f+4)|0;d=(c[f>>2]|0)+-1|0;c[f>>2]=d;if((b|0)==0|(d|0)!=0)return e|0;oc[c[(c[b>>2]|0)+4>>2]&2047](b);return e|0}function PB(a){a=a|0;_d(a,30540);c[a+56>>2]=12804;if(!(c[a+60>>2]|0))return;else Ha(74472,79014,56,74486)}function QB(a){a=a|0;PB(a);P_(a);return}function RB(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;f=i;i=i+16|0;e=f;d=o$(b,1488,7528,-1)|0;if(!d){DF(a,b);i=f;return}c[e>>2]=a;if((a|0)!=0?(a=a+((c[(c[a>>2]|0)+-12>>2]|0)+4)|0,b=(c[a>>2]|0)+1|0,c[a>>2]=b,(b|0)==0):0)Ha(79054,79014,48,79068);pc[c[(c[d>>2]|0)+8>>2]&1023](d,e);d=c[e>>2]|0;if(!d){i=f;return}a=c[(c[d>>2]|0)+-12>>2]|0;e=d+a|0;a=d+(a+4)|0;b=(c[a>>2]|0)+-1|0;c[a>>2]=b;if((e|0)==0|(b|0)!=0){i=f;return}oc[c[(c[e>>2]|0)+4>>2]&2047](e);i=f;return}function SB(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;f=i;i=i+16|0;e=f;d=o$(b,1488,7528,-1)|0;if(!d){FF(a,b);i=f;return}c[e>>2]=a;if((a|0)!=0?(a=a+((c[(c[a>>2]|0)+-12>>2]|0)+4)|0,b=(c[a>>2]|0)+1|0,c[a>>2]=b,(b|0)==0):0)Ha(79054,79014,48,79068);pc[c[(c[d>>2]|0)+12>>2]&1023](d,e);d=c[e>>2]|0;if(!d){i=f;return}a=c[(c[d>>2]|0)+-12>>2]|0;e=d+a|0;a=d+(a+4)|0;b=(c[a>>2]|0)+-1|0;c[a>>2]=b;if((e|0)==0|(b|0)!=0){i=f;return}oc[c[(c[e>>2]|0)+4>>2]&2047](e);i=f;return}function TB(a){a=a|0;a=a+-16|0;_d(a,30540);c[a+56>>2]=12804;if(!(c[a+60>>2]|0))return;else Ha(74472,79014,56,74486)}function UB(a){a=a|0;a=a+-16|0;_d(a,30540);c[a+56>>2]=12804;if(!(c[a+60>>2]|0)){P_(a);return}else Ha(74472,79014,56,74486)}function VB(a,b){a=a|0;b=b|0;RB(a+-16|0,b);return}function WB(a,b){a=a|0;b=b|0;SB(a+-16|0,b);return}function XB(a){a=a|0;var b=0;b=c[(c[a>>2]|0)+-12>>2]|0;_d(a+b|0,30540);c[a+(b+56)>>2]=12804;if(!(c[a+(b+60)>>2]|0))return;else Ha(74472,79014,56,74486)}function YB(a){a=a|0;var b=0,d=0;d=c[(c[a>>2]|0)+-12>>2]|0;b=a+d|0;_d(b,30540);c[a+(d+56)>>2]=12804;if(!(c[a+(d+60)>>2]|0)){P_(b);return}else Ha(74472,79014,56,74486)}function ZB(a){a=a|0;P_(a);return}function _B(b,d){b=b|0;d=d|0;var e=0,f=0;e=O_(64)|0;c[e+4>>2]=0;c[e+8>>2]=0;c[e+12>>2]=0;f=e+20|0;c[f>>2]=0;c[f+4>>2]=0;c[f+8>>2]=0;c[f+12>>2]=0;c[f+16>>2]=0;c[f+20>>2]=0;a[f+24>>0]=0;c[e+48>>2]=d;c[e>>2]=30576;c[e+56>>2]=30672;c[e+16>>2]=30644;c[e+52>>2]=20;c[e+60>>2]=2;f=c[(c[e>>2]|0)+-12>>2]|0;b=e+f|0;f=e+(f+4)|0;d=(c[f>>2]|0)+-1|0;c[f>>2]=d;if((b|0)==0|(d|0)!=0)return e|0;oc[c[(c[b>>2]|0)+4>>2]&2047](b);return e|0}function $B(a){a=a|0;_d(a,30688);c[a+56>>2]=12804;if(!(c[a+60>>2]|0))return;else Ha(74472,79014,56,74486)}function aC(a){a=a|0;$B(a);P_(a);return}function bC(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;f=i;i=i+16|0;e=f;d=o$(b,1488,7584,-1)|0;if(!d){DF(a,b);i=f;return}c[e>>2]=a;if((a|0)!=0?(a=a+((c[(c[a>>2]|0)+-12>>2]|0)+4)|0,b=(c[a>>2]|0)+1|0,c[a>>2]=b,(b|0)==0):0)Ha(79054,79014,48,79068);pc[c[(c[d>>2]|0)+8>>2]&1023](d,e);d=c[e>>2]|0;if(!d){i=f;return}a=c[(c[d>>2]|0)+-12>>2]|0;e=d+a|0;a=d+(a+4)|0;b=(c[a>>2]|0)+-1|0;c[a>>2]=b;if((e|0)==0|(b|0)!=0){i=f;return}oc[c[(c[e>>2]|0)+4>>2]&2047](e);i=f;return}function cC(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;f=i;i=i+16|0;e=f;d=o$(b,1488,7584,-1)|0;if(!d){FF(a,b);i=f;return}c[e>>2]=a;if((a|0)!=0?(a=a+((c[(c[a>>2]|0)+-12>>2]|0)+4)|0,b=(c[a>>2]|0)+1|0,c[a>>2]=b,(b|0)==0):0)Ha(79054,79014,48,79068);pc[c[(c[d>>2]|0)+12>>2]&1023](d,e);d=c[e>>2]|0;if(!d){i=f;return}a=c[(c[d>>2]|0)+-12>>2]|0;e=d+a|0;a=d+(a+4)|0;b=(c[a>>2]|0)+-1|0;c[a>>2]=b;if((e|0)==0|(b|0)!=0){i=f;return}oc[c[(c[e>>2]|0)+4>>2]&2047](e);i=f;return}function dC(a){a=a|0;a=a+-16|0;_d(a,30688);c[a+56>>2]=12804;if(!(c[a+60>>2]|0))return;else Ha(74472,79014,56,74486)}function eC(a){a=a|0;a=a+-16|0;_d(a,30688);c[a+56>>2]=12804;if(!(c[a+60>>2]|0)){P_(a);return}else Ha(74472,79014,56,74486)}function fC(a,b){a=a|0;b=b|0;bC(a+-16|0,b);return}function gC(a,b){a=a|0;b=b|0;cC(a+-16|0,b);return}function hC(a){a=a|0;var b=0;b=c[(c[a>>2]|0)+-12>>2]|0;_d(a+b|0,30688);c[a+(b+56)>>2]=12804;if(!(c[a+(b+60)>>2]|0))return;else Ha(74472,79014,56,74486)}function iC(a){a=a|0;var b=0,d=0;d=c[(c[a>>2]|0)+-12>>2]|0;b=a+d|0;_d(b,30688);c[a+(d+56)>>2]=12804;if(!(c[a+(d+60)>>2]|0)){P_(b);return}else Ha(74472,79014,56,74486)}function jC(a){a=a|0;P_(a);return}function kC(b,d){b=b|0;d=d|0;var e=0,f=0;e=O_(64)|0;c[e+4>>2]=0;c[e+8>>2]=0;c[e+12>>2]=0;f=e+20|0;c[f>>2]=0;c[f+4>>2]=0;c[f+8>>2]=0;c[f+12>>2]=0;c[f+16>>2]=0;c[f+20>>2]=0;a[f+24>>0]=0;c[e+48>>2]=d;c[e>>2]=30724;c[e+56>>2]=30820;c[e+16>>2]=30792;c[e+52>>2]=19;c[e+60>>2]=2;f=c[(c[e>>2]|0)+-12>>2]|0;b=e+f|0;f=e+(f+4)|0;d=(c[f>>2]|0)+-1|0;c[f>>2]=d;if((b|0)==0|(d|0)!=0)return e|0;oc[c[(c[b>>2]|0)+4>>2]&2047](b);return e|0}function lC(a){a=a|0;_d(a,30836);c[a+56>>2]=12804;if(!(c[a+60>>2]|0))return;else Ha(74472,79014,56,74486)}function mC(a){a=a|0;lC(a);P_(a);return}function nC(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;f=i;i=i+16|0;e=f;d=o$(b,1488,7640,-1)|0;if(!d){DF(a,b);i=f;return}c[e>>2]=a;if((a|0)!=0?(a=a+((c[(c[a>>2]|0)+-12>>2]|0)+4)|0,b=(c[a>>2]|0)+1|0,c[a>>2]=b,(b|0)==0):0)Ha(79054,79014,48,79068);pc[c[(c[d>>2]|0)+8>>2]&1023](d,e);d=c[e>>2]|0;if(!d){i=f;return}a=c[(c[d>>2]|0)+-12>>2]|0;e=d+a|0;a=d+(a+4)|0;b=(c[a>>2]|0)+-1|0;c[a>>2]=b;if((e|0)==0|(b|0)!=0){i=f;return}oc[c[(c[e>>2]|0)+4>>2]&2047](e);i=f;return}function oC(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;f=i;i=i+16|0;e=f;d=o$(b,1488,7640,-1)|0;if(!d){FF(a,b);i=f;return}c[e>>2]=a;if((a|0)!=0?(a=a+((c[(c[a>>2]|0)+-12>>2]|0)+4)|0,b=(c[a>>2]|0)+1|0,c[a>>2]=b,(b|0)==0):0)Ha(79054,79014,48,79068);pc[c[(c[d>>2]|0)+12>>2]&1023](d,e);d=c[e>>2]|0;if(!d){i=f;return}a=c[(c[d>>2]|0)+-12>>2]|0;e=d+a|0;a=d+(a+4)|0;b=(c[a>>2]|0)+-1|0;c[a>>2]=b;if((e|0)==0|(b|0)!=0){i=f;return}oc[c[(c[e>>2]|0)+4>>2]&2047](e);i=f;return}function pC(a){a=a|0;a=a+-16|0;_d(a,30836);c[a+56>>2]=12804;if(!(c[a+60>>2]|0))return;else Ha(74472,79014,56,74486)}function qC(a){a=a|0;a=a+-16|0;_d(a,30836);c[a+56>>2]=12804;if(!(c[a+60>>2]|0)){P_(a);return}else Ha(74472,79014,56,74486)}function rC(a,b){a=a|0;b=b|0;nC(a+-16|0,b);return}function sC(a,b){a=a|0;b=b|0;oC(a+-16|0,b);return}function tC(a){a=a|0;var b=0;b=c[(c[a>>2]|0)+-12>>2]|0;_d(a+b|0,30836);c[a+(b+56)>>2]=12804;if(!(c[a+(b+60)>>2]|0))return;else Ha(74472,79014,56,74486)}function uC(a){a=a|0;var b=0,d=0;d=c[(c[a>>2]|0)+-12>>2]|0;b=a+d|0;_d(b,30836);c[a+(d+56)>>2]=12804;if(!(c[a+(d+60)>>2]|0)){P_(b);return}else Ha(74472,79014,56,74486)}function vC(a){a=a|0;P_(a);return}function wC(b,d){b=b|0;d=d|0;var e=0,f=0;e=O_(64)|0;c[e+4>>2]=0;c[e+8>>2]=0;c[e+12>>2]=0;f=e+20|0;c[f>>2]=0;c[f+4>>2]=0;c[f+8>>2]=0;c[f+12>>2]=0;c[f+16>>2]=0;c[f+20>>2]=0;a[f+24>>0]=0;c[e+48>>2]=d;c[e>>2]=30872;c[e+56>>2]=30968;c[e+16>>2]=30940;c[e+52>>2]=18;c[e+60>>2]=2;f=c[(c[e>>2]|0)+-12>>2]|0;b=e+f|0;f=e+(f+4)|0;d=(c[f>>2]|0)+-1|0;c[f>>2]=d;if((b|0)==0|(d|0)!=0)return e|0;oc[c[(c[b>>2]|0)+4>>2]&2047](b);return e|0}function xC(a){a=a|0;_d(a,30984);c[a+56>>2]=12804;if(!(c[a+60>>2]|0))return;else Ha(74472,79014,56,74486)}function yC(a){a=a|0;xC(a);P_(a);return}function zC(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;f=i;i=i+16|0;e=f;d=o$(b,1488,7696,-1)|0;if(!d){DF(a,b);i=f;return}c[e>>2]=a;if((a|0)!=0?(a=a+((c[(c[a>>2]|0)+-12>>2]|0)+4)|0,b=(c[a>>2]|0)+1|0,c[a>>2]=b,(b|0)==0):0)Ha(79054,79014,48,79068);pc[c[(c[d>>2]|0)+8>>2]&1023](d,e);d=c[e>>2]|0;if(!d){i=f;return}a=c[(c[d>>2]|0)+-12>>2]|0;e=d+a|0;a=d+(a+4)|0;b=(c[a>>2]|0)+-1|0;c[a>>2]=b;if((e|0)==0|(b|0)!=0){i=f;return}oc[c[(c[e>>2]|0)+4>>2]&2047](e);i=f;return}function AC(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;f=i;i=i+16|0;e=f;d=o$(b,1488,7696,-1)|0;if(!d){FF(a,b);i=f;return}c[e>>2]=a;if((a|0)!=0?(a=a+((c[(c[a>>2]|0)+-12>>2]|0)+4)|0,b=(c[a>>2]|0)+1|0,c[a>>2]=b,(b|0)==0):0)Ha(79054,79014,48,79068);pc[c[(c[d>>2]|0)+12>>2]&1023](d,e);d=c[e>>2]|0;if(!d){i=f;return}a=c[(c[d>>2]|0)+-12>>2]|0;e=d+a|0;a=d+(a+4)|0;b=(c[a>>2]|0)+-1|0;c[a>>2]=b;if((e|0)==0|(b|0)!=0){i=f;return}oc[c[(c[e>>2]|0)+4>>2]&2047](e);i=f;return}function BC(a){a=a|0;a=a+-16|0;_d(a,30984);c[a+56>>2]=12804;if(!(c[a+60>>2]|0))return;else Ha(74472,79014,56,74486)}function CC(a){a=a|0;a=a+-16|0;_d(a,30984);c[a+56>>2]=12804;if(!(c[a+60>>2]|0)){P_(a);return}else Ha(74472,79014,56,74486)}function DC(a,b){a=a|0;b=b|0;zC(a+-16|0,b);return}function EC(a,b){a=a|0;b=b|0;AC(a+-16|0,b);return}function FC(a){a=a|0;var b=0;b=c[(c[a>>2]|0)+-12>>2]|0;_d(a+b|0,30984);c[a+(b+56)>>2]=12804;if(!(c[a+(b+60)>>2]|0))return;else Ha(74472,79014,56,74486)}function GC(a){a=a|0;var b=0,d=0;d=c[(c[a>>2]|0)+-12>>2]|0;b=a+d|0;_d(b,30984);c[a+(d+56)>>2]=12804;if(!(c[a+(d+60)>>2]|0)){P_(b);return}else Ha(74472,79014,56,74486)}function HC(a){a=a|0;P_(a);return}function IC(b,d){b=b|0;d=d|0;var e=0,f=0;e=O_(64)|0;c[e+4>>2]=0;c[e+8>>2]=0;c[e+12>>2]=0;f=e+20|0;c[f>>2]=0;c[f+4>>2]=0;c[f+8>>2]=0;c[f+12>>2]=0;c[f+16>>2]=0;c[f+20>>2]=0;a[f+24>>0]=0;c[e+48>>2]=d;c[e>>2]=31020;c[e+56>>2]=31116;c[e+16>>2]=31088;c[e+52>>2]=17;c[e+60>>2]=2;f=c[(c[e>>2]|0)+-12>>2]|0;b=e+f|0;f=e+(f+4)|0;d=(c[f>>2]|0)+-1|0;c[f>>2]=d;if((b|0)==0|(d|0)!=0)return e|0;oc[c[(c[b>>2]|0)+4>>2]&2047](b);return e|0}function JC(a){a=a|0;_d(a,31132);c[a+56>>2]=12804;if(!(c[a+60>>2]|0))return;else Ha(74472,79014,56,74486)}function KC(a){a=a|0;JC(a);P_(a);return}function LC(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;f=i;i=i+16|0;e=f;d=o$(b,1488,7752,-1)|0;if(!d){DF(a,b);i=f;return}c[e>>2]=a;if((a|0)!=0?(a=a+((c[(c[a>>2]|0)+-12>>2]|0)+4)|0,b=(c[a>>2]|0)+1|0,c[a>>2]=b,(b|0)==0):0)Ha(79054,79014,48,79068);pc[c[(c[d>>2]|0)+8>>2]&1023](d,e);d=c[e>>2]|0;if(!d){i=f;return}a=c[(c[d>>2]|0)+-12>>2]|0;e=d+a|0;a=d+(a+4)|0;b=(c[a>>2]|0)+-1|0;c[a>>2]=b;if((e|0)==0|(b|0)!=0){i=f;return}oc[c[(c[e>>2]|0)+4>>2]&2047](e);i=f;return}function MC(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;f=i;i=i+16|0;e=f;d=o$(b,1488,7752,-1)|0;if(!d){FF(a,b);i=f;return}c[e>>2]=a;if((a|0)!=0?(a=a+((c[(c[a>>2]|0)+-12>>2]|0)+4)|0,b=(c[a>>2]|0)+1|0,c[a>>2]=b,(b|0)==0):0)Ha(79054,79014,48,79068);pc[c[(c[d>>2]|0)+12>>2]&1023](d,e);d=c[e>>2]|0;if(!d){i=f;return}a=c[(c[d>>2]|0)+-12>>2]|0;e=d+a|0;a=d+(a+4)|0;b=(c[a>>2]|0)+-1|0;c[a>>2]=b;if((e|0)==0|(b|0)!=0){i=f;return}oc[c[(c[e>>2]|0)+4>>2]&2047](e);i=f;return}function NC(a){a=a|0;a=a+-16|0;_d(a,31132);c[a+56>>2]=12804;if(!(c[a+60>>2]|0))return;else Ha(74472,79014,56,74486)}function OC(a){a=a|0;a=a+-16|0;_d(a,31132);c[a+56>>2]=12804;if(!(c[a+60>>2]|0)){P_(a);return}else Ha(74472,79014,56,74486)}function PC(a,b){a=a|0;b=b|0;LC(a+-16|0,b);return}function QC(a,b){a=a|0;b=b|0;MC(a+-16|0,b);return}function RC(a){a=a|0;var b=0;b=c[(c[a>>2]|0)+-12>>2]|0;_d(a+b|0,31132);c[a+(b+56)>>2]=12804;if(!(c[a+(b+60)>>2]|0))return;else Ha(74472,79014,56,74486)}function SC(a){a=a|0;var b=0,d=0;d=c[(c[a>>2]|0)+-12>>2]|0;b=a+d|0;_d(b,31132);c[a+(d+56)>>2]=12804;if(!(c[a+(d+60)>>2]|0)){P_(b);return}else Ha(74472,79014,56,74486)}function TC(a){a=a|0;P_(a);return}function UC(b,d){b=b|0;d=d|0;var e=0,f=0;e=O_(64)|0;c[e+4>>2]=0;c[e+8>>2]=0;c[e+12>>2]=0;f=e+20|0;c[f>>2]=0;c[f+4>>2]=0;c[f+8>>2]=0;c[f+12>>2]=0;c[f+16>>2]=0;c[f+20>>2]=0;a[f+24>>0]=0;c[e+48>>2]=d;c[e>>2]=31168;c[e+56>>2]=31264;c[e+16>>2]=31236;c[e+52>>2]=16;c[e+60>>2]=2;f=c[(c[e>>2]|0)+-12>>2]|0;b=e+f|0;f=e+(f+4)|0;d=(c[f>>2]|0)+-1|0;c[f>>2]=d;if((b|0)==0|(d|0)!=0)return e|0;oc[c[(c[b>>2]|0)+4>>2]&2047](b);return e|0}function VC(a){a=a|0;_d(a,31280);c[a+56>>2]=12804;if(!(c[a+60>>2]|0))return;else Ha(74472,79014,56,74486)}function WC(a){a=a|0;VC(a);P_(a);return}function XC(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;f=i;i=i+16|0;e=f;d=o$(b,1488,7808,-1)|0;if(!d){DF(a,b);i=f;return}c[e>>2]=a;if((a|0)!=0?(a=a+((c[(c[a>>2]|0)+-12>>2]|0)+4)|0,b=(c[a>>2]|0)+1|0,c[a>>2]=b,(b|0)==0):0)Ha(79054,79014,48,79068);pc[c[(c[d>>2]|0)+8>>2]&1023](d,e);d=c[e>>2]|0;if(!d){i=f;return}a=c[(c[d>>2]|0)+-12>>2]|0;e=d+a|0;a=d+(a+4)|0;b=(c[a>>2]|0)+-1|0;c[a>>2]=b;if((e|0)==0|(b|0)!=0){i=f;return}oc[c[(c[e>>2]|0)+4>>2]&2047](e);i=f;return}function YC(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;f=i;i=i+16|0;e=f;d=o$(b,1488,7808,-1)|0;if(!d){FF(a,b);i=f;return}c[e>>2]=a;if((a|0)!=0?(a=a+((c[(c[a>>2]|0)+-12>>2]|0)+4)|0,b=(c[a>>2]|0)+1|0,c[a>>2]=b,(b|0)==0):0)Ha(79054,79014,48,79068);pc[c[(c[d>>2]|0)+12>>2]&1023](d,e);d=c[e>>2]|0;if(!d){i=f;return}a=c[(c[d>>2]|0)+-12>>2]|0;e=d+a|0;a=d+(a+4)|0;b=(c[a>>2]|0)+-1|0;c[a>>2]=b;if((e|0)==0|(b|0)!=0){i=f;return}oc[c[(c[e>>2]|0)+4>>2]&2047](e);i=f;return}function ZC(a){a=a|0;a=a+-16|0;_d(a,31280);c[a+56>>2]=12804;if(!(c[a+60>>2]|0))return;else Ha(74472,79014,56,74486)}function _C(a){a=a|0;a=a+-16|0;_d(a,31280);c[a+56>>2]=12804;if(!(c[a+60>>2]|0)){P_(a);return}else Ha(74472,79014,56,74486)}function $C(a,b){a=a|0;b=b|0;XC(a+-16|0,b);return}function aD(a,b){a=a|0;b=b|0;YC(a+-16|0,b);return}function bD(a){a=a|0;var b=0;b=c[(c[a>>2]|0)+-12>>2]|0;_d(a+b|0,31280);c[a+(b+56)>>2]=12804;if(!(c[a+(b+60)>>2]|0))return;else Ha(74472,79014,56,74486)}function cD(a){a=a|0;var b=0,d=0;d=c[(c[a>>2]|0)+-12>>2]|0;b=a+d|0;_d(b,31280);c[a+(d+56)>>2]=12804;if(!(c[a+(d+60)>>2]|0)){P_(b);return}else Ha(74472,79014,56,74486)}function dD(a){a=a|0;P_(a);return}function eD(b,d){b=b|0;d=d|0;var e=0,f=0;e=O_(64)|0;c[e+4>>2]=0;c[e+8>>2]=0;c[e+12>>2]=0;f=e+20|0;c[f>>2]=0;c[f+4>>2]=0;c[f+8>>2]=0;c[f+12>>2]=0;c[f+16>>2]=0;c[f+20>>2]=0;a[f+24>>0]=0;c[e+48>>2]=d;c[e>>2]=31316;c[e+56>>2]=31412;c[e+16>>2]=31384;c[e+52>>2]=15;c[e+60>>2]=2;f=c[(c[e>>2]|0)+-12>>2]|0;b=e+f|0;f=e+(f+4)|0;d=(c[f>>2]|0)+-1|0;c[f>>2]=d;if((b|0)==0|(d|0)!=0)return e|0;oc[c[(c[b>>2]|0)+4>>2]&2047](b);return e|0}function fD(a){a=a|0;_d(a,31428);c[a+56>>2]=12804;if(!(c[a+60>>2]|0))return;else Ha(74472,79014,56,74486)}function gD(a){a=a|0;fD(a);P_(a);return}function hD(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;f=i;i=i+16|0;e=f;d=o$(b,1488,7864,-1)|0;if(!d){DF(a,b);i=f;return}c[e>>2]=a;if((a|0)!=0?(a=a+((c[(c[a>>2]|0)+-12>>2]|0)+4)|0,b=(c[a>>2]|0)+1|0,c[a>>2]=b,(b|0)==0):0)Ha(79054,79014,48,79068);pc[c[(c[d>>2]|0)+8>>2]&1023](d,e);d=c[e>>2]|0;if(!d){i=f;return}a=c[(c[d>>2]|0)+-12>>2]|0;e=d+a|0;a=d+(a+4)|0;b=(c[a>>2]|0)+-1|0;c[a>>2]=b;if((e|0)==0|(b|0)!=0){i=f;return}oc[c[(c[e>>2]|0)+4>>2]&2047](e);i=f;return}function iD(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;f=i;i=i+16|0;e=f;d=o$(b,1488,7864,-1)|0;if(!d){FF(a,b);i=f;return}c[e>>2]=a;if((a|0)!=0?(a=a+((c[(c[a>>2]|0)+-12>>2]|0)+4)|0,b=(c[a>>2]|0)+1|0,c[a>>2]=b,(b|0)==0):0)Ha(79054,79014,48,79068);pc[c[(c[d>>2]|0)+12>>2]&1023](d,e);d=c[e>>2]|0;if(!d){i=f;return}a=c[(c[d>>2]|0)+-12>>2]|0;e=d+a|0;a=d+(a+4)|0;b=(c[a>>2]|0)+-1|0;c[a>>2]=b;if((e|0)==0|(b|0)!=0){i=f;return}oc[c[(c[e>>2]|0)+4>>2]&2047](e);i=f;return}function jD(a){a=a|0;a=a+-16|0;_d(a,31428);c[a+56>>2]=12804;if(!(c[a+60>>2]|0))return;else Ha(74472,79014,56,74486)}function kD(a){a=a|0;a=a+-16|0;_d(a,31428);c[a+56>>2]=12804;if(!(c[a+60>>2]|0)){P_(a);return}else Ha(74472,79014,56,74486)}function lD(a,b){a=a|0;b=b|0;hD(a+-16|0,b);return}function mD(a,b){a=a|0;b=b|0;iD(a+-16|0,b);return}function nD(a){a=a|0;var b=0;b=c[(c[a>>2]|0)+-12>>2]|0;_d(a+b|0,31428);c[a+(b+56)>>2]=12804;if(!(c[a+(b+60)>>2]|0))return;else Ha(74472,79014,56,74486)}function oD(a){a=a|0;var b=0,d=0;d=c[(c[a>>2]|0)+-12>>2]|0;b=a+d|0;_d(b,31428);c[a+(d+56)>>2]=12804;if(!(c[a+(d+60)>>2]|0)){P_(b);return}else Ha(74472,79014,56,74486)}function pD(a){a=a|0;P_(a);return}function qD(b,d){b=b|0;d=d|0;var e=0,f=0;e=O_(64)|0;c[e+4>>2]=0;c[e+8>>2]=0;c[e+12>>2]=0;f=e+20|0;c[f>>2]=0;c[f+4>>2]=0;c[f+8>>2]=0;c[f+12>>2]=0;c[f+16>>2]=0;c[f+20>>2]=0;a[f+24>>0]=0;c[e+48>>2]=d;c[e>>2]=31464;c[e+56>>2]=31560;c[e+16>>2]=31532;c[e+52>>2]=14;c[e+60>>2]=2;f=c[(c[e>>2]|0)+-12>>2]|0;b=e+f|0;f=e+(f+4)|0;d=(c[f>>2]|0)+-1|0;c[f>>2]=d;if((b|0)==0|(d|0)!=0)return e|0;oc[c[(c[b>>2]|0)+4>>2]&2047](b);return e|0}function rD(a){a=a|0;_d(a,31576);c[a+56>>2]=12804;if(!(c[a+60>>2]|0))return;else Ha(74472,79014,56,74486)}function sD(a){a=a|0;rD(a);P_(a);return}function tD(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;f=i;i=i+16|0;e=f;d=o$(b,1488,7920,-1)|0;if(!d){DF(a,b);i=f;return}c[e>>2]=a;if((a|0)!=0?(a=a+((c[(c[a>>2]|0)+-12>>2]|0)+4)|0,b=(c[a>>2]|0)+1|0,c[a>>2]=b,(b|0)==0):0)Ha(79054,79014,48,79068);pc[c[(c[d>>2]|0)+8>>2]&1023](d,e);d=c[e>>2]|0;if(!d){i=f;return}a=c[(c[d>>2]|0)+-12>>2]|0;e=d+a|0;a=d+(a+4)|0;b=(c[a>>2]|0)+-1|0;c[a>>2]=b;if((e|0)==0|(b|0)!=0){i=f;return}oc[c[(c[e>>2]|0)+4>>2]&2047](e);i=f;return}function uD(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;f=i;i=i+16|0;e=f;d=o$(b,1488,7920,-1)|0;if(!d){FF(a,b);i=f;return}c[e>>2]=a;if((a|0)!=0?(a=a+((c[(c[a>>2]|0)+-12>>2]|0)+4)|0,b=(c[a>>2]|0)+1|0,c[a>>2]=b,(b|0)==0):0)Ha(79054,79014,48,79068);pc[c[(c[d>>2]|0)+12>>2]&1023](d,e);d=c[e>>2]|0;if(!d){i=f;return}a=c[(c[d>>2]|0)+-12>>2]|0;e=d+a|0;a=d+(a+4)|0;b=(c[a>>2]|0)+-1|0;c[a>>2]=b;if((e|0)==0|(b|0)!=0){i=f;return}oc[c[(c[e>>2]|0)+4>>2]&2047](e);i=f;return}function vD(a){a=a|0;a=a+-16|0;_d(a,31576);c[a+56>>2]=12804;if(!(c[a+60>>2]|0))return;else Ha(74472,79014,56,74486)}function wD(a){a=a|0;a=a+-16|0;_d(a,31576);c[a+56>>2]=12804;if(!(c[a+60>>2]|0)){P_(a);return}else Ha(74472,79014,56,74486)}function xD(a,b){a=a|0;b=b|0;tD(a+-16|0,b);return}function yD(a,b){a=a|0;b=b|0;uD(a+-16|0,b);return}function zD(a){a=a|0;var b=0;b=c[(c[a>>2]|0)+-12>>2]|0;_d(a+b|0,31576);c[a+(b+56)>>2]=12804;if(!(c[a+(b+60)>>2]|0))return;else Ha(74472,79014,56,74486)}function AD(a){a=a|0;var b=0,d=0;d=c[(c[a>>2]|0)+-12>>2]|0;b=a+d|0;_d(b,31576);c[a+(d+56)>>2]=12804;if(!(c[a+(d+60)>>2]|0)){P_(b);return}else Ha(74472,79014,56,74486)}function BD(a){a=a|0;P_(a);return}function CD(b,d){b=b|0;d=d|0;var e=0,f=0;e=O_(64)|0;c[e+4>>2]=0;c[e+8>>2]=0;c[e+12>>2]=0;f=e+20|0;c[f>>2]=0;c[f+4>>2]=0;c[f+8>>2]=0;c[f+12>>2]=0;c[f+16>>2]=0;c[f+20>>2]=0;a[f+24>>0]=0;c[e+48>>2]=d;c[e>>2]=31612;c[e+56>>2]=31708;c[e+16>>2]=31680;c[e+52>>2]=13;c[e+60>>2]=2;f=c[(c[e>>2]|0)+-12>>2]|0;b=e+f|0;f=e+(f+4)|0;d=(c[f>>2]|0)+-1|0;c[f>>2]=d;if((b|0)==0|(d|0)!=0)return e|0;oc[c[(c[b>>2]|0)+4>>2]&2047](b);return e|0}function DD(a){a=a|0;_d(a,31724);c[a+56>>2]=12804;if(!(c[a+60>>2]|0))return;else Ha(74472,79014,56,74486)}function ED(a){a=a|0;DD(a);P_(a);return}function FD(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;f=i;i=i+16|0;e=f;d=o$(b,1488,7976,-1)|0;if(!d){DF(a,b);i=f;return}c[e>>2]=a;if((a|0)!=0?(a=a+((c[(c[a>>2]|0)+-12>>2]|0)+4)|0,b=(c[a>>2]|0)+1|0,c[a>>2]=b,(b|0)==0):0)Ha(79054,79014,48,79068);pc[c[(c[d>>2]|0)+8>>2]&1023](d,e);d=c[e>>2]|0;if(!d){i=f;return}a=c[(c[d>>2]|0)+-12>>2]|0;e=d+a|0;a=d+(a+4)|0;b=(c[a>>2]|0)+-1|0;c[a>>2]=b;if((e|0)==0|(b|0)!=0){i=f;return}oc[c[(c[e>>2]|0)+4>>2]&2047](e);i=f;return}function GD(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;f=i;i=i+16|0;e=f;d=o$(b,1488,7976,-1)|0;if(!d){FF(a,b);i=f;return}c[e>>2]=a;if((a|0)!=0?(a=a+((c[(c[a>>2]|0)+-12>>2]|0)+4)|0,b=(c[a>>2]|0)+1|0,c[a>>2]=b,(b|0)==0):0)Ha(79054,79014,48,79068);pc[c[(c[d>>2]|0)+12>>2]&1023](d,e);d=c[e>>2]|0;if(!d){i=f;return}a=c[(c[d>>2]|0)+-12>>2]|0;e=d+a|0;a=d+(a+4)|0;b=(c[a>>2]|0)+-1|0;c[a>>2]=b;if((e|0)==0|(b|0)!=0){i=f;return}oc[c[(c[e>>2]|0)+4>>2]&2047](e);i=f;return}function HD(a){a=a|0;a=a+-16|0;_d(a,31724);c[a+56>>2]=12804;if(!(c[a+60>>2]|0))return;else Ha(74472,79014,56,74486)}function ID(a){a=a|0;a=a+-16|0;_d(a,31724);c[a+56>>2]=12804;if(!(c[a+60>>2]|0)){P_(a);return}else Ha(74472,79014,56,74486)}function JD(a,b){a=a|0;b=b|0;FD(a+-16|0,b);return}function KD(a,b){a=a|0;b=b|0;GD(a+-16|0,b);return}function LD(a){a=a|0;var b=0;b=c[(c[a>>2]|0)+-12>>2]|0;_d(a+b|0,31724);c[a+(b+56)>>2]=12804;if(!(c[a+(b+60)>>2]|0))return;else Ha(74472,79014,56,74486)}function MD(a){a=a|0;var b=0,d=0;d=c[(c[a>>2]|0)+-12>>2]|0;b=a+d|0;_d(b,31724);c[a+(d+56)>>2]=12804;if(!(c[a+(d+60)>>2]|0)){P_(b);return}else Ha(74472,79014,56,74486)}function ND(a){a=a|0;P_(a);return}function OD(b,d){b=b|0;d=d|0;var e=0,f=0;e=O_(64)|0;c[e+4>>2]=0;c[e+8>>2]=0;c[e+12>>2]=0;f=e+20|0;c[f>>2]=0;c[f+4>>2]=0;c[f+8>>2]=0;c[f+12>>2]=0;c[f+16>>2]=0;c[f+20>>2]=0;a[f+24>>0]=0;c[e+48>>2]=d;c[e>>2]=31760;c[e+56>>2]=31856;c[e+16>>2]=31828;c[e+52>>2]=12;c[e+60>>2]=2;f=c[(c[e>>2]|0)+-12>>2]|0;b=e+f|0;f=e+(f+4)|0;d=(c[f>>2]|0)+-1|0;c[f>>2]=d;if((b|0)==0|(d|0)!=0)return e|0;oc[c[(c[b>>2]|0)+4>>2]&2047](b);return e|0}function PD(a){a=a|0;_d(a,31872);c[a+56>>2]=12804;if(!(c[a+60>>2]|0))return;else Ha(74472,79014,56,74486)}function QD(a){a=a|0;PD(a);P_(a);return}function RD(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;f=i;i=i+16|0;e=f;d=o$(b,1488,8032,-1)|0;if(!d){DF(a,b);i=f;return}c[e>>2]=a;if((a|0)!=0?(a=a+((c[(c[a>>2]|0)+-12>>2]|0)+4)|0,b=(c[a>>2]|0)+1|0,c[a>>2]=b,(b|0)==0):0)Ha(79054,79014,48,79068);pc[c[(c[d>>2]|0)+8>>2]&1023](d,e);d=c[e>>2]|0;if(!d){i=f;return}a=c[(c[d>>2]|0)+-12>>2]|0;e=d+a|0;a=d+(a+4)|0;b=(c[a>>2]|0)+-1|0;c[a>>2]=b;if((e|0)==0|(b|0)!=0){i=f;return}oc[c[(c[e>>2]|0)+4>>2]&2047](e);i=f;return}function SD(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;f=i;i=i+16|0;e=f;d=o$(b,1488,8032,-1)|0;if(!d){FF(a,b);i=f;return}c[e>>2]=a;if((a|0)!=0?(a=a+((c[(c[a>>2]|0)+-12>>2]|0)+4)|0,b=(c[a>>2]|0)+1|0,c[a>>2]=b,(b|0)==0):0)Ha(79054,79014,48,79068);pc[c[(c[d>>2]|0)+12>>2]&1023](d,e);d=c[e>>2]|0;if(!d){i=f;return}a=c[(c[d>>2]|0)+-12>>2]|0;e=d+a|0;a=d+(a+4)|0;b=(c[a>>2]|0)+-1|0;c[a>>2]=b;if((e|0)==0|(b|0)!=0){i=f;return}oc[c[(c[e>>2]|0)+4>>2]&2047](e);i=f;return}function TD(a){a=a|0;a=a+-16|0;_d(a,31872);c[a+56>>2]=12804;if(!(c[a+60>>2]|0))return;else Ha(74472,79014,56,74486)}function UD(a){a=a|0;a=a+-16|0;_d(a,31872);c[a+56>>2]=12804;if(!(c[a+60>>2]|0)){P_(a);return}else Ha(74472,79014,56,74486)}function VD(a,b){a=a|0;b=b|0;RD(a+-16|0,b);return}function WD(a,b){a=a|0;b=b|0;SD(a+-16|0,b);return}function XD(a){a=a|0;var b=0;b=c[(c[a>>2]|0)+-12>>2]|0;_d(a+b|0,31872);c[a+(b+56)>>2]=12804;if(!(c[a+(b+60)>>2]|0))return;else Ha(74472,79014,56,74486)}function YD(a){a=a|0;var b=0,d=0;d=c[(c[a>>2]|0)+-12>>2]|0;b=a+d|0;_d(b,31872);c[a+(d+56)>>2]=12804;if(!(c[a+(d+60)>>2]|0)){P_(b);return}else Ha(74472,79014,56,74486)}function ZD(a){a=a|0;P_(a);return}function _D(b,d){b=b|0;d=d|0;var e=0,f=0;e=O_(64)|0;c[e+4>>2]=0;c[e+8>>2]=0;c[e+12>>2]=0;f=e+20|0;c[f>>2]=0;c[f+4>>2]=0;c[f+8>>2]=0;c[f+12>>2]=0;c[f+16>>2]=0;c[f+20>>2]=0;a[f+24>>0]=0;c[e+48>>2]=d;c[e>>2]=31908;c[e+56>>2]=32004;c[e+16>>2]=31976;c[e+52>>2]=11;c[e+60>>2]=2;f=c[(c[e>>2]|0)+-12>>2]|0;b=e+f|0;f=e+(f+4)|0;d=(c[f>>2]|0)+-1|0;c[f>>2]=d;if((b|0)==0|(d|0)!=0)return e|0;oc[c[(c[b>>2]|0)+4>>2]&2047](b);return e|0}function $D(a){a=a|0;_d(a,32020);c[a+56>>2]=12804;if(!(c[a+60>>2]|0))return;else Ha(74472,79014,56,74486)}function aE(a){a=a|0;$D(a);P_(a);return}function bE(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;f=i;i=i+16|0;e=f;d=o$(b,1488,8088,-1)|0;if(!d){DF(a,b);i=f;return}c[e>>2]=a;if((a|0)!=0?(a=a+((c[(c[a>>2]|0)+-12>>2]|0)+4)|0,b=(c[a>>2]|0)+1|0,c[a>>2]=b,(b|0)==0):0)Ha(79054,79014,48,79068);pc[c[(c[d>>2]|0)+8>>2]&1023](d,e);d=c[e>>2]|0;if(!d){i=f;return}a=c[(c[d>>2]|0)+-12>>2]|0;e=d+a|0;a=d+(a+4)|0;b=(c[a>>2]|0)+-1|0;c[a>>2]=b;if((e|0)==0|(b|0)!=0){i=f;return}oc[c[(c[e>>2]|0)+4>>2]&2047](e);i=f;return}function cE(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;f=i;i=i+16|0;e=f;d=o$(b,1488,8088,-1)|0;if(!d){FF(a,b);i=f;return}c[e>>2]=a;if((a|0)!=0?(a=a+((c[(c[a>>2]|0)+-12>>2]|0)+4)|0,b=(c[a>>2]|0)+1|0,c[a>>2]=b,(b|0)==0):0)Ha(79054,79014,48,79068);pc[c[(c[d>>2]|0)+12>>2]&1023](d,e);d=c[e>>2]|0;if(!d){i=f;return}a=c[(c[d>>2]|0)+-12>>2]|0;e=d+a|0;a=d+(a+4)|0;b=(c[a>>2]|0)+-1|0;c[a>>2]=b;if((e|0)==0|(b|0)!=0){i=f;return}oc[c[(c[e>>2]|0)+4>>2]&2047](e);i=f;return}function dE(a){a=a|0;a=a+-16|0;_d(a,32020);c[a+56>>2]=12804;if(!(c[a+60>>2]|0))return;else Ha(74472,79014,56,74486)}function eE(a){a=a|0;a=a+-16|0;_d(a,32020);c[a+56>>2]=12804;if(!(c[a+60>>2]|0)){P_(a);return}else Ha(74472,79014,56,74486)}function fE(a,b){a=a|0;b=b|0;bE(a+-16|0,b);return}function gE(a,b){a=a|0;b=b|0;cE(a+-16|0,b);return}function hE(a){a=a|0;var b=0;b=c[(c[a>>2]|0)+-12>>2]|0;_d(a+b|0,32020);c[a+(b+56)>>2]=12804;if(!(c[a+(b+60)>>2]|0))return;else Ha(74472,79014,56,74486)}function iE(a){a=a|0;var b=0,d=0;d=c[(c[a>>2]|0)+-12>>2]|0;b=a+d|0;_d(b,32020);c[a+(d+56)>>2]=12804;if(!(c[a+(d+60)>>2]|0)){P_(b);return}else Ha(74472,79014,56,74486)}function jE(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0;f=b+4|0;b=c[f>>2]|0;if(!b){c[d>>2]=f;d=f;return d|0}j=a[e>>0]|0;i=(j&1)==0;j=i?(j&255)>>>1:c[e+4>>2]|0;i=i?e+1|0:c[e+8>>2]|0;while(1){e=b+16|0;f=a[e>>0]|0;g=(f&1)==0;f=g?(f&255)>>>1:c[b+20>>2]|0;e=g?e+1|0:c[b+24>>2]|0;g=f>>>0>>0;k=c1(i,e,g?f:j)|0;h=j>>>0>>0;if((((k|0)==0?(h?-2147483648:0):k)|0)<0){f=c[b>>2]|0;if(!f){f=b;e=5;break}else b=f}else{k=c1(e,i,h?j:f)|0;if((((k|0)==0?(g?-2147483648:0):k)|0)>=0){e=10;break}f=b+4|0;e=c[f>>2]|0;if(!e){e=9;break}else b=e}}if((e|0)==5){c[d>>2]=b;k=f;return k|0}else if((e|0)==9){c[d>>2]=b;k=f;return k|0}else if((e|0)==10){c[d>>2]=b;k=d;return k|0}return 0}function kE(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0;j=(d|0)==(b|0);a[d+12>>0]=j&1;if(j)return;while(1){h=c[d+8>>2]|0;g=h+12|0;if(a[g>>0]|0){d=37;break}j=h+8|0;f=d;d=c[j>>2]|0;e=c[d>>2]|0;if((e|0)==(h|0)){e=c[d+4>>2]|0;if(!e){e=f;i=j;g=j;f=d;b=d;d=7;break}e=e+12|0;if(a[e>>0]|0){e=f;i=j;g=j;f=d;b=d;d=7;break}a[g>>0]=1;a[d+12>>0]=(d|0)==(b|0)&1;a[e>>0]=1}else{if(!e){e=f;i=j;b=j;f=d;g=d;d=24;break}e=e+12|0;if(a[e>>0]|0){e=f;i=j;b=j;f=d;g=d;d=24;break}a[g>>0]=1;a[d+12>>0]=(d|0)==(b|0)&1;a[e>>0]=1}if((d|0)==(b|0)){d=37;break}}if((d|0)==7){if((c[h>>2]|0)==(e|0))d=h;else{j=h+4|0;d=c[j>>2]|0;e=c[d>>2]|0;c[j>>2]=e;if(!e)e=f;else{c[e+8>>2]=h;e=c[i>>2]|0}f=d+8|0;c[f>>2]=e;e=c[g>>2]|0;if((c[e>>2]|0)==(h|0))c[e>>2]=d;else c[e+4>>2]=d;c[d>>2]=h;c[i>>2]=d;b=c[f>>2]|0}a[d+12>>0]=1;a[b+12>>0]=0;f=c[b>>2]|0;g=f+4|0;d=c[g>>2]|0;c[b>>2]=d;if(d)c[d+8>>2]=b;d=b+8|0;c[f+8>>2]=c[d>>2];e=c[d>>2]|0;if((c[e>>2]|0)==(b|0))c[e>>2]=f;else c[e+4>>2]=f;c[g>>2]=b;c[d>>2]=f;return}else if((d|0)==24){if((c[h>>2]|0)==(e|0)){d=c[h>>2]|0;g=d+4|0;e=c[g>>2]|0;c[h>>2]=e;if(!e)e=f;else{c[e+8>>2]=h;e=c[i>>2]|0}f=d+8|0;c[f>>2]=e;e=c[b>>2]|0;if((c[e>>2]|0)==(h|0))c[e>>2]=d;else c[e+4>>2]=d;c[g>>2]=h;c[i>>2]=d;g=c[f>>2]|0}else d=h;a[d+12>>0]=1;a[g+12>>0]=0;j=g+4|0;f=c[j>>2]|0;d=c[f>>2]|0;c[j>>2]=d;if(d)c[d+8>>2]=g;d=g+8|0;c[f+8>>2]=c[d>>2];e=c[d>>2]|0;if((c[e>>2]|0)==(g|0))c[e>>2]=f;else c[e+4>>2]=f;c[f>>2]=g;c[d>>2]=f;return}else if((d|0)==37)return}function lE(a){a=a|0;P_(a);return}function mE(b,d){b=b|0;d=d|0;var e=0,f=0;e=O_(64)|0;c[e+4>>2]=0;c[e+8>>2]=0;c[e+12>>2]=0;f=e+20|0;c[f>>2]=0;c[f+4>>2]=0;c[f+8>>2]=0;c[f+12>>2]=0;c[f+16>>2]=0;c[f+20>>2]=0;a[f+24>>0]=0;c[e+48>>2]=d;c[e>>2]=32056;c[e+56>>2]=32152;c[e+16>>2]=32124;c[e+52>>2]=10;c[e+60>>2]=2;f=c[(c[e>>2]|0)+-12>>2]|0;b=e+f|0;f=e+(f+4)|0;d=(c[f>>2]|0)+-1|0;c[f>>2]=d;if((b|0)==0|(d|0)!=0)return e|0;oc[c[(c[b>>2]|0)+4>>2]&2047](b);return e|0}function nE(a){a=a|0;_d(a,32168);c[a+56>>2]=12804;if(!(c[a+60>>2]|0))return;else Ha(74472,79014,56,74486)}function oE(a){a=a|0;nE(a);P_(a);return}function pE(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;f=i;i=i+16|0;e=f;d=o$(b,1488,8144,-1)|0;if(!d){DF(a,b);i=f;return}c[e>>2]=a;if((a|0)!=0?(a=a+((c[(c[a>>2]|0)+-12>>2]|0)+4)|0,b=(c[a>>2]|0)+1|0,c[a>>2]=b,(b|0)==0):0)Ha(79054,79014,48,79068);pc[c[(c[d>>2]|0)+8>>2]&1023](d,e);d=c[e>>2]|0;if(!d){i=f;return}a=c[(c[d>>2]|0)+-12>>2]|0;e=d+a|0;a=d+(a+4)|0;b=(c[a>>2]|0)+-1|0;c[a>>2]=b;if((e|0)==0|(b|0)!=0){i=f;return}oc[c[(c[e>>2]|0)+4>>2]&2047](e);i=f;return}function qE(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;f=i;i=i+16|0;e=f;d=o$(b,1488,8144,-1)|0;if(!d){FF(a,b);i=f;return}c[e>>2]=a;if((a|0)!=0?(a=a+((c[(c[a>>2]|0)+-12>>2]|0)+4)|0,b=(c[a>>2]|0)+1|0,c[a>>2]=b,(b|0)==0):0)Ha(79054,79014,48,79068);pc[c[(c[d>>2]|0)+12>>2]&1023](d,e);d=c[e>>2]|0;if(!d){i=f;return}a=c[(c[d>>2]|0)+-12>>2]|0;e=d+a|0;a=d+(a+4)|0;b=(c[a>>2]|0)+-1|0;c[a>>2]=b;if((e|0)==0|(b|0)!=0){i=f;return}oc[c[(c[e>>2]|0)+4>>2]&2047](e);i=f;return}function rE(a){a=a|0;a=a+-16|0;_d(a,32168);c[a+56>>2]=12804;if(!(c[a+60>>2]|0))return;else Ha(74472,79014,56,74486)}function sE(a){a=a|0;a=a+-16|0;_d(a,32168);c[a+56>>2]=12804;if(!(c[a+60>>2]|0)){P_(a);return}else Ha(74472,79014,56,74486)}function tE(a,b){a=a|0;b=b|0;pE(a+-16|0,b);return}function uE(a,b){a=a|0;b=b|0;qE(a+-16|0,b);return}function vE(a){a=a|0;var b=0;b=c[(c[a>>2]|0)+-12>>2]|0;_d(a+b|0,32168);c[a+(b+56)>>2]=12804;if(!(c[a+(b+60)>>2]|0))return;else Ha(74472,79014,56,74486)}function wE(a){a=a|0;var b=0,d=0;d=c[(c[a>>2]|0)+-12>>2]|0;b=a+d|0;_d(b,32168);c[a+(d+56)>>2]=12804;if(!(c[a+(d+60)>>2]|0)){P_(b);return}else Ha(74472,79014,56,74486)}function xE(b,d,e,f,g,h){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;var j=0,k=0,l=0,m=0,n=0,o=0,p=0;o=i;i=i+16|0;m=o;n=c[b>>2]|0;if(!n){b=0;i=o;return b|0}p=d;k=f-p|0;l=g+12|0;j=c[l>>2]|0;k=(j|0)>(k|0)?j-k|0:0;j=e;g=j-p|0;if((g|0)>0?(tc[c[(c[n>>2]|0)+48>>2]&63](n,d,g)|0)!=(g|0):0){c[b>>2]=0;p=0;i=o;return p|0}do if((k|0)>0){m2(m,k,h);if((tc[c[(c[n>>2]|0)+48>>2]&63](n,(a[m>>0]&1)==0?m+1|0:c[m+8>>2]|0,k)|0)==(k|0)){o2(m);break}c[b>>2]=0;o2(m);p=0;i=o;return p|0}while(0);f=f-j|0;if((f|0)>0?(tc[c[(c[n>>2]|0)+48>>2]&63](n,e,f)|0)!=(f|0):0){c[b>>2]=0;p=0;i=o;return p|0}c[l>>2]=0;p=n;i=o;return p|0}function yE(b){b=b|0;var d=0,e=0,f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0;z=i;i=i+256|0;d=z+240|0;e=z+228|0;q=z+216|0;s=z+204|0;t=z+192|0;u=z+180|0;v=z+168|0;w=z+156|0;x=z+144|0;y=z+132|0;f=z+120|0;g=z+108|0;h=z+96|0;j=z+84|0;k=z+72|0;l=z+60|0;m=z+48|0;n=z+36|0;o=z+24|0;p=z+12|0;r=z;c[b+72>>2]=0;c[b+4>>2]=0;c[b+8>>2]=0;c[b+12>>2]=0;A=b+20|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;a[A+24>>0]=0;c[b>>2]=32308;c[b+68>>2]=32396;c[b+16>>2]=32368;c[b+48>>2]=-999;c[b+52>>2]=0;c[b+56>>2]=0;kM(b+60|0,-999999,4);if(c[8073]|0){i=z;return}l2(d,76945,1);A=OE(32284,d)|0;a[A>>0]=99;c[A+4>>2]=0;o2(d);l2(e,76963,1);A=OE(32284,e)|0;a[A>>0]=100;c[A+4>>2]=0;o2(e);l2(q,76979,1);A=OE(32284,q)|0;a[A>>0]=101;c[A+4>>2]=0;o2(q);l2(s,76990,1);A=OE(32284,s)|0;a[A>>0]=102;c[A+4>>2]=0;o2(s);l2(t,77006,1);A=OE(32284,t)|0;a[A>>0]=103;c[A+4>>2]=0;o2(t);l2(u,76910,1);A=OE(32284,u)|0;a[A>>0]=97;c[A+4>>2]=0;o2(u);l2(v,76929,1);A=OE(32284,v)|0;a[A>>0]=98;c[A+4>>2]=0;o2(v);l2(w,76931,1);A=OE(32284,w)|0;a[A>>0]=98;c[A+4>>2]=0;o2(w);l2(x,74203,2);A=OE(32284,x)|0;a[A>>0]=99;c[A+4>>2]=0;o2(x);l2(y,74206,2);A=OE(32284,y)|0;a[A>>0]=100;c[A+4>>2]=0;o2(y);l2(f,74209,2);A=OE(32284,f)|0;a[A>>0]=101;c[A+4>>2]=0;o2(f);l2(g,74212,2);A=OE(32284,g)|0;a[A>>0]=102;c[A+4>>2]=0;o2(g);l2(h,74215,3);A=OE(32284,h)|0;a[A>>0]=103;c[A+4>>2]=0;o2(h);l2(j,74219,2);A=OE(32284,j)|0;a[A>>0]=97;c[A+4>>2]=0;o2(j);l2(k,74222,2);A=OE(32284,k)|0;a[A>>0]=98;c[A+4>>2]=0;o2(k);l2(l,74225,2);A=OE(32284,l)|0;a[A>>0]=98;c[A+4>>2]=0;o2(l);l2(m,74228,3);A=OE(32284,m)|0;a[A>>0]=99;c[A+4>>2]=1;o2(m);l2(n,74232,3);A=OE(32284,n)|0;a[A>>0]=100;c[A+4>>2]=1;o2(n);l2(o,74236,3);A=OE(32284,o)|0;a[A>>0]=102;c[A+4>>2]=1;o2(o);l2(p,74240,3);A=OE(32284,p)|0;a[A>>0]=103;c[A+4>>2]=1;o2(p);l2(r,74244,3);A=OE(32284,r)|0;a[A>>0]=97;c[A+4>>2]=1;o2(r);i=z;return}function zE(b,d){b=b|0;d=d|0;var e=0,f=0;f=i;i=i+16|0;e=f;PE(e,32284,b+20|0);b=c[e>>2]|0;if((b|0)==(c[e+4>>2]|0)){d=0;i=f;return d|0}e=a[b+28>>0]|0;if(!d){d=e;i=f;return d|0}c[d>>2]=c[b+32>>2];d=e;i=f;return d|0}function AE(a){a=a|0;if((a|0)<=4)if((a|0)>-1)a=a+99&255;else a=0;else a=a+92&255;return a|0}function BE(a){a=a|0;switch(a<<24>>24|0){case 97:{a=5;break}case 98:{a=6;break}case 99:{a=0;break}case 100:{a=1;break}case 101:{a=2;break}case 102:{a=3;break}case 103:{a=4;break}default:a=-1}return a|0}function CE(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0;if((b|0)<=0)if((b|0)<0)while(1){g=c[e>>2]|0;c[e>>2]=g+-1;a:do if((g|0)<0){c[e>>2]=g+1;switch(a|0){case 1:{a=0;break a}case 2:{a=1;break a}case 4:{a=3;break a}case 5:{a=4;break a}case 6:{a=5;break a}case 3:{c[e>>2]=g;a=2;break a}case 0:{c[e>>2]=g;c[d>>2]=(c[d>>2]|0)+-1;a=6;break a}default:break a}}while(0);b=b+1|0;if(!b){g=a;break}}else g=a;else while(1){g=c[e>>2]|0;c[e>>2]=g+1;b:do if((g|0)>0){c[e>>2]=g+-1;switch(a|0){case 0:{a=1;break b}case 1:{a=2;break b}case 3:{a=4;break b}case 4:{a=5;break b}case 5:{a=6;break b}case 2:{c[e>>2]=g;a=3;break b}case 6:{c[e>>2]=g;c[d>>2]=(c[d>>2]|0)+1;a=0;break b}default:break b}}while(0);b=b+-1|0;if(!b){g=a;break}}a=c[e>>2]|0;if(f){if((a|0)>=0){e=g;return e|0}b=a+1|0;c[e>>2]=b;switch(g|0){case 1:{g=0;a=b;break}case 2:{g=1;a=b;break}case 4:{g=3;a=b;break}case 5:{g=4;a=b;break}case 6:{g=5;a=b;break}case 3:{c[e>>2]=a;g=2;break}case 0:{c[e>>2]=a;c[d>>2]=(c[d>>2]|0)+-1;g=6;a=c[e>>2]|0;break}default:a=b}c[e>>2]=a+1;e=g;return e|0}else{if((a|0)<=0){e=g;return e|0}b=a+-1|0;c[e>>2]=b;switch(g|0){case 0:{g=1;a=b;break}case 1:{g=2;a=b;break}case 3:{g=4;a=b;break}case 4:{g=5;a=b;break}case 5:{g=6;a=b;break}case 2:{c[e>>2]=a;g=3;break}case 6:{c[e>>2]=a;c[d>>2]=(c[d>>2]|0)+1;g=0;a=c[e>>2]|0;break}default:a=b}c[e>>2]=a+-1;e=g;return e|0}return 0}function DE(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,j=0;j=i;i=i+16|0;h=j;PE(h,32284,b+20|0);e=c[h>>2]|0;if((e|0)==(c[h+4>>2]|0)){h=48;e=0}else{h=(c[e+32>>2]|0)+48|0;e=a[e+28>>0]|0}g=c[b+52>>2]|0;switch(e<<24>>24|0){case 97:{f=5;break}case 98:{f=6;break}case 99:{f=0;break}case 100:{f=1;break}case 101:{f=2;break}case 102:{f=3;break}case 103:{f=4;break}default:f=-1}e=c[b+48>>2]|0;e=(e|0)==-999?c[d>>2]|0:e;c[d>>2]=e;if((f|0)==-1){i=j;return -1}else{i=j;return h+g+(f<<1)+(((f|0)>2)<<31>>31)+(e*12|0)|0}return 0}function EE(b,d){b=b|0;d=d|0;var e=0,f=0,g=0;g=i;i=i+16|0;f=g;PE(f,32284,b+20|0);e=c[f>>2]|0;if((e|0)==(c[f+4>>2]|0)){e=c[d>>2]|0;f=0}else{f=a[e+28>>0]|0;e=c[e+32>>2]|0;c[d>>2]=e}c[d>>2]=e+(c[b+52>>2]|0);switch(f<<24>>24|0){case 97:{e=5;break}case 98:{e=6;break}case 99:{e=0;break}case 100:{e=1;break}case 101:{e=2;break}case 102:{e=3;break}case 103:{e=4;break}default:e=-1}i=g;return e|0}function FE(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,j=0,k=0;j=i;i=i+32|0;k=j+24|0;h=j+16|0;f=j+8|0;g=j;lM(a,b+60|0);kM(k,-999999,4);if(uM(a,k)|0)rM(a,d)|0;else{rM(d,a)|0;c[e>>2]=0}d=c[b+56>>2]|0;if(!d){d=c[e>>2]|0;kM(h,0,1);if(!d){oM(g,a,h);qM(a,g)|0;vM(a)|0;i=j;return}else b=1}else{c[e>>2]=d;kM(h,0,1);b=1}do{d=d+-1|0;b=b<<1;kM(f,1,b);qM(h,f)|0}while((d|0)!=0);oM(g,a,h);qM(a,g)|0;vM(a)|0;i=j;return}function GE(a,b){a=a|0;b=b|0;var c=0;c=a+60|0;rM(c,b)|0;vM(c)|0;return a|0}function HE(a,b){a=a|0;b=b|0;var c=0;c=a+60|0;qM(c,b)|0;vM(c)|0;return a|0}function IE(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;f=i;i=i+16|0;e=f;d=o$(b,1488,1720,-1)|0;if(!d){id(a,b);i=f;return}c[e>>2]=a;if((a|0)!=0?(a=a+((c[(c[a>>2]|0)+-12>>2]|0)+4)|0,b=(c[a>>2]|0)+1|0,c[a>>2]=b,(b|0)==0):0)Ha(79054,79014,48,79068);pc[c[(c[d>>2]|0)+8>>2]&1023](d,e);d=c[e>>2]|0;if(!d){i=f;return}a=c[(c[d>>2]|0)+-12>>2]|0;e=d+a|0;a=d+(a+4)|0;b=(c[a>>2]|0)+-1|0;c[a>>2]=b;if((e|0)==0|(b|0)!=0){i=f;return}oc[c[(c[e>>2]|0)+4>>2]&2047](e);i=f;return}function JE(a,b){a=a|0;b=b|0;IE(a+-16|0,b);return}function KE(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;f=i;i=i+16|0;e=f;d=o$(b,1488,1720,-1)|0;if(!d){kd(a,b);i=f;return}c[e>>2]=a;if((a|0)!=0?(a=a+((c[(c[a>>2]|0)+-12>>2]|0)+4)|0,b=(c[a>>2]|0)+1|0,c[a>>2]=b,(b|0)==0):0)Ha(79054,79014,48,79068);pc[c[(c[d>>2]|0)+12>>2]&1023](d,e);d=c[e>>2]|0;if(!d){i=f;return}a=c[(c[d>>2]|0)+-12>>2]|0;e=d+a|0;a=d+(a+4)|0;b=(c[a>>2]|0)+-1|0;c[a>>2]=b;if((e|0)==0|(b|0)!=0){i=f;return}oc[c[(c[e>>2]|0)+4>>2]&2047](e);i=f;return}function LE(a,b){a=a|0;b=b|0;KE(a+-16|0,b);return}function ME(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0;n=i;i=i+160|0;k=n+136|0;m=n;l=m+4|0;c[m>>2]=32584;c[m+56>>2]=32604;T2(m+56|0,l);c[m+128>>2]=0;c[m+132>>2]=-1;c[m>>2]=32624;c[m+56>>2]=32644;W2(l);c[l>>2]=12740;f=m+36|0;c[f>>2]=0;c[f+4>>2]=0;c[f+8>>2]=0;c[f+12>>2]=0;c[m+52>>2]=16;c[k>>2]=0;c[k+4>>2]=0;c[k+8>>2]=0;$d(l,k);o2(k);f=d+20|0;o=a[f>>0]|0;p=(o&1)==0;df(m,p?f+1|0:c[d+28>>2]|0,p?(o&255)>>>1:c[d+24>>2]|0)|0;if((B2(f,77054)|0)!=0?(B2(f,77021)|0)!=0:0){f=c[d+52>>2]|0;if((f|0)!=0?(g=(f|0)>0?35:38,e=(f|0)>-1?f:0-f|0,(e|0)!=0):0)do{a[k>>0]=g;df(m,k,1)|0;e=e+-1|0}while((e|0)!=0);e=c[d+48>>2]|0;if((e|0)!=-999){O3(m,e)|0;f=1}else f=0}else f=0;e=c[d+60>>2]|0;a:do if((e|0)>=1){switch(e|0){case 1:break;default:{j=10;break a}}if(f)j=10;else j=11}else switch(e|0){case -999999:break;default:j=10}while(0);if((j|0)==10){a[k>>0]=42;O3(df(m,k,1)|0,e)|0;j=11}if((j|0)==11?(h=c[d+64>>2]|0,(h|0)>0):0){a[k>>0]=47;O3(df(m,k,1)|0,h)|0}e=c[d+56>>2]|0;if(!e){RE(b,l);QE(m);i=n;return}do{a[k>>0]=46;df(m,k,1)|0;e=e+-1|0}while((e|0)!=0);RE(b,l);QE(m);i=n;return}function NE(){var a=0,b=0,d=0;a=O_(76)|0;yE(a);d=a+((c[(c[a>>2]|0)+-12>>2]|0)+4)|0;b=(c[d>>2]|0)+1|0;c[d>>2]=b;if(!b)Ha(79054,79014,48,79068);else return a|0;return 0}function OE(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,j=0;j=i;i=i+16|0;f=j;g=cF(b,f,d)|0;e=c[g>>2]|0;if(e){b=e;b=b+28|0;i=j;return b|0}h=O_(36)|0;k2(h+16|0,d);a[h+28>>0]=0;c[h+32>>2]=0;e=c[f>>2]|0;c[h>>2]=0;c[h+4>>2]=0;c[h+8>>2]=e;c[g>>2]=h;e=c[c[b>>2]>>2]|0;if(!e)e=h;else{c[b>>2]=e;e=c[g>>2]|0}kE(c[b+4>>2]|0,e);b=b+8|0;c[b>>2]=(c[b>>2]|0)+1;b=h;b=b+28|0;i=j;return b|0}function PE(b,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;d=d+4|0;f=c[d>>2]|0;a:do if(f){k=a[e>>0]|0;j=(k&1)==0;k=j?(k&255)>>>1:c[e+4>>2]|0;j=j?e+1|0:c[e+8>>2]|0;b:while(1){while(1){g=f+16|0;e=a[g>>0]|0;h=(e&1)==0;e=h?(e&255)>>>1:c[f+20>>2]|0;g=h?g+1|0:c[f+24>>2]|0;h=e>>>0>>0;l=c1(j,g,h?e:k)|0;i=k>>>0>>0;if((((l|0)==0?(i?-2147483648:0):l)|0)<0){d=f;break}l=c1(g,j,i?k:e)|0;if((((l|0)==0?(h?-2147483648:0):l)|0)>=0)break b;f=c[f+4>>2]|0;if(!f)break a}f=c[d>>2]|0;if(!f)break a}e=f;f=c[f+4>>2]|0;if(f){d=f;while(1){f=c[d>>2]|0;if(!f)break;else d=f}}c[b>>2]=e;c[b+4>>2]=d;return}while(0);l=d;c[b>>2]=l;c[b+4>>2]=l;return}function QE(a){a=a|0;var b=0,d=0;c[a>>2]=32624;b=a+56|0;c[b>>2]=32644;d=a+4|0;c[d>>2]=12740;o2(a+36|0);U2(d);O2(b);return}function RE(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0;e=c[d+48>>2]|0;if(e&16){e=d+44|0;f=c[e>>2]|0;g=c[d+24>>2]|0;if(f>>>0>>0)c[e>>2]=g;else g=f;f=c[d+20>>2]|0;h=g-f|0;if(h>>>0>4294967279)L_(b);if(h>>>0<11){a[b>>0]=h<<1;e=b+1|0}else{d=h+16&-16;e=O_(d)|0;c[b+8>>2]=e;c[b>>2]=d|1;c[b+4>>2]=h}if((f|0)!=(g|0)){d=e;while(1){a[d>>0]=a[f>>0]|0;f=f+1|0;if((f|0)==(g|0))break;else d=d+1|0}e=e+h|0}a[e>>0]=0;return}if(!(e&8)){c[b>>2]=0;c[b+4>>2]=0;c[b+8>>2]=0;return}f=c[d+8>>2]|0;d=c[d+16>>2]|0;h=d-f|0;if(h>>>0>4294967279)L_(b);if(h>>>0<11){a[b>>0]=h<<1;e=b+1|0}else{g=h+16&-16;e=O_(g)|0;c[b+8>>2]=e;c[b>>2]=g|1;c[b+4>>2]=h}if((f|0)!=(d|0)){g=e;while(1){a[g>>0]=a[f>>0]|0;f=f+1|0;if((f|0)==(d|0))break;else g=g+1|0}e=e+h|0}a[e>>0]=0;return}function SE(a){a=a|0;_d(a,32408);c[a+68>>2]=12804;if(!(c[a+72>>2]|0))return;else Ha(74472,79014,56,74486)}function TE(a){a=a|0;SE(a);P_(a);return}function UE(a){a=a|0;a=a+-16|0;_d(a,32408);c[a+68>>2]=12804;if(!(c[a+72>>2]|0))return;else Ha(74472,79014,56,74486)}function VE(a){a=a|0;a=a+-16|0;_d(a,32408);c[a+68>>2]=12804;if(!(c[a+72>>2]|0)){P_(a);return}else Ha(74472,79014,56,74486)}function WE(a){a=a|0;var b=0;b=c[(c[a>>2]|0)+-12>>2]|0;_d(a+b|0,32408);c[a+(b+68)>>2]=12804;if(!(c[a+(b+72)>>2]|0))return;else Ha(74472,79014,56,74486)}function XE(a){a=a|0;var b=0,d=0;d=c[(c[a>>2]|0)+-12>>2]|0;b=a+d|0;_d(b,32408);c[a+(d+68)>>2]=12804;if(!(c[a+(d+72)>>2]|0)){P_(b);return}else Ha(74472,79014,56,74486)}function YE(){c[8072]=0;c[8073]=0;c[8071]=32288;Ta(1487,32284,n|0)|0;return}function ZE(a){a=a|0;_E(a,c[a+4>>2]|0);return}function _E(a,b){a=a|0;b=b|0;if(!b)return;_E(a,c[b>>2]|0);_E(a,c[b+4>>2]|0);o2(b+16|0);P_(b);return}function $E(a){a=a|0;QE(a);P_(a);return}function aF(a){a=a|0;QE(a+(c[(c[a>>2]|0)+-12>>2]|0)|0);return}function bF(a){a=a|0;a=a+(c[(c[a>>2]|0)+-12>>2]|0)|0;QE(a);P_(a);return}function cF(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0;f=b+4|0;b=c[f>>2]|0;if(!b){c[d>>2]=f;d=f;return d|0}j=a[e>>0]|0;i=(j&1)==0;j=i?(j&255)>>>1:c[e+4>>2]|0;i=i?e+1|0:c[e+8>>2]|0;while(1){e=b+16|0;f=a[e>>0]|0;g=(f&1)==0;f=g?(f&255)>>>1:c[b+20>>2]|0;e=g?e+1|0:c[b+24>>2]|0;g=f>>>0>>0;k=c1(i,e,g?f:j)|0;h=j>>>0>>0;if((((k|0)==0?(h?-2147483648:0):k)|0)<0){f=c[b>>2]|0;if(!f){f=b;e=5;break}else b=f}else{k=c1(e,i,h?j:f)|0;if((((k|0)==0?(g?-2147483648:0):k)|0)>=0){e=10;break}f=b+4|0;e=c[f>>2]|0;if(!e){e=9;break}else b=e}}if((e|0)==5){c[d>>2]=b;k=f;return k|0}else if((e|0)==9){c[d>>2]=b;k=f;return k|0}else if((e|0)==10){c[d>>2]=b;k=d;return k|0}return 0}function dF(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;f=i;i=i+16|0;e=f;d=o$(b,1488,8232,-1)|0;if(!d){id(a,b);i=f;return}c[e>>2]=a;if((a|0)!=0?(a=a+((c[(c[a>>2]|0)+-12>>2]|0)+4)|0,b=(c[a>>2]|0)+1|0,c[a>>2]=b,(b|0)==0):0)Ha(79054,79014,48,79068);pc[c[(c[d>>2]|0)+8>>2]&1023](d,e);d=c[e>>2]|0;if(!d){i=f;return}a=c[(c[d>>2]|0)+-12>>2]|0;e=d+a|0;a=d+(a+4)|0;b=(c[a>>2]|0)+-1|0;c[a>>2]=b;if((e|0)==0|(b|0)!=0){i=f;return}oc[c[(c[e>>2]|0)+4>>2]&2047](e);i=f;return}function eF(a,b){a=a|0;b=b|0;dF(a+-16|0,b);return}function fF(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;f=i;i=i+16|0;e=f;d=o$(b,1488,8232,-1)|0;if(!d){kd(a,b);i=f;return}c[e>>2]=a;if((a|0)!=0?(a=a+((c[(c[a>>2]|0)+-12>>2]|0)+4)|0,b=(c[a>>2]|0)+1|0,c[a>>2]=b,(b|0)==0):0)Ha(79054,79014,48,79068);pc[c[(c[d>>2]|0)+12>>2]&1023](d,e);d=c[e>>2]|0;if(!d){i=f;return}a=c[(c[d>>2]|0)+-12>>2]|0;e=d+a|0;a=d+(a+4)|0;b=(c[a>>2]|0)+-1|0;c[a>>2]=b;if((e|0)==0|(b|0)!=0){i=f;return}oc[c[(c[e>>2]|0)+4>>2]&2047](e);i=f;return}function gF(a,b){a=a|0;b=b|0;fF(a+-16|0,b);return}function hF(){var b=0,d=0,e=0;b=O_(56)|0;e=b+52|0;c[e>>2]=0;c[b+4>>2]=0;c[b+8>>2]=0;c[b+12>>2]=0;d=b+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;a[d+24>>0]=0;c[b>>2]=32680;c[b+48>>2]=32768;c[b+16>>2]=32740;d=(c[e>>2]|0)+1|0;c[e>>2]=d;if(!d)Ha(79054,79014,48,79068);else return b|0;return 0}function iF(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;f=i;i=i+16|0;e=f;d=o$(b,1488,8256,-1)|0;if(!d){id(a,b);i=f;return}c[e>>2]=a;if((a|0)!=0?(a=a+((c[(c[a>>2]|0)+-12>>2]|0)+4)|0,b=(c[a>>2]|0)+1|0,c[a>>2]=b,(b|0)==0):0)Ha(79054,79014,48,79068);pc[c[(c[d>>2]|0)+8>>2]&1023](d,e);d=c[e>>2]|0;if(!d){i=f;return}a=c[(c[d>>2]|0)+-12>>2]|0;e=d+a|0;a=d+(a+4)|0;b=(c[a>>2]|0)+-1|0;c[a>>2]=b;if((e|0)==0|(b|0)!=0){i=f;return}oc[c[(c[e>>2]|0)+4>>2]&2047](e);i=f;return}function jF(a,b){a=a|0;b=b|0;iF(a+-16|0,b);return}function kF(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;f=i;i=i+16|0;e=f;d=o$(b,1488,8256,-1)|0;if(!d){kd(a,b);i=f;return}c[e>>2]=a;if((a|0)!=0?(a=a+((c[(c[a>>2]|0)+-12>>2]|0)+4)|0,b=(c[a>>2]|0)+1|0,c[a>>2]=b,(b|0)==0):0)Ha(79054,79014,48,79068);pc[c[(c[d>>2]|0)+12>>2]&1023](d,e);d=c[e>>2]|0;if(!d){i=f;return}a=c[(c[d>>2]|0)+-12>>2]|0;e=d+a|0;a=d+(a+4)|0;b=(c[a>>2]|0)+-1|0;c[a>>2]=b;if((e|0)==0|(b|0)!=0){i=f;return}oc[c[(c[e>>2]|0)+4>>2]&2047](e);i=f;return}function lF(a,b){a=a|0;b=b|0;kF(a+-16|0,b);return}function mF(){var b=0,d=0,e=0;b=O_(56)|0;e=b+52|0;c[e>>2]=0;c[b+4>>2]=0;c[b+8>>2]=0;c[b+12>>2]=0;d=b+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;a[d+24>>0]=0;c[b>>2]=32812;c[b+48>>2]=32900;c[b+16>>2]=32872;d=(c[e>>2]|0)+1|0;c[e>>2]=d;if(!d)Ha(79054,79014,48,79068);else return b|0;return 0}function nF(a){a=a|0;_d(a,32780);c[a+48>>2]=12804;if(!(c[a+52>>2]|0))return;else Ha(74472,79014,56,74486)}function oF(a){a=a|0;nF(a);P_(a);return}function pF(a){a=a|0;a=a+-16|0;_d(a,32780);c[a+48>>2]=12804;if(!(c[a+52>>2]|0))return;else Ha(74472,79014,56,74486)}function qF(a){a=a|0;a=a+-16|0;_d(a,32780);c[a+48>>2]=12804;if(!(c[a+52>>2]|0)){P_(a);return}else Ha(74472,79014,56,74486)}function rF(a){a=a|0;var b=0;b=c[(c[a>>2]|0)+-12>>2]|0;_d(a+b|0,32780);c[a+(b+48)>>2]=12804;if(!(c[a+(b+52)>>2]|0))return;else Ha(74472,79014,56,74486)}function sF(a){a=a|0;var b=0,d=0;d=c[(c[a>>2]|0)+-12>>2]|0;b=a+d|0;_d(b,32780);c[a+(d+48)>>2]=12804;if(!(c[a+(d+52)>>2]|0)){P_(b);return}else Ha(74472,79014,56,74486)}function tF(a){a=a|0;_d(a,32912);c[a+48>>2]=12804;if(!(c[a+52>>2]|0))return;else Ha(74472,79014,56,74486)}function uF(a){a=a|0;tF(a);P_(a);return}function vF(a){a=a|0;a=a+-16|0;_d(a,32912);c[a+48>>2]=12804;if(!(c[a+52>>2]|0))return;else Ha(74472,79014,56,74486)}function wF(a){a=a|0;a=a+-16|0;_d(a,32912);c[a+48>>2]=12804;if(!(c[a+52>>2]|0)){P_(a);return}else Ha(74472,79014,56,74486)}function xF(a){a=a|0;var b=0;b=c[(c[a>>2]|0)+-12>>2]|0;_d(a+b|0,32912);c[a+(b+48)>>2]=12804;if(!(c[a+(b+52)>>2]|0))return;else Ha(74472,79014,56,74486)}function yF(a){a=a|0;var b=0,d=0;d=c[(c[a>>2]|0)+-12>>2]|0;b=a+d|0;_d(b,32912);c[a+(d+48)>>2]=12804;if(!(c[a+(d+52)>>2]|0)){P_(b);return}else Ha(74472,79014,56,74486)}function zF(b){b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0;e=b+20|0;d=a[e>>0]|0;if(!(d&1)){f=(d&255)>>>1;d=e+1|0}else{f=c[b+24>>2]|0;d=c[b+28>>2]|0}if(f>>>0<5){i=0;return i|0}g=d+f|0;h=d;if((f|0)<5){i=0;return i|0}b=f+-4|0;f=d+b|0;if(!b){i=0;return i|0}a:while(1){if((a[d>>0]|0)==66){e=d;b=74458;do{b=b+1|0;if((b|0)==74463)break a;e=e+1|0}while((a[e>>0]|0)==(a[b>>0]|0))}d=d+1|0;if((d|0)==(f|0)){d=0;i=13;break}}if((i|0)==13)return d|0;if((d|0)==(g|0)){i=0;return i|0}i=(d-h|0)!=-1;return i|0}function AF(b){b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0;e=b+20|0;d=a[e>>0]|0;if(!(d&1)){f=(d&255)>>>1;d=e+1|0}else{f=c[b+24>>2]|0;d=c[b+28>>2]|0}if(f>>>0<3){i=0;return i|0}g=d+f|0;h=d;if((f|0)<3){i=0;return i|0}b=f+-2|0;f=d+b|0;if(!b){i=0;return i|0}a:while(1){if((a[d>>0]|0)==69){e=d;b=74464;do{b=b+1|0;if((b|0)==74467)break a;e=e+1|0}while((a[e>>0]|0)==(a[b>>0]|0))}d=d+1|0;if((d|0)==(f|0)){d=0;i=13;break}}if((i|0)==13)return d|0;if((d|0)==(g|0)){i=0;return i|0}i=(d-h|0)!=-1;return i|0}function BF(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0;s=i;i=i+16|0;r=s;k2(r,d+20|0);m=a[r>>0]|0;k=(m&1)==0;d=k?r+1|0:c[r+8>>2]|0;m=k?(m&255)>>>1:c[r+4>>2]|0;a:do if(m>>>0>=5){j=d+m|0;k=d;if((m|0)>=5){h=m+-4|0;f=d+h|0;if(h){e=d;b:while(1){if((a[e>>0]|0)==66){g=e;h=74458;do{h=h+1|0;if((h|0)==74463)break b;g=g+1|0}while((a[g>>0]|0)==(a[h>>0]|0))}e=e+1|0;if((e|0)==(f|0)){e=11;break a}}if((e|0)!=(j|0)?(l=e-k|0,(l|0)!=-1):0){z2(r,l,m,74464)|0;k2(b,r);o2(r);i=s;return}else e=11}else e=12}}else e=11;while(0);if((e|0)==11?!(m>>>0<3|(m|0)<3):0)e=12;c:do if((e|0)==12?(o=d+m|0,p=d,l=m+-2|0,n=d+l|0,(l|0)!=0):0){d:while(1){if((a[d>>0]|0)==69){e=d;f=74464;do{f=f+1|0;if((f|0)==74467)break d;e=e+1|0}while((a[e>>0]|0)==(a[f>>0]|0))}d=d+1|0;if((d|0)==(n|0))break c}if((d|0)!=(o|0)?(q=d-p|0,(q|0)!=-1):0){z2(r,q,m,74458)|0;k2(b,r);o2(r);i=s;return}}while(0);l2(b,88927,0);o2(r);i=s;return}function CF(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0;g=i;i=i+16|0;e=g;d=c[b>>2]|0;c[e>>2]=d;if((d|0)!=0?(h=d+((c[(c[d>>2]|0)+-12>>2]|0)+4)|0,d=(c[h>>2]|0)+1|0,c[h>>2]=d,(d|0)==0):0)Ha(79054,79014,48,79068);do if(nd(a,e)|0){d=c[b>>2]|0;if(!d)Ha(78999,79014,102,79043);else{f=(c[a+48>>2]|0)==(c[d+48>>2]|0);break}}else f=0;while(0);d=c[e>>2]|0;if(!d){i=g;return f|0}a=c[(c[d>>2]|0)+-12>>2]|0;b=d+a|0;a=d+(a+4)|0;h=(c[a>>2]|0)+-1|0;c[a>>2]=h;if((b|0)==0|(h|0)!=0){i=g;return f|0}oc[c[(c[b>>2]|0)+4>>2]&2047](b);i=g;return f|0}function DF(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;f=i;i=i+16|0;e=f;d=o$(b,1488,8296,-1)|0;if(!d){id(a,b);i=f;return}c[e>>2]=a;if((a|0)!=0?(a=a+((c[(c[a>>2]|0)+-12>>2]|0)+4)|0,b=(c[a>>2]|0)+1|0,c[a>>2]=b,(b|0)==0):0)Ha(79054,79014,48,79068);pc[c[(c[d>>2]|0)+8>>2]&1023](d,e);d=c[e>>2]|0;if(!d){i=f;return}a=c[(c[d>>2]|0)+-12>>2]|0;e=d+a|0;a=d+(a+4)|0;b=(c[a>>2]|0)+-1|0;c[a>>2]=b;if((e|0)==0|(b|0)!=0){i=f;return}oc[c[(c[e>>2]|0)+4>>2]&2047](e);i=f;return}function EF(a,b){a=a|0;b=b|0;DF(a+-16|0,b);return}function FF(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;f=i;i=i+16|0;e=f;d=o$(b,1488,8296,-1)|0;if(!d){kd(a,b);i=f;return}c[e>>2]=a;if((a|0)!=0?(a=a+((c[(c[a>>2]|0)+-12>>2]|0)+4)|0,b=(c[a>>2]|0)+1|0,c[a>>2]=b,(b|0)==0):0)Ha(79054,79014,48,79068);pc[c[(c[d>>2]|0)+12>>2]&1023](d,e);d=c[e>>2]|0;if(!d){i=f;return}a=c[(c[d>>2]|0)+-12>>2]|0;e=d+a|0;a=d+(a+4)|0;b=(c[a>>2]|0)+-1|0;c[a>>2]=b;if((e|0)==0|(b|0)!=0){i=f;return}oc[c[(c[e>>2]|0)+4>>2]&2047](e);i=f;return}function GF(a,b){a=a|0;b=b|0;FF(a+-16|0,b);return}function HF(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0;c[b>>2]=0;c[b+4>>2]=0;c[b+8>>2]=0;d=a[e>>0]|0;h=(d&1)==0?(d&255)>>>1:c[e+4>>2]|0;if((h|0)<=0)return;i=e+8|0;g=e+1|0;f=0;while(1){d=(d&1)==0?g:c[i>>2]|0;switch(a[d+f>>0]|0){case 92:{if((a[d+(f+1)>>0]|0)==34)v2(b,92);break}case 34:{v2(b,92);break}default:{}}v2(b,a[((a[e>>0]&1)==0?g:c[i>>2]|0)+f>>0]|0);f=f+1|0;if((f|0)>=(h|0))break;d=a[e>>0]|0}return}function IF(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0;w=i;i=i+176|0;t=w+160|0;v=w;r=w+148|0;s=w+136|0;u=v+4|0;c[v>>2]=32584;c[v+56>>2]=32604;T2(v+56|0,u);c[v+128>>2]=0;c[v+132>>2]=-1;c[v>>2]=32624;c[v+56>>2]=32644;W2(u);c[u>>2]=12740;o=v+36|0;c[o>>2]=0;c[o+4>>2]=0;c[o+8>>2]=0;c[o+12>>2]=0;c[v+52>>2]=16;c[t>>2]=0;c[t+4>>2]=0;c[t+8>>2]=0;$d(u,t);o2(t);a[t>>0]=92;o=df(v,t,1)|0;p=d+20|0;e=a[p>>0]|0;q=(e&1)==0;df(o,q?p+1|0:c[d+28>>2]|0,q?(e&255)>>>1:c[d+24>>2]|0)|0;e=c[d+48>>2]|0;if(e){a[t>>0]=58;P3(df(v,t,1)|0,e)|0}q=d+36|0;e=d+32|0;if((c[q>>2]|0)==(c[e>>2]|0)){RE(b,u);QE(v);i=w;return}a[t>>0]=60;df(v,t,1)|0;k=r+8|0;l=r+1|0;m=r+4|0;n=s+8|0;o=s+1|0;p=s+4|0;e=c[e>>2]|0;while(1){if((e|0)==(c[q>>2]|0)){e=26;break}d=c[e>>2]|0;if(!d){e=7;break}f=d+8|0;g=a[f>>0]|0;h=(g&1)==0;if(h)j=(g&255)>>>1;else j=c[d+12>>2]|0;if(j){df(df(v,h?f+1|0:c[d+16>>2]|0,h?(g&255)>>>1:c[d+12>>2]|0)|0,74468,1)|0;d=c[e>>2]|0;if(!d){e=13;break}}d=a[d+44>>0]|0;l2(r,d<<24>>24!=0?74470:88927,d&255);d=c[e>>2]|0;if(!d){e=15;break}HF(s,0,d+20|0);j=a[r>>0]|0;h=(j&1)==0;j=df(v,h?l:c[k>>2]|0,h?(j&255)>>>1:c[m>>2]|0)|0;h=a[s>>0]|0;d=(h&1)==0;h=df(j,d?o:c[n>>2]|0,d?(h&255)>>>1:c[p>>2]|0)|0;d=a[r>>0]|0;j=(d&1)==0;df(h,j?l:c[k>>2]|0,j?(d&255)>>>1:c[m>>2]|0)|0;d=c[e>>2]|0;if(!d){e=17;break}f=d+32|0;g=a[f>>0]|0;h=(g&1)==0;if(h)j=(g&255)>>>1;else j=c[d+36>>2]|0;if(j)df(v,h?f+1|0:c[d+40>>2]|0,h?(g&255)>>>1:c[d+36>>2]|0)|0;e=e+4|0;if((e|0)!=(c[q>>2]|0)){a[t>>0]=44;df(v,t,1)|0}o2(s);o2(r)}if((e|0)==7)Ha(78999,79014,102,79043);else if((e|0)==13)Ha(78999,79014,102,79043);else if((e|0)==15)Ha(78999,79014,102,79043);else if((e|0)==17)Ha(78999,79014,102,79043);else if((e|0)==26){a[t>>0]=62;df(v,t,1)|0;RE(b,u);QE(v);i=w;return}}function JF(a){a=a|0;a=a+-16|0;_d(a,33196);c[a+56>>2]=12804;if(!(c[a+60>>2]|0))return;else Ha(74472,79014,56,74486)}function KF(a){a=a|0;a=a+-16|0;_d(a,33196);c[a+56>>2]=12804;if(!(c[a+60>>2]|0)){P_(a);return}else Ha(74472,79014,56,74486)}function LF(){return 1.0}function MF(){return 74542}function NF(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0;p=i;i=i+208|0;k=p+196|0;o=p+148|0;m=p+152|0;l=p;a=mG(a)|0;c[o>>2]=a;if(!a){o=2;i=p;return o|0}h=a+((c[(c[a>>2]|0)+-12>>2]|0)+4)|0;n=(c[h>>2]|0)+1|0;c[h>>2]=n;if(!n)Ha(79054,79014,48,79068);h=c[(c[a>>2]|0)+-12>>2]|0;d=a+h|0;h=a+(h+4)|0;n=(c[h>>2]|0)+-1|0;c[h>>2]=n;if(!((d|0)==0|(n|0)!=0))oc[c[(c[d>>2]|0)+4>>2]&2047](d);e=c[10857]|0;c[m>>2]=e;c[m+(c[e+-16>>2]|0)>>2]=c[10858];e=m+4|0;f=c[10859]|0;c[e>>2]=f;c[e+(c[f+-16>>2]|0)>>2]=c[10860];f=m+8|0;g=c[10861]|0;c[f>>2]=g;c[f+(c[g+-16>>2]|0)>>2]=c[10862];g=m+12|0;h=c[10863]|0;c[g>>2]=h;c[g+(c[h+-16>>2]|0)>>2]=c[10864];h=m+16|0;n=c[10865]|0;c[h>>2]=n;c[h+(c[n+-16>>2]|0)>>2]=c[10866];c[m>>2]=1136;c[m+4>>2]=1228;c[m+8>>2]=1260;c[m+12>>2]=1292;c[m+16>>2]=1324;n=m+20|0;c[n>>2]=0;c[n+4>>2]=0;c[n+8>>2]=0;c[n+12>>2]=0;c[n+16>>2]=0;c[n+20>>2]=0;aX(l,m+(c[280]|0)|0);dX(l,o);d=nG(m)|0;a=c[o>>2]|0;if((a|0)!=(d|0)){if((d|0)!=0?(r=d+((c[(c[d>>2]|0)+-12>>2]|0)+4)|0,q=(c[r>>2]|0)+1|0,c[r>>2]=q,(q|0)==0):0)Ha(79054,79014,48,79068);if((a|0)!=0?(q=c[(c[a>>2]|0)+-12>>2]|0,j=a+q|0,q=a+(q+4)|0,r=(c[q>>2]|0)+-1|0,c[q>>2]=r,!((j|0)==0|(r|0)!=0)):0)oc[c[(c[j>>2]|0)+4>>2]&2047](j);c[o>>2]=d}do if(!d)j=3;else{q=c[(c[d>>2]|0)+-12>>2]|0;a=d+q|0;q=d+(q+4)|0;r=(c[q>>2]|0)+-1|0;c[q>>2]=r;if(!((a|0)==0|(r|0)!=0)?(oc[c[(c[a>>2]|0)+4>>2]&2047](a),(c[o>>2]|0)==0):0){j=3;break}j=rd(b,o)|0;c[k>>2]=S2(j+(c[(c[j>>2]|0)+-12>>2]|0)|0)|0;r=o8(k,54552)|0;r=zc[c[(c[r>>2]|0)+28>>2]&255](r,10)|0;m8(k);R3(j,r)|0;B3(j)|0;j=0}while(0);a=c[11540]|0;c[l>>2]=a;c[l+4>>2]=c[11573];c[l+(c[a+-12>>2]|0)>>2]=c[11574];c[l+8>>2]=c[11575];c[l+12>>2]=c[11576];c[l+16>>2]=c[11577];c[l+20>>2]=c[11578];c[l+24>>2]=c[11579];c[l+28>>2]=c[11580];c[l+32>>2]=c[11581];c[l+36>>2]=c[11582];c[l+40>>2]=c[11583];c[l+44>>2]=c[11584];c[l+48>>2]=c[11585];c[l+52>>2]=c[11586];c[l+56>>2]=c[11587];c[l+60>>2]=c[11588];c[l+64>>2]=c[11589];oG(l+80|0,c[l+84>>2]|0);oG(l+68|0,c[l+72>>2]|0);a=c[10856]|0;c[m>>2]=a;c[m+(c[a+-16>>2]|0)>>2]=c[10867];c[e>>2]=c[10868];c[f>>2]=c[10869];c[g>>2]=c[10870];c[h>>2]=c[10871];pG(n);e=m+24|0;a=c[e>>2]|0;f=m+28|0;d=c[f>>2]|0;if((a|0)!=(d|0)){do{P_(c[a>>2]|0);a=a+4|0}while((a|0)!=(d|0));a=c[e>>2]|0;d=c[f>>2]|0;if((d|0)!=(a|0))c[f>>2]=d+(~((d+-4-a|0)>>>2)<<2)}a=c[n>>2]|0;if(a)P_(a);a=c[o>>2]|0;if(!a){r=j;i=p;return r|0}q=c[(c[a>>2]|0)+-12>>2]|0;d=a+q|0;q=a+(q+4)|0;r=(c[q>>2]|0)+-1|0;c[q>>2]=r;if((d|0)==0|(r|0)!=0){r=j;i=p;return r|0}oc[c[(c[d>>2]|0)+4>>2]&2047](d);r=j;i=p;return r|0}function OF(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,j=0,k=0;j=i;i=i+128|0;f=j;h=j+4|0;b=mG(b)|0;c[f>>2]=b;if(!b)kM(a,2,1);else{k=b+((c[(c[b>>2]|0)+-12>>2]|0)+4)|0;g=(c[k>>2]|0)+1|0;c[k>>2]=g;if(!g)Ha(79054,79014,48,79068);k=c[(c[b>>2]|0)+-12>>2]|0;g=b+k|0;b=b+(k+4)|0;k=(c[b>>2]|0)+-1|0;c[b>>2]=k;if(!((g|0)==0|(k|0)!=0))oc[c[(c[g>>2]|0)+4>>2]&2047](g);qG(h);zU(a,h,f,d,e)}f=c[f>>2]|0;if(!f){i=j;return}e=c[(c[f>>2]|0)+-12>>2]|0;b=f+e|0;e=f+(e+4)|0;k=(c[e>>2]|0)+-1|0;c[e>>2]=k;if((b|0)==0|(k|0)!=0){i=j;return}oc[c[(c[b>>2]|0)+4>>2]&2047](b);i=j;return}function PF(a,b,c){a=a|0;b=b|0;c=c|0;return rG(a,b,c)|0}function QF(a,b,c){a=a|0;b=b|0;c=c|0;return sG(a,b,c)|0}function RF(a,b,c){a=a|0;b=b|0;c=c|0;return tG(a,b,c)|0}function SF(a,b,c){a=a|0;b=b|0;c=c|0;return uG(a,b,c)|0}function TF(a,b,c){a=a|0;b=b|0;c=c|0;return vG(a,b,c)|0}function UF(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0;d=i;i=i+16|0;e=d;lM(e,b);c=wG(a,e,c)|0;i=d;return c|0}function VF(a,b,c){a=a|0;b=+b;c=c|0;return xG(a,b,c)|0}function WF(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;switch(c|0){case 0:{d=yG(a,b,d)|0;return d|0}case 1:{d=zG(a,b,d)|0;return d|0}case 2:{d=AG(a,b,d)|0;return d|0}default:{d=2;return d|0}}return 0}function XF(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;switch(d|0){case 0:switch(c|0){case 0:{d=BG(a,b,e)|0;return d|0}case 1:{d=CG(a,b,e)|0;return d|0}case 2:{d=DG(a,b,e)|0;return d|0}default:{d=2;return d|0}}case 1:switch(c|0){case 0:{d=EG(a,b,e)|0;return d|0}case 1:{d=FG(a,b,e)|0;return d|0}case 2:{d=GG(a,b,e)|0;return d|0}default:{d=2;return d|0}}default:{d=2;return d|0}}return 0}function YF(a,b,c){a=a|0;b=b|0;c=c|0;return HG(a,b,c)|0}function ZF(a,b,c){a=a|0;b=b|0;c=c|0;return IG(a,b,c)|0}function _F(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0;d=i;i=i+16|0;e=d;lM(e,b);c=JG(a,e,c)|0;i=d;return c|0}function $F(a,b,c){a=a|0;b=b|0;c=c|0;return KG(a,b,c)|0}function aG(a,b,c){a=a|0;b=b|0;c=c|0;return LG(a,b,c)|0}function bG(a,b,c){a=a|0;b=b|0;c=c|0;return MG(a,b,c)|0}function cG(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0;d=i;i=i+16|0;e=d;lM(e,b);c=NG(a,e,c)|0;i=d;return c|0}function dG(a,b,c){a=a|0;b=b|0;c=c|0;return OG(a,b,c)|0}function eG(a,b,c){a=a|0;b=b|0;c=c|0;return PG(a,b,c)|0}function fG(a,b,c){a=a|0;b=b|0;c=c|0;return QG(a,b,c)|0}function gG(a,b,c){a=a|0;b=b|0;c=c|0;return RG(a,b,c)|0}function hG(a,b,c){a=a|0;b=b|0;c=c|0;return SG(a,b,c)|0}function iG(a,b,c){a=a|0;b=b|0;c=c|0;return TG(a,b,c)|0}function jG(a,b,c){a=a|0;b=b|0;c=c|0;return UG(a,b,c)|0}function kG(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,j=0,k=0;j=i;i=i+80|0;h=j+8|0;g=j+16|0;f=j;kM(b,-1,1);d=mG(d)|0;c[h>>2]=d;if(!d){i=j;return}k=d+((c[(c[d>>2]|0)+-12>>2]|0)+4)|0;e=(c[k>>2]|0)+1|0;c[k>>2]=e;if(!e)Ha(79054,79014,48,79068);k=c[(c[d>>2]|0)+-12>>2]|0;e=d+k|0;d=d+(k+4)|0;k=(c[d>>2]|0)+-1|0;c[d>>2]=k;if(!((e|0)==0|(k|0)!=0))oc[c[(c[e>>2]|0)+4>>2]&2047](e);d=c[10958]|0;c[g>>2]=d;c[g+(c[d+-16>>2]|0)>>2]=c[10959];d=g+4|0;k=c[10960]|0;c[d>>2]=k;c[d+(c[k+-16>>2]|0)>>2]=c[10961];k=g+8|0;d=c[10962]|0;c[k>>2]=d;c[k+(c[d+-16>>2]|0)>>2]=c[10963];c[g>>2]=1360;c[g+4>>2]=1428;c[g+8>>2]=1460;kM(g+12|0,0,1);kM(g+20|0,0,1);kM(g+28|0,0,1);kM(g+40|0,0,1);c[g+52>>2]=12880;d=g+56|0;c[d>>2]=0;a[g+60>>0]=0;c[d>>2]=g+(c[(c[g>>2]|0)+-16>>2]|0);fU(f,g,h);rM(b,f)|0;d=c[h>>2]|0;if(!d){i=j;return}h=c[(c[d>>2]|0)+-12>>2]|0;e=d+h|0;h=d+(h+4)|0;k=(c[h>>2]|0)+-1|0;c[h>>2]=k;if((e|0)==0|(k|0)!=0){i=j;return}oc[c[(c[e>>2]|0)+4>>2]&2047](e);i=j;return}function lG(a){a=a|0;var b=0,d=0,e=0;b=mG(a)|0;if(!b){b=0;return b|0}d=b+((c[(c[b>>2]|0)+-12>>2]|0)+4)|0;a=(c[d>>2]|0)+1|0;c[d>>2]=a;if(!a)Ha(79054,79014,48,79068);e=c[(c[b>>2]|0)+-12>>2]|0;a=b+e|0;e=b+(e+4)|0;d=(c[e>>2]|0)+-1|0;c[e>>2]=d;if(!((a|0)==0|(d|0)!=0))oc[c[(c[a>>2]|0)+4>>2]&2047](a);d=c[(c[b>>2]|0)+-12>>2]|0;a=b+d|0;d=b+(d+4)|0;e=(c[d>>2]|0)+-1|0;c[d>>2]=e;if((a|0)==0|(e|0)!=0){e=1;return e|0}oc[c[(c[a>>2]|0)+4>>2]&2047](a);e=1;return e|0}function mG(a){a=a|0;var b=0,d=0,e=0,f=0;e=i;i=i+16|0;b=e;if(!a){d=0;i=e;return d|0}c[b>>2]=41892;f=b+4|0;c[f>>2]=0;d=pT(b,a)|0;c[b>>2]=41892;a=c[f>>2]|0;if(!a){f=d;i=e;return f|0}f=c[(c[a>>2]|0)+-12>>2]|0;b=a+f|0;a=a+(f+4)|0;f=(c[a>>2]|0)+-1|0;c[a>>2]=f;if((b|0)==0|(f|0)!=0){f=d;i=e;return f|0}oc[c[(c[b>>2]|0)+4>>2]&2047](b);f=d;i=e;return f|0}function nG(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0;j=a+40|0;b=c[j>>2]|0;i=a+36|0;e=c[i>>2]|0;k=b+-1+e|0;h=a+24|0;f=c[h>>2]|0;k=c[(c[f+(k>>>10<<2)>>2]|0)+((k&1023)<<2)>>2]|0;do if(k){l=k+((c[(c[k>>2]|0)+-12>>2]|0)+4)|0;b=(c[l>>2]|0)+1|0;c[l>>2]=b;if(!b)Ha(79054,79014,48,79068);else{d=c[j>>2]|0;break}}else d=b;while(0);b=d+-1+e|0;b=c[(c[f+(b>>>10<<2)>>2]|0)+((b&1023)<<2)>>2]|0;if((b|0)!=0?(d=c[(c[b>>2]|0)+-12>>2]|0,g=b+d|0,d=b+(d+4)|0,l=(c[d>>2]|0)+-1|0,c[d>>2]=l,!((g|0)==0|(l|0)!=0)):0){oc[c[(c[g>>2]|0)+4>>2]&2047](g);f=c[h>>2]|0;e=c[i>>2]|0}l=c[j>>2]|0;c[j>>2]=l+-1;b=a+28|0;d=c[b>>2]|0;if((1-e-l+((d|0)==(f|0)?0:(d-f<<8)+-1|0)|0)>>>0<=2047)return k|0;P_(c[d+-4>>2]|0);c[b>>2]=(c[b>>2]|0)+-4;return k|0}function oG(a,b){a=a|0;b=b|0;var d=0,e=0;if(!b)return;oG(a,c[b>>2]|0);oG(a,c[b+4>>2]|0);a=c[b+16>>2]|0;if((a|0)!=0?(e=c[(c[a>>2]|0)+-12>>2]|0,d=a+e|0,e=a+(e+4)|0,a=(c[e>>2]|0)+-1|0,c[e>>2]=a,!((d|0)==0|(a|0)!=0)):0)oc[c[(c[d>>2]|0)+4>>2]&2047](d);P_(b);return}function pG(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0;i=a+4|0;b=c[i>>2]|0;k=a+16|0;d=c[k>>2]|0;e=b+(d>>>10<<2)|0;j=a+8|0;if((c[j>>2]|0)==(b|0)){g=0;f=a+20|0;b=0}else{f=a+20|0;g=d+(c[f>>2]|0)|0;g=(c[b+(g>>>10<<2)>>2]|0)+((g&1023)<<2)|0;b=(c[e>>2]|0)+((d&1023)<<2)|0}d=e;a:while(1){do{if((b|0)==(g|0))break a;a=c[b>>2]|0;if((a|0)!=0?(e=c[(c[a>>2]|0)+-12>>2]|0,h=a+e|0,a=a+(e+4)|0,e=(c[a>>2]|0)+-1|0,c[a>>2]=e,!((h|0)==0|(e|0)!=0)):0)oc[c[(c[h>>2]|0)+4>>2]&2047](h);b=b+4|0}while((b-(c[d>>2]|0)|0)!=4096);e=d+4|0;b=c[e>>2]|0;d=e}c[f>>2]=0;a=c[i>>2]|0;b=(c[j>>2]|0)-a>>2;if(b>>>0>2)do{P_(c[a>>2]|0);a=(c[i>>2]|0)+4|0;c[i>>2]=a;b=(c[j>>2]|0)-a>>2}while(b>>>0>2);switch(b|0){case 1:{c[k>>2]=512;return}case 2:{c[k>>2]=1024;return}default:return}}function qG(b){b=b|0;var d=0,e=0,f=0;f=c[11002]|0;c[b>>2]=f;c[b+(c[f+-16>>2]|0)>>2]=c[11003];f=b+4|0;d=c[11004]|0;c[f>>2]=d;c[f+(c[d+-16>>2]|0)>>2]=c[11005];d=b+8|0;e=c[11006]|0;c[d>>2]=e;c[d+(c[e+-16>>2]|0)>>2]=c[11007];e=c[11001]|0;c[b>>2]=e;c[b+(c[e+-16>>2]|0)>>2]=c[11008];c[f>>2]=c[11009];c[d>>2]=c[11010];kM(b+12|0,0,1);kM(b+20|0,0,1);kM(b+28|0,0,1);kM(b+40|0,0,1);c[b+52>>2]=12880;d=b+56|0;c[d>>2]=0;a[b+60>>0]=0;c[d>>2]=b+(c[(c[b>>2]|0)+-16>>2]|0);c[b>>2]=43884;c[b+4>>2]=43952;c[b+8>>2]=43984;kM(b+64|0,0,1);d=b+88|0;f=c[10951]|0;c[d>>2]=f;c[d+(c[f+-16>>2]|0)>>2]=c[10952];f=b+92|0;e=c[10953]|0;c[f>>2]=e;c[f+(c[e+-16>>2]|0)>>2]=c[10954];c[d>>2]=43744;c[b+92>>2]=43784;c[b+96>>2]=12880;a[b+104>>0]=0;c[b+100>>2]=d+(c[10932]|0);return}function rG(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0;x=i;i=i+96|0;p=x+80|0;w=x+8|0;u=x+4|0;s=x+12|0;q=x;t=mG(b)|0;c[w>>2]=t;b=mG(d)|0;c[u>>2]=b;if(t)if(!b)f=2;else{o=s+4|0;c[s>>2]=33388;g=c[9602]|0;c[o>>2]=g;c[o+(c[g+-16>>2]|0)>>2]=c[9603];g=s+8|0;h=c[9604]|0;c[g>>2]=h;c[g+(c[h+-16>>2]|0)>>2]=c[9605];h=s+12|0;j=c[9606]|0;c[h>>2]=j;c[h+(c[j+-16>>2]|0)>>2]=c[9607];j=s+16|0;k=c[9608]|0;c[j>>2]=k;c[j+(c[k+-16>>2]|0)>>2]=c[9609];k=s+20|0;l=c[9610]|0;c[k>>2]=l;c[k+(c[l+-16>>2]|0)>>2]=c[9611];l=c[9601]|0;c[o>>2]=l;m=c[9612]|0;n=l+-16|0;c[o+(c[n>>2]|0)>>2]=m;t=s+24|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;c[t+20>>2]=0;c[s>>2]=38156;c[s+4>>2]=38196;c[s+8>>2]=38288;c[s+12>>2]=38320;c[s+16>>2]=38352;c[s+20>>2]=38384;c[s+56>>2]=12880;a[s+64>>0]=0;c[s+60>>2]=s+(c[9536]|0);b=DM(s,w,u)|0;d=c[w>>2]|0;if((d|0)!=(b|0)){if((b|0)!=0?(z=b+((c[(c[b>>2]|0)+-12>>2]|0)+4)|0,y=(c[z>>2]|0)+1|0,c[z>>2]=y,(y|0)==0):0)Ha(79054,79014,48,79068);if((d|0)!=0?(y=c[(c[d>>2]|0)+-12>>2]|0,f=d+y|0,y=d+(y+4)|0,z=(c[y>>2]|0)+-1|0,c[y>>2]=z,!((f|0)==0|(z|0)!=0)):0)oc[c[(c[f>>2]|0)+4>>2]&2047](f);c[w>>2]=b}do if(b){y=c[(c[b>>2]|0)+-12>>2]|0;d=b+y|0;y=b+(y+4)|0;z=(c[y>>2]|0)+-1|0;c[y>>2]=z;if(!((d|0)==0|(z|0)!=0)){oc[c[(c[d>>2]|0)+4>>2]&2047](d);b=c[w>>2]|0;if(!b){f=3;break}}c[q>>2]=b;y=b+((c[(c[b>>2]|0)+-12>>2]|0)+4)|0;z=(c[y>>2]|0)+1|0;c[y>>2]=z;if(!z)Ha(79054,79014,48,79068);b=rd(e,q)|0;c[p>>2]=S2(b+(c[(c[b>>2]|0)+-12>>2]|0)|0)|0;z=o8(p,54552)|0;z=zc[c[(c[z>>2]|0)+28>>2]&255](z,10)|0;m8(p);R3(b,z)|0;B3(b)|0;b=c[q>>2]|0;if((b|0)!=0?(y=c[(c[b>>2]|0)+-12>>2]|0,r=b+y|0,y=b+(y+4)|0,z=(c[y>>2]|0)+-1|0,c[y>>2]=z,!((r|0)==0|(z|0)!=0)):0){oc[c[(c[r>>2]|0)+4>>2]&2047](r);f=0}else f=0}else f=3;while(0);c[o>>2]=l;c[o+(c[n>>2]|0)>>2]=m;c[g>>2]=c[9613];c[h>>2]=c[9614];c[j>>2]=c[9615];c[k>>2]=c[9616];pG(t);g=s+28|0;b=c[g>>2]|0;h=s+32|0;d=c[h>>2]|0;if((b|0)!=(d|0)){do{P_(c[b>>2]|0);b=b+4|0}while((b|0)!=(d|0));b=c[g>>2]|0;d=c[h>>2]|0;if((d|0)!=(b|0))c[h>>2]=d+(~((d+-4-b|0)>>>2)<<2)}b=c[t>>2]|0;if(b)P_(b);b=c[u>>2]|0;g=26}else{f=2;g=26}if((g|0)==26)if((b|0)!=0?(y=c[(c[b>>2]|0)+-12>>2]|0,v=b+y|0,y=b+(y+4)|0,z=(c[y>>2]|0)+-1|0,c[y>>2]=z,!((v|0)==0|(z|0)!=0)):0)oc[c[(c[v>>2]|0)+4>>2]&2047](v);b=c[w>>2]|0;if(!b){i=x;return f|0}y=c[(c[b>>2]|0)+-12>>2]|0;d=b+y|0;y=b+(y+4)|0;z=(c[y>>2]|0)+-1|0;c[y>>2]=z;if((d|0)==0|(z|0)!=0){i=x;return f|0}oc[c[(c[d>>2]|0)+4>>2]&2047](d);i=x;return f|0}function sG(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0;u=i;i=i+80|0;q=u+72|0;t=u;r=u+4|0;b=mG(b)|0;c[t>>2]=b;if(!b){t=2;i=u;return t|0}o=b+((c[(c[b>>2]|0)+-12>>2]|0)+4)|0;s=(c[o>>2]|0)+1|0;c[o>>2]=s;if(!s)Ha(79054,79014,48,79068);o=c[(c[b>>2]|0)+-12>>2]|0;f=b+o|0;o=b+(o+4)|0;s=(c[o>>2]|0)+-1|0;c[o>>2]=s;if(!((f|0)==0|(s|0)!=0))oc[c[(c[f>>2]|0)+4>>2]&2047](f);g=r+4|0;c[r>>2]=33388;h=c[9602]|0;c[g>>2]=h;c[g+(c[h+-16>>2]|0)>>2]=c[9603];h=r+8|0;j=c[9604]|0;c[h>>2]=j;c[h+(c[j+-16>>2]|0)>>2]=c[9605];j=r+12|0;k=c[9606]|0;c[j>>2]=k;c[j+(c[k+-16>>2]|0)>>2]=c[9607];k=r+16|0;l=c[9608]|0;c[k>>2]=l;c[k+(c[l+-16>>2]|0)>>2]=c[9609];l=r+20|0;m=c[9610]|0;c[l>>2]=m;c[l+(c[m+-16>>2]|0)>>2]=c[9611];m=c[9601]|0;c[g>>2]=m;n=c[9612]|0;o=m+-16|0;c[g+(c[o>>2]|0)>>2]=n;s=r+24|0;c[s>>2]=0;c[s+4>>2]=0;c[s+8>>2]=0;c[s+12>>2]=0;c[s+16>>2]=0;c[s+20>>2]=0;c[r>>2]=38156;c[r+4>>2]=38196;c[r+8>>2]=38288;c[r+12>>2]=38320;c[r+16>>2]=38352;c[r+20>>2]=38384;c[r+56>>2]=12880;a[r+64>>0]=0;c[r+60>>2]=r+(c[9536]|0);f=CM(r,t,d)|0;b=c[t>>2]|0;if((b|0)!=(f|0)){if((f|0)!=0?(v=f+((c[(c[f>>2]|0)+-12>>2]|0)+4)|0,d=(c[v>>2]|0)+1|0,c[v>>2]=d,(d|0)==0):0)Ha(79054,79014,48,79068);if((b|0)!=0?(d=c[(c[b>>2]|0)+-12>>2]|0,p=b+d|0,d=b+(d+4)|0,v=(c[d>>2]|0)+-1|0,c[d>>2]=v,!((p|0)==0|(v|0)!=0)):0)oc[c[(c[p>>2]|0)+4>>2]&2047](p);c[t>>2]=f}do if(!f)p=3;else{p=c[(c[f>>2]|0)+-12>>2]|0;b=f+p|0;p=f+(p+4)|0;v=(c[p>>2]|0)+-1|0;c[p>>2]=v;if(!((b|0)==0|(v|0)!=0)?(oc[c[(c[b>>2]|0)+4>>2]&2047](b),(c[t>>2]|0)==0):0){p=3;break}p=rd(e,t)|0;c[q>>2]=S2(p+(c[(c[p>>2]|0)+-12>>2]|0)|0)|0;v=o8(q,54552)|0;v=zc[c[(c[v>>2]|0)+28>>2]&255](v,10)|0;m8(q);R3(p,v)|0;B3(p)|0;p=0}while(0);c[g>>2]=m;c[g+(c[o>>2]|0)>>2]=n;c[h>>2]=c[9613];c[j>>2]=c[9614];c[k>>2]=c[9615];c[l>>2]=c[9616];pG(s);d=r+28|0;b=c[d>>2]|0;g=r+32|0;f=c[g>>2]|0;if((b|0)!=(f|0)){do{P_(c[b>>2]|0);b=b+4|0}while((b|0)!=(f|0));b=c[d>>2]|0;f=c[g>>2]|0;if((f|0)!=(b|0))c[g>>2]=f+(~((f+-4-b|0)>>>2)<<2)}b=c[s>>2]|0;if(b)P_(b);b=c[t>>2]|0;if(!b){v=p;i=u;return v|0}t=c[(c[b>>2]|0)+-12>>2]|0;f=b+t|0;t=b+(t+4)|0;v=(c[t>>2]|0)+-1|0;c[t>>2]=v;if((f|0)==0|(v|0)!=0){v=p;i=u;return v|0}oc[c[(c[f>>2]|0)+4>>2]&2047](f);v=p;i=u;return v|0}function tG(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0;o=i;i=i+96|0;g=o+80|0;n=o+8|0;l=o+4|0;k=o+12|0;h=o;p=mG(a)|0;c[n>>2]=p;a=mG(b)|0;c[l>>2]=a;if(p)if(!a)e=2;else{oS(k);a=qS(k,n,l)|0;b=c[n>>2]|0;if((b|0)!=(a|0)){if((a|0)!=0?(f=a+((c[(c[a>>2]|0)+-12>>2]|0)+4)|0,p=(c[f>>2]|0)+1|0,c[f>>2]=p,(p|0)==0):0)Ha(79054,79014,48,79068);if((b|0)!=0?(f=c[(c[b>>2]|0)+-12>>2]|0,e=b+f|0,f=b+(f+4)|0,p=(c[f>>2]|0)+-1|0,c[f>>2]=p,!((e|0)==0|(p|0)!=0)):0)oc[c[(c[e>>2]|0)+4>>2]&2047](e);c[n>>2]=a}do if(a){f=c[(c[a>>2]|0)+-12>>2]|0;b=a+f|0;f=a+(f+4)|0;p=(c[f>>2]|0)+-1|0;c[f>>2]=p;if(!((b|0)==0|(p|0)!=0)){oc[c[(c[b>>2]|0)+4>>2]&2047](b);a=c[n>>2]|0;if(!a){e=3;break}}c[h>>2]=a;f=a+((c[(c[a>>2]|0)+-12>>2]|0)+4)|0;p=(c[f>>2]|0)+1|0;c[f>>2]=p;if(!p)Ha(79054,79014,48,79068);a=rd(d,h)|0;c[g>>2]=S2(a+(c[(c[a>>2]|0)+-12>>2]|0)|0)|0;p=o8(g,54552)|0;p=zc[c[(c[p>>2]|0)+28>>2]&255](p,10)|0;m8(g);R3(a,p)|0;B3(a)|0;a=c[h>>2]|0;if((a|0)!=0?(d=c[(c[a>>2]|0)+-12>>2]|0,j=a+d|0,d=a+(d+4)|0,p=(c[d>>2]|0)+-1|0,c[d>>2]=p,!((j|0)==0|(p|0)!=0)):0){oc[c[(c[j>>2]|0)+4>>2]&2047](j);e=0}else e=0}else e=3;while(0);f=k+4|0;h=c[10416]|0;c[f>>2]=h;c[f+(c[h+-16>>2]|0)>>2]=c[10427];c[k+8>>2]=c[10428];c[k+12>>2]=c[10429];c[k+16>>2]=c[10430];c[k+20>>2]=c[10431];h=k+24|0;pG(h);f=k+28|0;a=c[f>>2]|0;g=k+32|0;b=c[g>>2]|0;if((a|0)!=(b|0)){do{P_(c[a>>2]|0);a=a+4|0}while((a|0)!=(b|0));a=c[f>>2]|0;b=c[g>>2]|0;if((b|0)!=(a|0))c[g>>2]=b+(~((b+-4-a|0)>>>2)<<2)}a=c[h>>2]|0;if(a)P_(a);a=c[l>>2]|0;f=26}else{e=2;f=26}if((f|0)==26)if((a|0)!=0?(l=c[(c[a>>2]|0)+-12>>2]|0,m=a+l|0,l=a+(l+4)|0,p=(c[l>>2]|0)+-1|0,c[l>>2]=p,!((m|0)==0|(p|0)!=0)):0)oc[c[(c[m>>2]|0)+4>>2]&2047](m);a=c[n>>2]|0;if(!a){i=o;return e|0}n=c[(c[a>>2]|0)+-12>>2]|0;b=a+n|0;n=a+(n+4)|0;p=(c[n>>2]|0)+-1|0;c[n>>2]=p;if((b|0)==0|(p|0)!=0){i=o;return e|0}oc[c[(c[b>>2]|0)+4>>2]&2047](b);i=o;return e|0}function uG(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,j=0,k=0,l=0;k=i;i=i+80|0;g=k+72|0;j=k;h=k+4|0;a=mG(a)|0;c[j>>2]=a;if(!a){j=2;i=k;return j|0}l=a+((c[(c[a>>2]|0)+-12>>2]|0)+4)|0;e=(c[l>>2]|0)+1|0;c[l>>2]=e;if(!e)Ha(79054,79014,48,79068);l=c[(c[a>>2]|0)+-12>>2]|0;e=a+l|0;a=a+(l+4)|0;l=(c[a>>2]|0)+-1|0;c[a>>2]=l;if(!((e|0)==0|(l|0)!=0))oc[c[(c[e>>2]|0)+4>>2]&2047](e);oS(h);e=pS(h,j,b)|0;a=c[j>>2]|0;if((a|0)!=(e|0)){if((e|0)!=0?(b=e+((c[(c[e>>2]|0)+-12>>2]|0)+4)|0,l=(c[b>>2]|0)+1|0,c[b>>2]=l,(l|0)==0):0)Ha(79054,79014,48,79068);if((a|0)!=0?(b=c[(c[a>>2]|0)+-12>>2]|0,f=a+b|0,b=a+(b+4)|0,l=(c[b>>2]|0)+-1|0,c[b>>2]=l,!((f|0)==0|(l|0)!=0)):0)oc[c[(c[f>>2]|0)+4>>2]&2047](f);c[j>>2]=e}do if(!e)d=3;else{f=c[(c[e>>2]|0)+-12>>2]|0;a=e+f|0;f=e+(f+4)|0;l=(c[f>>2]|0)+-1|0;c[f>>2]=l;if(!((a|0)==0|(l|0)!=0)?(oc[c[(c[a>>2]|0)+4>>2]&2047](a),(c[j>>2]|0)==0):0){d=3;break}d=rd(d,j)|0;c[g>>2]=S2(d+(c[(c[d>>2]|0)+-12>>2]|0)|0)|0;l=o8(g,54552)|0;l=zc[c[(c[l>>2]|0)+28>>2]&255](l,10)|0;m8(g);R3(d,l)|0;B3(d)|0;d=0}while(0);b=h+4|0;g=c[10416]|0;c[b>>2]=g;c[b+(c[g+-16>>2]|0)>>2]=c[10427];c[h+8>>2]=c[10428];c[h+12>>2]=c[10429];c[h+16>>2]=c[10430];c[h+20>>2]=c[10431];g=h+24|0;pG(g);b=h+28|0;a=c[b>>2]|0;f=h+32|0;e=c[f>>2]|0;if((a|0)!=(e|0)){do{P_(c[a>>2]|0);a=a+4|0}while((a|0)!=(e|0));a=c[b>>2]|0;e=c[f>>2]|0;if((e|0)!=(a|0))c[f>>2]=e+(~((e+-4-a|0)>>>2)<<2)}a=c[g>>2]|0;if(a)P_(a);a=c[j>>2]|0;if(!a){l=d;i=k;return l|0}j=c[(c[a>>2]|0)+-12>>2]|0;e=a+j|0;j=a+(j+4)|0;l=(c[j>>2]|0)+-1|0;c[j>>2]=l;if((e|0)==0|(l|0)!=0){l=d;i=k;return l|0}oc[c[(c[e>>2]|0)+4>>2]&2047](e);l=d;i=k;return l|0}function vG(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0;o=i;i=i+304|0;g=o+288|0;n=o+8|0;l=o+4|0;k=o+16|0;h=o;p=mG(a)|0;c[n>>2]=p;a=mG(b)|0;c[l>>2]=a;if(p)if(!a)e=2;else{XM(k);a=_M(k,n,l)|0;b=c[n>>2]|0;if((b|0)!=(a|0)){if((a|0)!=0?(f=a+((c[(c[a>>2]|0)+-12>>2]|0)+4)|0,p=(c[f>>2]|0)+1|0,c[f>>2]=p,(p|0)==0):0)Ha(79054,79014,48,79068);if((b|0)!=0?(f=c[(c[b>>2]|0)+-12>>2]|0,e=b+f|0,f=b+(f+4)|0,p=(c[f>>2]|0)+-1|0,c[f>>2]=p,!((e|0)==0|(p|0)!=0)):0)oc[c[(c[e>>2]|0)+4>>2]&2047](e);c[n>>2]=a}do if(a){f=c[(c[a>>2]|0)+-12>>2]|0;b=a+f|0;f=a+(f+4)|0;p=(c[f>>2]|0)+-1|0;c[f>>2]=p;if(!((b|0)==0|(p|0)!=0)){oc[c[(c[b>>2]|0)+4>>2]&2047](b);a=c[n>>2]|0;if(!a){e=3;break}}c[h>>2]=a;f=a+((c[(c[a>>2]|0)+-12>>2]|0)+4)|0;p=(c[f>>2]|0)+1|0;c[f>>2]=p;if(!p)Ha(79054,79014,48,79068);a=rd(d,h)|0;c[g>>2]=S2(a+(c[(c[a>>2]|0)+-12>>2]|0)|0)|0;p=o8(g,54552)|0;p=zc[c[(c[p>>2]|0)+28>>2]&255](p,10)|0;m8(g);R3(a,p)|0;B3(a)|0;a=c[h>>2]|0;if((a|0)!=0?(d=c[(c[a>>2]|0)+-12>>2]|0,j=a+d|0,d=a+(d+4)|0,p=(c[d>>2]|0)+-1|0,c[d>>2]=p,!((j|0)==0|(p|0)!=0)):0){oc[c[(c[j>>2]|0)+4>>2]&2047](j);e=0}else e=0}else e=3;while(0);f=k+4|0;h=c[9689]|0;c[f>>2]=h;c[f+(c[h+-16>>2]|0)>>2]=c[9700];c[k+8>>2]=c[9701];c[k+12>>2]=c[9702];c[k+16>>2]=c[9703];c[k+20>>2]=c[9704];h=k+24|0;pG(h);f=k+28|0;a=c[f>>2]|0;g=k+32|0;b=c[g>>2]|0;if((a|0)!=(b|0)){do{P_(c[a>>2]|0);a=a+4|0}while((a|0)!=(b|0));a=c[f>>2]|0;b=c[g>>2]|0;if((b|0)!=(a|0))c[g>>2]=b+(~((b+-4-a|0)>>>2)<<2)}a=c[h>>2]|0;if(a)P_(a);a=c[l>>2]|0;f=26}else{e=2;f=26}if((f|0)==26)if((a|0)!=0?(l=c[(c[a>>2]|0)+-12>>2]|0,m=a+l|0,l=a+(l+4)|0,p=(c[l>>2]|0)+-1|0,c[l>>2]=p,!((m|0)==0|(p|0)!=0)):0)oc[c[(c[m>>2]|0)+4>>2]&2047](m);a=c[n>>2]|0;if(!a){i=o;return e|0}n=c[(c[a>>2]|0)+-12>>2]|0;b=a+n|0;n=a+(n+4)|0;p=(c[n>>2]|0)+-1|0;c[n>>2]=p;if((b|0)==0|(p|0)!=0){i=o;return e|0}oc[c[(c[b>>2]|0)+4>>2]&2047](b);i=o;return e|0}function wG(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,j=0,k=0,l=0;k=i;i=i+288|0;g=k+280|0;j=k;h=k+8|0;a=mG(a)|0;c[j>>2]=a;if(!a){j=2;i=k;return j|0}l=a+((c[(c[a>>2]|0)+-12>>2]|0)+4)|0;e=(c[l>>2]|0)+1|0;c[l>>2]=e;if(!e)Ha(79054,79014,48,79068);l=c[(c[a>>2]|0)+-12>>2]|0;e=a+l|0;a=a+(l+4)|0;l=(c[a>>2]|0)+-1|0;c[a>>2]=l;if(!((e|0)==0|(l|0)!=0))oc[c[(c[e>>2]|0)+4>>2]&2047](e);XM(h);e=ZM(h,j,b)|0;a=c[j>>2]|0;if((a|0)!=(e|0)){if((e|0)!=0?(b=e+((c[(c[e>>2]|0)+-12>>2]|0)+4)|0,l=(c[b>>2]|0)+1|0,c[b>>2]=l,(l|0)==0):0)Ha(79054,79014,48,79068);if((a|0)!=0?(b=c[(c[a>>2]|0)+-12>>2]|0,f=a+b|0,b=a+(b+4)|0,l=(c[b>>2]|0)+-1|0,c[b>>2]=l,!((f|0)==0|(l|0)!=0)):0)oc[c[(c[f>>2]|0)+4>>2]&2047](f);c[j>>2]=e}do if(!e)d=3;else{f=c[(c[e>>2]|0)+-12>>2]|0;a=e+f|0;f=e+(f+4)|0;l=(c[f>>2]|0)+-1|0;c[f>>2]=l;if(!((a|0)==0|(l|0)!=0)?(oc[c[(c[a>>2]|0)+4>>2]&2047](a),(c[j>>2]|0)==0):0){d=3;break}d=rd(d,j)|0;c[g>>2]=S2(d+(c[(c[d>>2]|0)+-12>>2]|0)|0)|0;l=o8(g,54552)|0;l=zc[c[(c[l>>2]|0)+28>>2]&255](l,10)|0;m8(g);R3(d,l)|0;B3(d)|0;d=0}while(0);b=h+4|0;g=c[9689]|0;c[b>>2]=g;c[b+(c[g+-16>>2]|0)>>2]=c[9700];c[h+8>>2]=c[9701];c[h+12>>2]=c[9702];c[h+16>>2]=c[9703];c[h+20>>2]=c[9704];g=h+24|0;pG(g);b=h+28|0;a=c[b>>2]|0;f=h+32|0;e=c[f>>2]|0;if((a|0)!=(e|0)){do{P_(c[a>>2]|0);a=a+4|0}while((a|0)!=(e|0));a=c[b>>2]|0;e=c[f>>2]|0;if((e|0)!=(a|0))c[f>>2]=e+(~((e+-4-a|0)>>>2)<<2)}a=c[g>>2]|0;if(a)P_(a);a=c[j>>2]|0;if(!a){l=d;i=k;return l|0}j=c[(c[a>>2]|0)+-12>>2]|0;e=a+j|0;j=a+(j+4)|0;l=(c[j>>2]|0)+-1|0;c[j>>2]=l;if((e|0)==0|(l|0)!=0){l=d;i=k;return l|0}oc[c[(c[e>>2]|0)+4>>2]&2047](e);l=d;i=k;return l|0}function xG(a,b,d){a=a|0;b=+b;d=d|0;var e=0,f=0,g=0,h=0,j=0,k=0,l=0,m=0;l=i;i=i+288|0;g=l+280|0;k=l;j=l+8|0;a=mG(a)|0;c[k>>2]=a;if(!a){k=2;i=l;return k|0}e=a+((c[(c[a>>2]|0)+-12>>2]|0)+4)|0;h=(c[e>>2]|0)+1|0;c[e>>2]=h;if(!h)Ha(79054,79014,48,79068);h=c[(c[a>>2]|0)+-12>>2]|0;e=a+h|0;a=a+(h+4)|0;h=(c[a>>2]|0)+-1|0;c[a>>2]=h;if(!((e|0)==0|(h|0)!=0))oc[c[(c[e>>2]|0)+4>>2]&2047](e);XM(j);e=YM(j,k,b)|0;a=c[k>>2]|0;if((a|0)!=(e|0)){if((e|0)!=0?(m=e+((c[(c[e>>2]|0)+-12>>2]|0)+4)|0,h=(c[m>>2]|0)+1|0,c[m>>2]=h,(h|0)==0):0)Ha(79054,79014,48,79068);if((a|0)!=0?(h=c[(c[a>>2]|0)+-12>>2]|0,f=a+h|0,h=a+(h+4)|0,m=(c[h>>2]|0)+-1|0,c[h>>2]=m,!((f|0)==0|(m|0)!=0)):0)oc[c[(c[f>>2]|0)+4>>2]&2047](f);c[k>>2]=e}do if(!e)h=3;else{h=c[(c[e>>2]|0)+-12>>2]|0;a=e+h|0;h=e+(h+4)|0;m=(c[h>>2]|0)+-1|0;c[h>>2]=m;if(!((a|0)==0|(m|0)!=0)?(oc[c[(c[a>>2]|0)+4>>2]&2047](a),(c[k>>2]|0)==0):0){h=3;break}h=rd(d,k)|0;c[g>>2]=S2(h+(c[(c[h>>2]|0)+-12>>2]|0)|0)|0;m=o8(g,54552)|0;m=zc[c[(c[m>>2]|0)+28>>2]&255](m,10)|0;m8(g);R3(h,m)|0;B3(h)|0;h=0}while(0);f=j+4|0;d=c[9689]|0;c[f>>2]=d;c[f+(c[d+-16>>2]|0)>>2]=c[9700];c[j+8>>2]=c[9701];c[j+12>>2]=c[9702];c[j+16>>2]=c[9703];c[j+20>>2]=c[9704];d=j+24|0;pG(d);f=j+28|0;a=c[f>>2]|0;g=j+32|0;e=c[g>>2]|0;if((a|0)!=(e|0)){do{P_(c[a>>2]|0);a=a+4|0}while((a|0)!=(e|0));a=c[f>>2]|0;e=c[g>>2]|0;if((e|0)!=(a|0))c[g>>2]=e+(~((e+-4-a|0)>>>2)<<2)}a=c[d>>2]|0;if(a)P_(a);a=c[k>>2]|0;if(!a){m=h;i=l;return m|0}k=c[(c[a>>2]|0)+-12>>2]|0;e=a+k|0;k=a+(k+4)|0;m=(c[k>>2]|0)+-1|0;c[k>>2]=m;if((e|0)==0|(m|0)!=0){m=h;i=l;return m|0}oc[c[(c[e>>2]|0)+4>>2]&2047](e);m=h;i=l;return m|0}function yG(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0;q=i;i=i+112|0;h=q+104|0;g=q+8|0;f=q+4|0;n=q+12|0;j=q;e=mG(a)|0;c[g>>2]=e;o=mG(b)|0;c[f>>2]=o;if(e)if(!o)b=2;else{b=n+4|0;c[b>>2]=33408;HP(n,37752);c[n>>2]=37880;c[b>>2]=37924;c[n+8>>2]=38016;c[n+12>>2]=38048;c[n+16>>2]=38080;c[n+20>>2]=38112;b=SL(n,g,f)|0;if((e|0)!=(b|0)){if((b|0)!=0?(f=b+((c[(c[b>>2]|0)+-12>>2]|0)+4)|0,m=(c[f>>2]|0)+1|0,c[f>>2]=m,(m|0)==0):0)Ha(79054,79014,48,79068);f=c[(c[e>>2]|0)+-12>>2]|0;a=e+f|0;f=e+(f+4)|0;m=(c[f>>2]|0)+-1|0;c[f>>2]=m;if(!((a|0)==0|(m|0)!=0))oc[c[(c[a>>2]|0)+4>>2]&2047](a);c[g>>2]=b;e=b}if((b|0)!=0?(g=c[(c[b>>2]|0)+-12>>2]|0,k=b+g|0,g=b+(g+4)|0,m=(c[g>>2]|0)+-1|0,c[g>>2]=m,!((k|0)==0|(m|0)!=0)):0)oc[c[(c[k>>2]|0)+4>>2]&2047](k);if(e){c[j>>2]=e;k=e+((c[(c[e>>2]|0)+-12>>2]|0)+4)|0;m=(c[k>>2]|0)+1|0;c[k>>2]=m;if(!m)Ha(79054,79014,48,79068);a=rd(d,j)|0;c[h>>2]=S2(a+(c[(c[a>>2]|0)+-12>>2]|0)|0)|0;m=o8(h,54552)|0;m=zc[c[(c[m>>2]|0)+28>>2]&255](m,10)|0;m8(h);R3(a,m)|0;B3(a)|0;a=c[j>>2]|0;if((a|0)!=0?(d=c[(c[a>>2]|0)+-12>>2]|0,l=a+d|0,d=a+(d+4)|0,m=(c[d>>2]|0)+-1|0,c[d>>2]=m,!((l|0)==0|(m|0)!=0)):0){oc[c[(c[l>>2]|0)+4>>2]&2047](l);j=0}else j=0}else j=3;c[n+4>>2]=1136;c[n+8>>2]=1228;c[n+12>>2]=1260;c[n+16>>2]=1292;c[n+20>>2]=1324;h=n+24|0;pG(h);f=n+28|0;a=c[f>>2]|0;g=n+32|0;b=c[g>>2]|0;if((a|0)!=(b|0)){do{P_(c[a>>2]|0);a=a+4|0}while((a|0)!=(b|0));a=c[f>>2]|0;b=c[g>>2]|0;if((b|0)!=(a|0))c[g>>2]=b+(~((b+-4-a|0)>>>2)<<2)}a=c[h>>2]|0;if(a)P_(a);a=j;m=26}else{a=2;e=0;m=26}if((m|0)==26){if((o|0)!=0?(n=c[(c[o>>2]|0)+-12>>2]|0,p=o+n|0,n=o+(n+4)|0,o=(c[n>>2]|0)+-1|0,c[n>>2]=o,!((p|0)==0|(o|0)!=0)):0)oc[c[(c[p>>2]|0)+4>>2]&2047](p);if(!e){p=a;i=q;return p|0}else b=a}o=c[(c[e>>2]|0)+-12>>2]|0;a=e+o|0;o=e+(o+4)|0;p=(c[o>>2]|0)+-1|0;c[o>>2]=p;if((a|0)==0|(p|0)!=0){p=b;i=q;return p|0}oc[c[(c[a>>2]|0)+4>>2]&2047](a);p=b;i=q;return p|0}function zG(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0;q=i;i=i+144|0;h=q+128|0;g=q+8|0;f=q+4|0;n=q+12|0;j=q;e=mG(a)|0;c[g>>2]=e;o=mG(b)|0;c[f>>2]=o;if(e)if(!o)b=2;else{b=n+4|0;c[b>>2]=33408;HP(n,37340);c[n>>2]=37468;c[b>>2]=37512;c[n+8>>2]=37604;c[n+12>>2]=37636;c[n+16>>2]=37668;c[n+20>>2]=37700;c[n+84>>2]=37724;c[n+100>>2]=37724;b=vL(n,g,f)|0;if((e|0)!=(b|0)){if((b|0)!=0?(f=b+((c[(c[b>>2]|0)+-12>>2]|0)+4)|0,m=(c[f>>2]|0)+1|0,c[f>>2]=m,(m|0)==0):0)Ha(79054,79014,48,79068);f=c[(c[e>>2]|0)+-12>>2]|0;a=e+f|0;f=e+(f+4)|0;m=(c[f>>2]|0)+-1|0;c[f>>2]=m;if(!((a|0)==0|(m|0)!=0))oc[c[(c[a>>2]|0)+4>>2]&2047](a);c[g>>2]=b;e=b}if((b|0)!=0?(g=c[(c[b>>2]|0)+-12>>2]|0,k=b+g|0,g=b+(g+4)|0,m=(c[g>>2]|0)+-1|0,c[g>>2]=m,!((k|0)==0|(m|0)!=0)):0)oc[c[(c[k>>2]|0)+4>>2]&2047](k);if(e){c[j>>2]=e;k=e+((c[(c[e>>2]|0)+-12>>2]|0)+4)|0;m=(c[k>>2]|0)+1|0;c[k>>2]=m;if(!m)Ha(79054,79014,48,79068);a=rd(d,j)|0;c[h>>2]=S2(a+(c[(c[a>>2]|0)+-12>>2]|0)|0)|0;m=o8(h,54552)|0;m=zc[c[(c[m>>2]|0)+28>>2]&255](m,10)|0;m8(h);R3(a,m)|0;B3(a)|0;a=c[j>>2]|0;if((a|0)!=0?(d=c[(c[a>>2]|0)+-12>>2]|0,l=a+d|0,d=a+(d+4)|0,m=(c[d>>2]|0)+-1|0,c[d>>2]=m,!((l|0)==0|(m|0)!=0)):0){oc[c[(c[l>>2]|0)+4>>2]&2047](l);j=0}else j=0}else j=3;c[n+4>>2]=1136;c[n+8>>2]=1228;c[n+12>>2]=1260;c[n+16>>2]=1292;c[n+20>>2]=1324;h=n+24|0;pG(h);f=n+28|0;a=c[f>>2]|0;g=n+32|0;b=c[g>>2]|0;if((a|0)!=(b|0)){do{P_(c[a>>2]|0);a=a+4|0}while((a|0)!=(b|0));a=c[f>>2]|0;b=c[g>>2]|0;if((b|0)!=(a|0))c[g>>2]=b+(~((b+-4-a|0)>>>2)<<2)}a=c[h>>2]|0;if(a)P_(a);a=j;m=26}else{a=2;e=0;m=26}if((m|0)==26){if((o|0)!=0?(n=c[(c[o>>2]|0)+-12>>2]|0,p=o+n|0,n=o+(n+4)|0,o=(c[n>>2]|0)+-1|0,c[n>>2]=o,!((p|0)==0|(o|0)!=0)):0)oc[c[(c[p>>2]|0)+4>>2]&2047](p);if(!e){p=a;i=q;return p|0}else b=a}o=c[(c[e>>2]|0)+-12>>2]|0;a=e+o|0;o=e+(o+4)|0;p=(c[o>>2]|0)+-1|0;c[o>>2]=p;if((a|0)==0|(p|0)!=0){p=b;i=q;return p|0}oc[c[(c[a>>2]|0)+4>>2]&2047](a);p=b;i=q;return p|0}function AG(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0;r=i;i=i+144|0;j=r+136|0;h=r+8|0;g=r+4|0;o=r+12|0;k=r;f=mG(b)|0;c[h>>2]=f;p=mG(d)|0;c[g>>2]=p;if(f)if(!p)d=2;else{d=o+4|0;c[d>>2]=33408;HP(o,36928);c[o>>2]=37056;c[d>>2]=37100;c[o+8>>2]=37192;c[o+12>>2]=37224;c[o+16>>2]=37256;c[o+20>>2]=37288;c[o+84>>2]=37312;a[o+100>>0]=1;c[o+104>>2]=37312;a[o+120>>0]=1;d=OK(o,h,g)|0;if((f|0)!=(d|0)){if((d|0)!=0?(g=d+((c[(c[d>>2]|0)+-12>>2]|0)+4)|0,n=(c[g>>2]|0)+1|0,c[g>>2]=n,(n|0)==0):0)Ha(79054,79014,48,79068);g=c[(c[f>>2]|0)+-12>>2]|0;b=f+g|0;g=f+(g+4)|0;n=(c[g>>2]|0)+-1|0;c[g>>2]=n;if(!((b|0)==0|(n|0)!=0))oc[c[(c[b>>2]|0)+4>>2]&2047](b);c[h>>2]=d;f=d}if((d|0)!=0?(h=c[(c[d>>2]|0)+-12>>2]|0,l=d+h|0,h=d+(h+4)|0,n=(c[h>>2]|0)+-1|0,c[h>>2]=n,!((l|0)==0|(n|0)!=0)):0)oc[c[(c[l>>2]|0)+4>>2]&2047](l);if(f){c[k>>2]=f;l=f+((c[(c[f>>2]|0)+-12>>2]|0)+4)|0;n=(c[l>>2]|0)+1|0;c[l>>2]=n;if(!n)Ha(79054,79014,48,79068);b=rd(e,k)|0;c[j>>2]=S2(b+(c[(c[b>>2]|0)+-12>>2]|0)|0)|0;n=o8(j,54552)|0;n=zc[c[(c[n>>2]|0)+28>>2]&255](n,10)|0;m8(j);R3(b,n)|0;B3(b)|0;b=c[k>>2]|0;if((b|0)!=0?(e=c[(c[b>>2]|0)+-12>>2]|0,m=b+e|0,e=b+(e+4)|0,n=(c[e>>2]|0)+-1|0,c[e>>2]=n,!((m|0)==0|(n|0)!=0)):0){oc[c[(c[m>>2]|0)+4>>2]&2047](m);k=0}else k=0}else k=3;c[o+4>>2]=1136;c[o+8>>2]=1228;c[o+12>>2]=1260;c[o+16>>2]=1292;c[o+20>>2]=1324;j=o+24|0;pG(j);g=o+28|0;b=c[g>>2]|0;h=o+32|0;d=c[h>>2]|0;if((b|0)!=(d|0)){do{P_(c[b>>2]|0);b=b+4|0}while((b|0)!=(d|0));b=c[g>>2]|0;d=c[h>>2]|0;if((d|0)!=(b|0))c[h>>2]=d+(~((d+-4-b|0)>>>2)<<2)}b=c[j>>2]|0;if(b)P_(b);b=k;n=26}else{b=2;f=0;n=26}if((n|0)==26){if((p|0)!=0?(o=c[(c[p>>2]|0)+-12>>2]|0,q=p+o|0,o=p+(o+4)|0,p=(c[o>>2]|0)+-1|0,c[o>>2]=p,!((q|0)==0|(p|0)!=0)):0)oc[c[(c[q>>2]|0)+4>>2]&2047](q);if(!f){q=b;i=r;return q|0}else d=b}p=c[(c[f>>2]|0)+-12>>2]|0;b=f+p|0;p=f+(p+4)|0;q=(c[p>>2]|0)+-1|0;c[p>>2]=q;if((b|0)==0|(q|0)!=0){q=d;i=r;return q|0}oc[c[(c[b>>2]|0)+4>>2]&2047](b);q=d;i=r;return q|0}function BG(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0;o=i;i=i+112|0;g=o+104|0;n=o+8|0;l=o+4|0;k=o+12|0;h=o;p=mG(a)|0;c[n>>2]=p;a=mG(b)|0;c[l>>2]=a;if(p)if(!a)e=2;else{a=k+4|0;c[a>>2]=33408;xJ(k,36212,0);c[k>>2]=36368;c[a>>2]=36436;c[k+8>>2]=36528;c[k+12>>2]=36560;c[k+16>>2]=36592;c[k+20>>2]=36624;a=yJ(k,n,l)|0;b=c[n>>2]|0;if((b|0)!=(a|0)){if((a|0)!=0?(f=a+((c[(c[a>>2]|0)+-12>>2]|0)+4)|0,p=(c[f>>2]|0)+1|0,c[f>>2]=p,(p|0)==0):0)Ha(79054,79014,48,79068);if((b|0)!=0?(f=c[(c[b>>2]|0)+-12>>2]|0,e=b+f|0,f=b+(f+4)|0,p=(c[f>>2]|0)+-1|0,c[f>>2]=p,!((e|0)==0|(p|0)!=0)):0)oc[c[(c[e>>2]|0)+4>>2]&2047](e);c[n>>2]=a}do if(a){f=c[(c[a>>2]|0)+-12>>2]|0;b=a+f|0;f=a+(f+4)|0;p=(c[f>>2]|0)+-1|0;c[f>>2]=p;if(!((b|0)==0|(p|0)!=0)){oc[c[(c[b>>2]|0)+4>>2]&2047](b);a=c[n>>2]|0;if(!a){e=3;break}}c[h>>2]=a;f=a+((c[(c[a>>2]|0)+-12>>2]|0)+4)|0;p=(c[f>>2]|0)+1|0;c[f>>2]=p;if(!p)Ha(79054,79014,48,79068);a=rd(d,h)|0;c[g>>2]=S2(a+(c[(c[a>>2]|0)+-12>>2]|0)|0)|0;p=o8(g,54552)|0;p=zc[c[(c[p>>2]|0)+28>>2]&255](p,10)|0;m8(g);R3(a,p)|0;B3(a)|0;a=c[h>>2]|0;if((a|0)!=0?(d=c[(c[a>>2]|0)+-12>>2]|0,j=a+d|0,d=a+(d+4)|0,p=(c[d>>2]|0)+-1|0,c[d>>2]=p,!((j|0)==0|(p|0)!=0)):0){oc[c[(c[j>>2]|0)+4>>2]&2047](j);e=0}else e=0}else e=3;while(0);c[k+4>>2]=1136;c[k+8>>2]=1228;c[k+12>>2]=1260;c[k+16>>2]=1292;c[k+20>>2]=1324;h=k+24|0;pG(h);f=k+28|0;a=c[f>>2]|0;g=k+32|0;b=c[g>>2]|0;if((a|0)!=(b|0)){do{P_(c[a>>2]|0);a=a+4|0}while((a|0)!=(b|0));a=c[f>>2]|0;b=c[g>>2]|0;if((b|0)!=(a|0))c[g>>2]=b+(~((b+-4-a|0)>>>2)<<2)}a=c[h>>2]|0;if(a)P_(a);a=c[l>>2]|0;f=26}else{e=2;f=26}if((f|0)==26)if((a|0)!=0?(l=c[(c[a>>2]|0)+-12>>2]|0,m=a+l|0,l=a+(l+4)|0,p=(c[l>>2]|0)+-1|0,c[l>>2]=p,!((m|0)==0|(p|0)!=0)):0)oc[c[(c[m>>2]|0)+4>>2]&2047](m);a=c[n>>2]|0;if(!a){i=o;return e|0}n=c[(c[a>>2]|0)+-12>>2]|0;b=a+n|0;n=a+(n+4)|0;p=(c[n>>2]|0)+-1|0;c[n>>2]=p;if((b|0)==0|(p|0)!=0){i=o;return e|0}oc[c[(c[b>>2]|0)+4>>2]&2047](b);i=o;return e|0}function CG(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0;o=i;i=i+144|0;g=o+128|0;n=o+8|0;l=o+4|0;k=o+12|0;h=o;p=mG(a)|0;c[n>>2]=p;a=mG(b)|0;c[l>>2]=a;if(p)if(!a)e=2;else{a=k+4|0;c[a>>2]=33408;MI(k,35496,0);c[k>>2]=35652;c[a>>2]=35720;c[k+8>>2]=35812;c[k+12>>2]=35844;c[k+16>>2]=35876;c[k+20>>2]=35908;a=NI(k,n,l)|0;b=c[n>>2]|0;if((b|0)!=(a|0)){if((a|0)!=0?(f=a+((c[(c[a>>2]|0)+-12>>2]|0)+4)|0,p=(c[f>>2]|0)+1|0,c[f>>2]=p,(p|0)==0):0)Ha(79054,79014,48,79068);if((b|0)!=0?(f=c[(c[b>>2]|0)+-12>>2]|0,e=b+f|0,f=b+(f+4)|0,p=(c[f>>2]|0)+-1|0,c[f>>2]=p,!((e|0)==0|(p|0)!=0)):0)oc[c[(c[e>>2]|0)+4>>2]&2047](e);c[n>>2]=a}do if(a){f=c[(c[a>>2]|0)+-12>>2]|0;b=a+f|0;f=a+(f+4)|0;p=(c[f>>2]|0)+-1|0;c[f>>2]=p;if(!((b|0)==0|(p|0)!=0)){oc[c[(c[b>>2]|0)+4>>2]&2047](b);a=c[n>>2]|0;if(!a){e=3;break}}c[h>>2]=a;f=a+((c[(c[a>>2]|0)+-12>>2]|0)+4)|0;p=(c[f>>2]|0)+1|0;c[f>>2]=p;if(!p)Ha(79054,79014,48,79068);a=rd(d,h)|0;c[g>>2]=S2(a+(c[(c[a>>2]|0)+-12>>2]|0)|0)|0;p=o8(g,54552)|0;p=zc[c[(c[p>>2]|0)+28>>2]&255](p,10)|0;m8(g);R3(a,p)|0;B3(a)|0;a=c[h>>2]|0;if((a|0)!=0?(d=c[(c[a>>2]|0)+-12>>2]|0,j=a+d|0,d=a+(d+4)|0,p=(c[d>>2]|0)+-1|0,c[d>>2]=p,!((j|0)==0|(p|0)!=0)):0){oc[c[(c[j>>2]|0)+4>>2]&2047](j);e=0}else e=0}else e=3;while(0);c[k+4>>2]=1136;c[k+8>>2]=1228;c[k+12>>2]=1260;c[k+16>>2]=1292;c[k+20>>2]=1324;h=k+24|0;pG(h);f=k+28|0;a=c[f>>2]|0;g=k+32|0;b=c[g>>2]|0;if((a|0)!=(b|0)){do{P_(c[a>>2]|0);a=a+4|0}while((a|0)!=(b|0));a=c[f>>2]|0;b=c[g>>2]|0;if((b|0)!=(a|0))c[g>>2]=b+(~((b+-4-a|0)>>>2)<<2)}a=c[h>>2]|0;if(a)P_(a);a=c[l>>2]|0;f=26}else{e=2;f=26}if((f|0)==26)if((a|0)!=0?(l=c[(c[a>>2]|0)+-12>>2]|0,m=a+l|0,l=a+(l+4)|0,p=(c[l>>2]|0)+-1|0,c[l>>2]=p,!((m|0)==0|(p|0)!=0)):0)oc[c[(c[m>>2]|0)+4>>2]&2047](m);a=c[n>>2]|0;if(!a){i=o;return e|0}n=c[(c[a>>2]|0)+-12>>2]|0;b=a+n|0;n=a+(n+4)|0;p=(c[n>>2]|0)+-1|0;c[n>>2]=p;if((b|0)==0|(p|0)!=0){i=o;return e|0}oc[c[(c[b>>2]|0)+4>>2]&2047](b);i=o;return e|0}function DG(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0;o=i;i=i+144|0;g=o+136|0;n=o+8|0;l=o+4|0;k=o+12|0;h=o;p=mG(a)|0;c[n>>2]=p;a=mG(b)|0;c[l>>2]=a;if(p)if(!a)e=2;else{a=k+4|0;c[a>>2]=33408;eH(k,34780,0);c[k>>2]=34936;c[a>>2]=35004;c[k+8>>2]=35096;c[k+12>>2]=35128;c[k+16>>2]=35160;c[k+20>>2]=35192;a=fH(k,n,l)|0;b=c[n>>2]|0;if((b|0)!=(a|0)){if((a|0)!=0?(f=a+((c[(c[a>>2]|0)+-12>>2]|0)+4)|0,p=(c[f>>2]|0)+1|0,c[f>>2]=p,(p|0)==0):0)Ha(79054,79014,48,79068);if((b|0)!=0?(f=c[(c[b>>2]|0)+-12>>2]|0,e=b+f|0,f=b+(f+4)|0,p=(c[f>>2]|0)+-1|0,c[f>>2]=p,!((e|0)==0|(p|0)!=0)):0)oc[c[(c[e>>2]|0)+4>>2]&2047](e);c[n>>2]=a}do if(a){f=c[(c[a>>2]|0)+-12>>2]|0;b=a+f|0;f=a+(f+4)|0;p=(c[f>>2]|0)+-1|0;c[f>>2]=p;if(!((b|0)==0|(p|0)!=0)){oc[c[(c[b>>2]|0)+4>>2]&2047](b);a=c[n>>2]|0;if(!a){e=3;break}}c[h>>2]=a;f=a+((c[(c[a>>2]|0)+-12>>2]|0)+4)|0;p=(c[f>>2]|0)+1|0;c[f>>2]=p;if(!p)Ha(79054,79014,48,79068);a=rd(d,h)|0;c[g>>2]=S2(a+(c[(c[a>>2]|0)+-12>>2]|0)|0)|0;p=o8(g,54552)|0;p=zc[c[(c[p>>2]|0)+28>>2]&255](p,10)|0;m8(g);R3(a,p)|0;B3(a)|0;a=c[h>>2]|0;if((a|0)!=0?(d=c[(c[a>>2]|0)+-12>>2]|0,j=a+d|0,d=a+(d+4)|0,p=(c[d>>2]|0)+-1|0,c[d>>2]=p,!((j|0)==0|(p|0)!=0)):0){oc[c[(c[j>>2]|0)+4>>2]&2047](j);e=0}else e=0}else e=3;while(0);c[k+4>>2]=1136;c[k+8>>2]=1228;c[k+12>>2]=1260;c[k+16>>2]=1292;c[k+20>>2]=1324;h=k+24|0;pG(h);f=k+28|0;a=c[f>>2]|0;g=k+32|0;b=c[g>>2]|0;if((a|0)!=(b|0)){do{P_(c[a>>2]|0);a=a+4|0}while((a|0)!=(b|0));a=c[f>>2]|0;b=c[g>>2]|0;if((b|0)!=(a|0))c[g>>2]=b+(~((b+-4-a|0)>>>2)<<2)}a=c[h>>2]|0;if(a)P_(a);a=c[l>>2]|0;f=26}else{e=2;f=26}if((f|0)==26)if((a|0)!=0?(l=c[(c[a>>2]|0)+-12>>2]|0,m=a+l|0,l=a+(l+4)|0,p=(c[l>>2]|0)+-1|0,c[l>>2]=p,!((m|0)==0|(p|0)!=0)):0)oc[c[(c[m>>2]|0)+4>>2]&2047](m);a=c[n>>2]|0;if(!a){i=o;return e|0}n=c[(c[a>>2]|0)+-12>>2]|0;b=a+n|0;n=a+(n+4)|0;p=(c[n>>2]|0)+-1|0;c[n>>2]=p;if((b|0)==0|(p|0)!=0){i=o;return e|0}oc[c[(c[b>>2]|0)+4>>2]&2047](b);i=o;return e|0}function EG(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0;o=i;i=i+112|0;g=o+104|0;n=o+8|0;l=o+4|0;k=o+12|0;h=o;p=mG(a)|0;c[n>>2]=p;a=mG(b)|0;c[l>>2]=a;if(p)if(!a)e=2;else{a=k+4|0;c[a>>2]=33408;xJ(k,34348,1);c[k>>2]=34504;c[a>>2]=34572;c[k+8>>2]=34664;c[k+12>>2]=34696;c[k+16>>2]=34728;c[k+20>>2]=34760;a=yJ(k,n,l)|0;b=c[n>>2]|0;if((b|0)!=(a|0)){if((a|0)!=0?(f=a+((c[(c[a>>2]|0)+-12>>2]|0)+4)|0,p=(c[f>>2]|0)+1|0,c[f>>2]=p,(p|0)==0):0)Ha(79054,79014,48,79068);if((b|0)!=0?(f=c[(c[b>>2]|0)+-12>>2]|0,e=b+f|0,f=b+(f+4)|0,p=(c[f>>2]|0)+-1|0,c[f>>2]=p,!((e|0)==0|(p|0)!=0)):0)oc[c[(c[e>>2]|0)+4>>2]&2047](e);c[n>>2]=a}do if(a){f=c[(c[a>>2]|0)+-12>>2]|0;b=a+f|0;f=a+(f+4)|0;p=(c[f>>2]|0)+-1|0;c[f>>2]=p;if(!((b|0)==0|(p|0)!=0)){oc[c[(c[b>>2]|0)+4>>2]&2047](b);a=c[n>>2]|0;if(!a){e=3;break}}c[h>>2]=a;f=a+((c[(c[a>>2]|0)+-12>>2]|0)+4)|0;p=(c[f>>2]|0)+1|0;c[f>>2]=p;if(!p)Ha(79054,79014,48,79068);a=rd(d,h)|0;c[g>>2]=S2(a+(c[(c[a>>2]|0)+-12>>2]|0)|0)|0;p=o8(g,54552)|0;p=zc[c[(c[p>>2]|0)+28>>2]&255](p,10)|0;m8(g);R3(a,p)|0;B3(a)|0;a=c[h>>2]|0;if((a|0)!=0?(d=c[(c[a>>2]|0)+-12>>2]|0,j=a+d|0,d=a+(d+4)|0,p=(c[d>>2]|0)+-1|0,c[d>>2]=p,!((j|0)==0|(p|0)!=0)):0){oc[c[(c[j>>2]|0)+4>>2]&2047](j);e=0}else e=0}else e=3;while(0);c[k+4>>2]=1136;c[k+8>>2]=1228;c[k+12>>2]=1260;c[k+16>>2]=1292;c[k+20>>2]=1324;h=k+24|0;pG(h);f=k+28|0;a=c[f>>2]|0;g=k+32|0;b=c[g>>2]|0;if((a|0)!=(b|0)){do{P_(c[a>>2]|0);a=a+4|0}while((a|0)!=(b|0));a=c[f>>2]|0;b=c[g>>2]|0;if((b|0)!=(a|0))c[g>>2]=b+(~((b+-4-a|0)>>>2)<<2)}a=c[h>>2]|0;if(a)P_(a);a=c[l>>2]|0;f=26}else{e=2;f=26}if((f|0)==26)if((a|0)!=0?(l=c[(c[a>>2]|0)+-12>>2]|0,m=a+l|0,l=a+(l+4)|0,p=(c[l>>2]|0)+-1|0,c[l>>2]=p,!((m|0)==0|(p|0)!=0)):0)oc[c[(c[m>>2]|0)+4>>2]&2047](m);a=c[n>>2]|0;if(!a){i=o;return e|0}n=c[(c[a>>2]|0)+-12>>2]|0;b=a+n|0;n=a+(n+4)|0;p=(c[n>>2]|0)+-1|0;c[n>>2]=p;if((b|0)==0|(p|0)!=0){i=o;return e|0}oc[c[(c[b>>2]|0)+4>>2]&2047](b);i=o;return e|0}function FG(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0;o=i;i=i+144|0;g=o+128|0;n=o+8|0;l=o+4|0;k=o+12|0;h=o;p=mG(a)|0;c[n>>2]=p;a=mG(b)|0;c[l>>2]=a;if(p)if(!a)e=2;else{a=k+4|0;c[a>>2]=33408;MI(k,33884,1);c[k>>2]=34040;c[a>>2]=34108;c[k+8>>2]=34200;c[k+12>>2]=34232;c[k+16>>2]=34264;c[k+20>>2]=34296;a=NI(k,n,l)|0;b=c[n>>2]|0;if((b|0)!=(a|0)){if((a|0)!=0?(f=a+((c[(c[a>>2]|0)+-12>>2]|0)+4)|0,p=(c[f>>2]|0)+1|0,c[f>>2]=p,(p|0)==0):0)Ha(79054,79014,48,79068);if((b|0)!=0?(f=c[(c[b>>2]|0)+-12>>2]|0,e=b+f|0,f=b+(f+4)|0,p=(c[f>>2]|0)+-1|0,c[f>>2]=p,!((e|0)==0|(p|0)!=0)):0)oc[c[(c[e>>2]|0)+4>>2]&2047](e);c[n>>2]=a}do if(a){f=c[(c[a>>2]|0)+-12>>2]|0;b=a+f|0;f=a+(f+4)|0;p=(c[f>>2]|0)+-1|0;c[f>>2]=p;if(!((b|0)==0|(p|0)!=0)){oc[c[(c[b>>2]|0)+4>>2]&2047](b);a=c[n>>2]|0;if(!a){e=3;break}}c[h>>2]=a;f=a+((c[(c[a>>2]|0)+-12>>2]|0)+4)|0;p=(c[f>>2]|0)+1|0;c[f>>2]=p;if(!p)Ha(79054,79014,48,79068);a=rd(d,h)|0;c[g>>2]=S2(a+(c[(c[a>>2]|0)+-12>>2]|0)|0)|0;p=o8(g,54552)|0;p=zc[c[(c[p>>2]|0)+28>>2]&255](p,10)|0;m8(g);R3(a,p)|0;B3(a)|0;a=c[h>>2]|0;if((a|0)!=0?(d=c[(c[a>>2]|0)+-12>>2]|0,j=a+d|0,d=a+(d+4)|0,p=(c[d>>2]|0)+-1|0,c[d>>2]=p,!((j|0)==0|(p|0)!=0)):0){oc[c[(c[j>>2]|0)+4>>2]&2047](j);e=0}else e=0}else e=3;while(0);c[k+4>>2]=1136;c[k+8>>2]=1228;c[k+12>>2]=1260;c[k+16>>2]=1292;c[k+20>>2]=1324;h=k+24|0;pG(h);f=k+28|0;a=c[f>>2]|0;g=k+32|0;b=c[g>>2]|0;if((a|0)!=(b|0)){do{P_(c[a>>2]|0);a=a+4|0}while((a|0)!=(b|0));a=c[f>>2]|0;b=c[g>>2]|0;if((b|0)!=(a|0))c[g>>2]=b+(~((b+-4-a|0)>>>2)<<2)}a=c[h>>2]|0;if(a)P_(a);a=c[l>>2]|0;f=26}else{e=2;f=26}if((f|0)==26)if((a|0)!=0?(l=c[(c[a>>2]|0)+-12>>2]|0,m=a+l|0,l=a+(l+4)|0,p=(c[l>>2]|0)+-1|0,c[l>>2]=p,!((m|0)==0|(p|0)!=0)):0)oc[c[(c[m>>2]|0)+4>>2]&2047](m);a=c[n>>2]|0;if(!a){i=o;return e|0}n=c[(c[a>>2]|0)+-12>>2]|0;b=a+n|0;n=a+(n+4)|0;p=(c[n>>2]|0)+-1|0;c[n>>2]=p;if((b|0)==0|(p|0)!=0){i=o;return e|0}oc[c[(c[b>>2]|0)+4>>2]&2047](b);i=o;return e|0}function GG(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0;o=i;i=i+144|0;g=o+136|0;n=o+8|0;l=o+4|0;k=o+12|0;h=o;p=mG(a)|0;c[n>>2]=p;a=mG(b)|0;c[l>>2]=a;if(p)if(!a)e=2;else{a=k+4|0;c[a>>2]=33408;eH(k,33420,1);c[k>>2]=33576;c[a>>2]=33644;c[k+8>>2]=33736;c[k+12>>2]=33768;c[k+16>>2]=33800;c[k+20>>2]=33832;a=fH(k,n,l)|0;b=c[n>>2]|0;if((b|0)!=(a|0)){if((a|0)!=0?(f=a+((c[(c[a>>2]|0)+-12>>2]|0)+4)|0,p=(c[f>>2]|0)+1|0,c[f>>2]=p,(p|0)==0):0)Ha(79054,79014,48,79068);if((b|0)!=0?(f=c[(c[b>>2]|0)+-12>>2]|0,e=b+f|0,f=b+(f+4)|0,p=(c[f>>2]|0)+-1|0,c[f>>2]=p,!((e|0)==0|(p|0)!=0)):0)oc[c[(c[e>>2]|0)+4>>2]&2047](e);c[n>>2]=a}do if(a){f=c[(c[a>>2]|0)+-12>>2]|0;b=a+f|0;f=a+(f+4)|0;p=(c[f>>2]|0)+-1|0;c[f>>2]=p;if(!((b|0)==0|(p|0)!=0)){oc[c[(c[b>>2]|0)+4>>2]&2047](b);a=c[n>>2]|0;if(!a){e=3;break}}c[h>>2]=a;f=a+((c[(c[a>>2]|0)+-12>>2]|0)+4)|0;p=(c[f>>2]|0)+1|0;c[f>>2]=p;if(!p)Ha(79054,79014,48,79068);a=rd(d,h)|0;c[g>>2]=S2(a+(c[(c[a>>2]|0)+-12>>2]|0)|0)|0;p=o8(g,54552)|0;p=zc[c[(c[p>>2]|0)+28>>2]&255](p,10)|0;m8(g);R3(a,p)|0;B3(a)|0;a=c[h>>2]|0;if((a|0)!=0?(d=c[(c[a>>2]|0)+-12>>2]|0,j=a+d|0,d=a+(d+4)|0,p=(c[d>>2]|0)+-1|0,c[d>>2]=p,!((j|0)==0|(p|0)!=0)):0){oc[c[(c[j>>2]|0)+4>>2]&2047](j);e=0}else e=0}else e=3;while(0);c[k+4>>2]=1136;c[k+8>>2]=1228;c[k+12>>2]=1260;c[k+16>>2]=1292;c[k+20>>2]=1324;h=k+24|0;pG(h);f=k+28|0;a=c[f>>2]|0;g=k+32|0;b=c[g>>2]|0;if((a|0)!=(b|0)){do{P_(c[a>>2]|0);a=a+4|0}while((a|0)!=(b|0));a=c[f>>2]|0;b=c[g>>2]|0;if((b|0)!=(a|0))c[g>>2]=b+(~((b+-4-a|0)>>>2)<<2)}a=c[h>>2]|0;if(a)P_(a);a=c[l>>2]|0;f=26}else{e=2;f=26}if((f|0)==26)if((a|0)!=0?(l=c[(c[a>>2]|0)+-12>>2]|0,m=a+l|0,l=a+(l+4)|0,p=(c[l>>2]|0)+-1|0,c[l>>2]=p,!((m|0)==0|(p|0)!=0)):0)oc[c[(c[m>>2]|0)+4>>2]&2047](m);a=c[n>>2]|0;if(!a){i=o;return e|0}n=c[(c[a>>2]|0)+-12>>2]|0;b=a+n|0;n=a+(n+4)|0;p=(c[n>>2]|0)+-1|0;c[n>>2]=p;if((b|0)==0|(p|0)!=0){i=o;return e|0}oc[c[(c[b>>2]|0)+4>>2]&2047](b);i=o;return e|0}function HG(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,j=0,k=0,l=0;k=i;i=i+64|0;g=k+56|0;j=k;h=k+8|0;a=mG(a)|0;c[j>>2]=a;if(!a){j=2;i=k;return j|0}l=a+((c[(c[a>>2]|0)+-12>>2]|0)+4)|0;e=(c[l>>2]|0)+1|0;c[l>>2]=e;if(!e)Ha(79054,79014,48,79068);l=c[(c[a>>2]|0)+-12>>2]|0;e=a+l|0;a=a+(l+4)|0;l=(c[a>>2]|0)+-1|0;c[a>>2]=l;if(!((e|0)==0|(l|0)!=0))oc[c[(c[e>>2]|0)+4>>2]&2047](e);MS(h);e=WS(h,j,b)|0;a=c[j>>2]|0;if((a|0)!=(e|0)){if((e|0)!=0?(b=e+((c[(c[e>>2]|0)+-12>>2]|0)+4)|0,l=(c[b>>2]|0)+1|0,c[b>>2]=l,(l|0)==0):0)Ha(79054,79014,48,79068);if((a|0)!=0?(b=c[(c[a>>2]|0)+-12>>2]|0,f=a+b|0,b=a+(b+4)|0,l=(c[b>>2]|0)+-1|0,c[b>>2]=l,!((f|0)==0|(l|0)!=0)):0)oc[c[(c[f>>2]|0)+4>>2]&2047](f);c[j>>2]=e}do if(!e)b=3;else{f=c[(c[e>>2]|0)+-12>>2]|0;a=e+f|0;f=e+(f+4)|0;l=(c[f>>2]|0)+-1|0;c[f>>2]=l;if(!((a|0)==0|(l|0)!=0)?(oc[c[(c[a>>2]|0)+4>>2]&2047](a),(c[j>>2]|0)==0):0){b=3;break}b=rd(d,j)|0;c[g>>2]=S2(b+(c[(c[b>>2]|0)+-12>>2]|0)|0)|0;l=o8(g,54552)|0;l=zc[c[(c[l>>2]|0)+28>>2]&255](l,10)|0;m8(g);R3(b,l)|0;B3(b)|0;b=0}while(0);NS(h);a=c[j>>2]|0;if(!a){l=b;i=k;return l|0}j=c[(c[a>>2]|0)+-12>>2]|0;e=a+j|0;j=a+(j+4)|0;l=(c[j>>2]|0)+-1|0;c[j>>2]=l;if((e|0)==0|(l|0)!=0){l=b;i=k;return l|0}oc[c[(c[e>>2]|0)+4>>2]&2047](e);l=b;i=k;return l|0}function IG(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0;o=i;i=i+80|0;g=o+64|0;n=o+8|0;l=o+4|0;k=o+16|0;h=o;a=mG(a)|0;c[n>>2]=a;b=mG(b)|0;c[l>>2]=b;if(a)if(!b)e=2;else{MS(k);a=VS(k,n,l)|0;b=c[n>>2]|0;if((b|0)!=(a|0)){if((a|0)!=0?(p=a+((c[(c[a>>2]|0)+-12>>2]|0)+4)|0,f=(c[p>>2]|0)+1|0,c[p>>2]=f,(f|0)==0):0)Ha(79054,79014,48,79068);if((b|0)!=0?(f=c[(c[b>>2]|0)+-12>>2]|0,e=b+f|0,f=b+(f+4)|0,p=(c[f>>2]|0)+-1|0,c[f>>2]=p,!((e|0)==0|(p|0)!=0)):0)oc[c[(c[e>>2]|0)+4>>2]&2047](e);c[n>>2]=a}do if(a){f=c[(c[a>>2]|0)+-12>>2]|0;b=a+f|0;f=a+(f+4)|0;p=(c[f>>2]|0)+-1|0;c[f>>2]=p;if(!((b|0)==0|(p|0)!=0)){oc[c[(c[b>>2]|0)+4>>2]&2047](b);a=c[n>>2]|0;if(!a){a=3;break}}c[h>>2]=a;f=a+((c[(c[a>>2]|0)+-12>>2]|0)+4)|0;p=(c[f>>2]|0)+1|0;c[f>>2]=p;if(!p)Ha(79054,79014,48,79068);a=rd(d,h)|0;c[g>>2]=S2(a+(c[(c[a>>2]|0)+-12>>2]|0)|0)|0;p=o8(g,54552)|0;p=zc[c[(c[p>>2]|0)+28>>2]&255](p,10)|0;m8(g);R3(a,p)|0;B3(a)|0;a=c[h>>2]|0;if((a|0)!=0?(d=c[(c[a>>2]|0)+-12>>2]|0,j=a+d|0,d=a+(d+4)|0,p=(c[d>>2]|0)+-1|0,c[d>>2]=p,!((j|0)==0|(p|0)!=0)):0){oc[c[(c[j>>2]|0)+4>>2]&2047](j);a=0}else a=0}else a=3;while(0);NS(k);b=c[l>>2]|0;f=20}else{a=2;f=20}if((f|0)==20)if((b|0)!=0?(l=c[(c[b>>2]|0)+-12>>2]|0,m=b+l|0,l=b+(l+4)|0,p=(c[l>>2]|0)+-1|0,c[l>>2]=p,!((m|0)==0|(p|0)!=0)):0){oc[c[(c[m>>2]|0)+4>>2]&2047](m);e=a}else e=a;a=c[n>>2]|0;if(!a){i=o;return e|0}n=c[(c[a>>2]|0)+-12>>2]|0;b=a+n|0;n=a+(n+4)|0;p=(c[n>>2]|0)+-1|0;c[n>>2]=p;if((b|0)==0|(p|0)!=0){i=o;return e|0}oc[c[(c[b>>2]|0)+4>>2]&2047](b);i=o;return e|0}function JG(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,j=0,k=0,l=0;k=i;i=i+176|0;g=k+168|0;j=k;h=k+4|0;a=mG(a)|0;c[j>>2]=a;if(!a){j=2;i=k;return j|0}l=a+((c[(c[a>>2]|0)+-12>>2]|0)+4)|0;e=(c[l>>2]|0)+1|0;c[l>>2]=e;if(!e)Ha(79054,79014,48,79068);l=c[(c[a>>2]|0)+-12>>2]|0;e=a+l|0;a=a+(l+4)|0;l=(c[a>>2]|0)+-1|0;c[a>>2]=l;if(!((e|0)==0|(l|0)!=0))oc[c[(c[e>>2]|0)+4>>2]&2047](e);dH(h);e=hO(h,j,b)|0;a=c[j>>2]|0;if((a|0)!=(e|0)){if((e|0)!=0?(b=e+((c[(c[e>>2]|0)+-12>>2]|0)+4)|0,l=(c[b>>2]|0)+1|0,c[b>>2]=l,(l|0)==0):0)Ha(79054,79014,48,79068);if((a|0)!=0?(b=c[(c[a>>2]|0)+-12>>2]|0,f=a+b|0,b=a+(b+4)|0,l=(c[b>>2]|0)+-1|0,c[b>>2]=l,!((f|0)==0|(l|0)!=0)):0)oc[c[(c[f>>2]|0)+4>>2]&2047](f);c[j>>2]=e}do if(!e)b=3;else{f=c[(c[e>>2]|0)+-12>>2]|0;a=e+f|0;f=e+(f+4)|0;l=(c[f>>2]|0)+-1|0;c[f>>2]=l;if(!((a|0)==0|(l|0)!=0)?(oc[c[(c[a>>2]|0)+4>>2]&2047](a),(c[j>>2]|0)==0):0){b=3;break}b=rd(d,j)|0;c[g>>2]=S2(b+(c[(c[b>>2]|0)+-12>>2]|0)|0)|0;l=o8(g,54552)|0;l=zc[c[(c[l>>2]|0)+28>>2]&255](l,10)|0;m8(g);R3(b,l)|0;B3(b)|0;b=0}while(0);cH(h,39628);a=c[j>>2]|0;if(!a){l=b;i=k;return l|0}j=c[(c[a>>2]|0)+-12>>2]|0;e=a+j|0;j=a+(j+4)|0;l=(c[j>>2]|0)+-1|0;c[j>>2]=l;if((e|0)==0|(l|0)!=0){l=b;i=k;return l|0}oc[c[(c[e>>2]|0)+4>>2]&2047](e);l=b;i=k;return l|0}function KG(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0;o=i;i=i+192|0;g=o+176|0;n=o+8|0;l=o+4|0;k=o+12|0;h=o;a=mG(a)|0;c[n>>2]=a;b=mG(b)|0;c[l>>2]=b;if(a)if(!b)e=2;else{dH(k);a=gO(k,n,l)|0;b=c[n>>2]|0;if((b|0)!=(a|0)){if((a|0)!=0?(p=a+((c[(c[a>>2]|0)+-12>>2]|0)+4)|0,f=(c[p>>2]|0)+1|0,c[p>>2]=f,(f|0)==0):0)Ha(79054,79014,48,79068);if((b|0)!=0?(f=c[(c[b>>2]|0)+-12>>2]|0,e=b+f|0,f=b+(f+4)|0,p=(c[f>>2]|0)+-1|0,c[f>>2]=p,!((e|0)==0|(p|0)!=0)):0)oc[c[(c[e>>2]|0)+4>>2]&2047](e);c[n>>2]=a}do if(a){f=c[(c[a>>2]|0)+-12>>2]|0;b=a+f|0;f=a+(f+4)|0;p=(c[f>>2]|0)+-1|0;c[f>>2]=p;if(!((b|0)==0|(p|0)!=0)){oc[c[(c[b>>2]|0)+4>>2]&2047](b);a=c[n>>2]|0;if(!a){a=3;break}}c[h>>2]=a;f=a+((c[(c[a>>2]|0)+-12>>2]|0)+4)|0;p=(c[f>>2]|0)+1|0;c[f>>2]=p;if(!p)Ha(79054,79014,48,79068);a=rd(d,h)|0;c[g>>2]=S2(a+(c[(c[a>>2]|0)+-12>>2]|0)|0)|0;p=o8(g,54552)|0;p=zc[c[(c[p>>2]|0)+28>>2]&255](p,10)|0;m8(g);R3(a,p)|0;B3(a)|0;a=c[h>>2]|0;if((a|0)!=0?(d=c[(c[a>>2]|0)+-12>>2]|0,j=a+d|0,d=a+(d+4)|0,p=(c[d>>2]|0)+-1|0,c[d>>2]=p,!((j|0)==0|(p|0)!=0)):0){oc[c[(c[j>>2]|0)+4>>2]&2047](j);a=0}else a=0}else a=3;while(0);cH(k,39628);b=c[l>>2]|0;f=20}else{a=2;f=20}if((f|0)==20)if((b|0)!=0?(l=c[(c[b>>2]|0)+-12>>2]|0,m=b+l|0,l=b+(l+4)|0,p=(c[l>>2]|0)+-1|0,c[l>>2]=p,!((m|0)==0|(p|0)!=0)):0){oc[c[(c[m>>2]|0)+4>>2]&2047](m);e=a}else e=a;a=c[n>>2]|0;if(!a){i=o;return e|0}n=c[(c[a>>2]|0)+-12>>2]|0;b=a+n|0;n=a+(n+4)|0;p=(c[n>>2]|0)+-1|0;c[n>>2]=p;if((b|0)==0|(p|0)!=0){i=o;return e|0}oc[c[(c[b>>2]|0)+4>>2]&2047](b);i=o;return e|0}function LG(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,j=0,k=0,l=0;k=i;i=i+176|0;g=k+168|0;j=k;h=k+4|0;a=mG(a)|0;c[j>>2]=a;if(!a){j=2;i=k;return j|0}l=a+((c[(c[a>>2]|0)+-12>>2]|0)+4)|0;e=(c[l>>2]|0)+1|0;c[l>>2]=e;if(!e)Ha(79054,79014,48,79068);l=c[(c[a>>2]|0)+-12>>2]|0;e=a+l|0;a=a+(l+4)|0;l=(c[a>>2]|0)+-1|0;c[a>>2]=l;if(!((e|0)==0|(l|0)!=0))oc[c[(c[e>>2]|0)+4>>2]&2047](e);e=h+4|0;c[e>>2]=33408;bH(h,39120);c[h>>2]=38856;c[e>>2]=38912;c[h+8>>2]=39004;c[h+12>>2]=39036;c[h+16>>2]=39068;c[h+20>>2]=39100;e=vN(h,j,b,0)|0;a=c[j>>2]|0;if((a|0)!=(e|0)){if((e|0)!=0?(b=e+((c[(c[e>>2]|0)+-12>>2]|0)+4)|0,l=(c[b>>2]|0)+1|0,c[b>>2]=l,(l|0)==0):0)Ha(79054,79014,48,79068);if((a|0)!=0?(b=c[(c[a>>2]|0)+-12>>2]|0,f=a+b|0,b=a+(b+4)|0,l=(c[b>>2]|0)+-1|0,c[b>>2]=l,!((f|0)==0|(l|0)!=0)):0)oc[c[(c[f>>2]|0)+4>>2]&2047](f);c[j>>2]=e}do if(!e)b=3;else{f=c[(c[e>>2]|0)+-12>>2]|0;a=e+f|0;f=e+(f+4)|0;l=(c[f>>2]|0)+-1|0;c[f>>2]=l;if(!((a|0)==0|(l|0)!=0)?(oc[c[(c[a>>2]|0)+4>>2]&2047](a),(c[j>>2]|0)==0):0){b=3;break}b=rd(d,j)|0;c[g>>2]=S2(b+(c[(c[b>>2]|0)+-12>>2]|0)|0)|0;l=o8(g,54552)|0;l=zc[c[(c[l>>2]|0)+28>>2]&255](l,10)|0;m8(g);R3(b,l)|0;B3(b)|0;b=0}while(0);cH(h,39120);a=c[j>>2]|0;if(!a){l=b;i=k;return l|0}j=c[(c[a>>2]|0)+-12>>2]|0;e=a+j|0;j=a+(j+4)|0;l=(c[j>>2]|0)+-1|0;c[j>>2]=l;if((e|0)==0|(l|0)!=0){l=b;i=k;return l|0}oc[c[(c[e>>2]|0)+4>>2]&2047](e);l=b;i=k;return l|0}function MG(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0;o=i;i=i+192|0;g=o+176|0;n=o+8|0;l=o+4|0;k=o+12|0;h=o;a=mG(a)|0;c[n>>2]=a;b=mG(b)|0;c[l>>2]=b;if(a)if(!b)e=2;else{a=k+4|0;c[a>>2]=33408;bH(k,39120);c[k>>2]=38856;c[a>>2]=38912;c[k+8>>2]=39004;c[k+12>>2]=39036;c[k+16>>2]=39068;c[k+20>>2]=39100;a=uN(k,n,l)|0;b=c[n>>2]|0;if((b|0)!=(a|0)){if((a|0)!=0?(p=a+((c[(c[a>>2]|0)+-12>>2]|0)+4)|0,f=(c[p>>2]|0)+1|0,c[p>>2]=f,(f|0)==0):0)Ha(79054,79014,48,79068);if((b|0)!=0?(f=c[(c[b>>2]|0)+-12>>2]|0,e=b+f|0,f=b+(f+4)|0,p=(c[f>>2]|0)+-1|0,c[f>>2]=p,!((e|0)==0|(p|0)!=0)):0)oc[c[(c[e>>2]|0)+4>>2]&2047](e);c[n>>2]=a}do if(a){f=c[(c[a>>2]|0)+-12>>2]|0;b=a+f|0;f=a+(f+4)|0;p=(c[f>>2]|0)+-1|0;c[f>>2]=p;if(!((b|0)==0|(p|0)!=0)){oc[c[(c[b>>2]|0)+4>>2]&2047](b);a=c[n>>2]|0;if(!a){a=3;break}}c[h>>2]=a;f=a+((c[(c[a>>2]|0)+-12>>2]|0)+4)|0;p=(c[f>>2]|0)+1|0;c[f>>2]=p;if(!p)Ha(79054,79014,48,79068);a=rd(d,h)|0;c[g>>2]=S2(a+(c[(c[a>>2]|0)+-12>>2]|0)|0)|0;p=o8(g,54552)|0;p=zc[c[(c[p>>2]|0)+28>>2]&255](p,10)|0;m8(g);R3(a,p)|0;B3(a)|0;a=c[h>>2]|0;if((a|0)!=0?(d=c[(c[a>>2]|0)+-12>>2]|0,j=a+d|0,d=a+(d+4)|0,p=(c[d>>2]|0)+-1|0,c[d>>2]=p,!((j|0)==0|(p|0)!=0)):0){oc[c[(c[j>>2]|0)+4>>2]&2047](j);a=0}else a=0}else a=3;while(0);cH(k,39120);b=c[l>>2]|0;f=20}else{a=2;f=20}if((f|0)==20)if((b|0)!=0?(l=c[(c[b>>2]|0)+-12>>2]|0,m=b+l|0,l=b+(l+4)|0,p=(c[l>>2]|0)+-1|0,c[l>>2]=p,!((m|0)==0|(p|0)!=0)):0){oc[c[(c[m>>2]|0)+4>>2]&2047](m);e=a}else e=a;b=c[n>>2]|0;if(!b){i=o;return e|0}n=c[(c[b>>2]|0)+-12>>2]|0;a=b+n|0;n=b+(n+4)|0;p=(c[n>>2]|0)+-1|0;c[n>>2]=p;if((a|0)==0|(p|0)!=0){i=o;return e|0}oc[c[(c[a>>2]|0)+4>>2]&2047](a);i=o;return e|0}function NG(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,j=0,k=0,l=0;k=i;i=i+160|0;g=k+152|0;j=k;h=k+8|0;a=mG(a)|0;c[j>>2]=a;if(!a){j=2;i=k;return j|0}l=a+((c[(c[a>>2]|0)+-12>>2]|0)+4)|0;e=(c[l>>2]|0)+1|0;c[l>>2]=e;if(!e)Ha(79054,79014,48,79068);l=c[(c[a>>2]|0)+-12>>2]|0;e=a+l|0;a=a+(l+4)|0;l=(c[a>>2]|0)+-1|0;c[a>>2]=l;if(!((e|0)==0|(l|0)!=0))oc[c[(c[e>>2]|0)+4>>2]&2047](e);AR(h);e=PR(h,j,b)|0;a=c[j>>2]|0;if((a|0)!=(e|0)){if((e|0)!=0?(b=e+((c[(c[e>>2]|0)+-12>>2]|0)+4)|0,l=(c[b>>2]|0)+1|0,c[b>>2]=l,(l|0)==0):0)Ha(79054,79014,48,79068);if((a|0)!=0?(b=c[(c[a>>2]|0)+-12>>2]|0,f=a+b|0,b=a+(b+4)|0,l=(c[b>>2]|0)+-1|0,c[b>>2]=l,!((f|0)==0|(l|0)!=0)):0)oc[c[(c[f>>2]|0)+4>>2]&2047](f);c[j>>2]=e}do if(!e)b=3;else{f=c[(c[e>>2]|0)+-12>>2]|0;a=e+f|0;f=e+(f+4)|0;l=(c[f>>2]|0)+-1|0;c[f>>2]=l;if(!((a|0)==0|(l|0)!=0)?(oc[c[(c[a>>2]|0)+4>>2]&2047](a),(c[j>>2]|0)==0):0){b=3;break}b=rd(d,j)|0;c[g>>2]=S2(b+(c[(c[b>>2]|0)+-12>>2]|0)|0)|0;l=o8(g,54552)|0;l=zc[c[(c[l>>2]|0)+28>>2]&255](l,10)|0;m8(g);R3(b,l)|0;B3(b)|0;b=0}while(0);CR(h);a=c[j>>2]|0;if(!a){l=b;i=k;return l|0}j=c[(c[a>>2]|0)+-12>>2]|0;e=a+j|0;j=a+(j+4)|0;l=(c[j>>2]|0)+-1|0;c[j>>2]=l;if((e|0)==0|(l|0)!=0){l=b;i=k;return l|0}oc[c[(c[e>>2]|0)+4>>2]&2047](e);l=b;i=k;return l|0}function OG(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0;o=i;i=i+176|0;g=o+160|0;n=o+8|0;l=o+4|0;k=o+16|0;h=o;a=mG(a)|0;c[n>>2]=a;b=mG(b)|0;c[l>>2]=b;if(a)if(!b)e=2;else{AR(k);a=OR(k,n,l)|0;b=c[n>>2]|0;if((b|0)!=(a|0)){if((a|0)!=0?(p=a+((c[(c[a>>2]|0)+-12>>2]|0)+4)|0,f=(c[p>>2]|0)+1|0,c[p>>2]=f,(f|0)==0):0)Ha(79054,79014,48,79068);if((b|0)!=0?(f=c[(c[b>>2]|0)+-12>>2]|0,e=b+f|0,f=b+(f+4)|0,p=(c[f>>2]|0)+-1|0,c[f>>2]=p,!((e|0)==0|(p|0)!=0)):0)oc[c[(c[e>>2]|0)+4>>2]&2047](e);c[n>>2]=a}do if(a){f=c[(c[a>>2]|0)+-12>>2]|0;b=a+f|0;f=a+(f+4)|0;p=(c[f>>2]|0)+-1|0;c[f>>2]=p;if(!((b|0)==0|(p|0)!=0)){oc[c[(c[b>>2]|0)+4>>2]&2047](b);a=c[n>>2]|0;if(!a){a=3;break}}c[h>>2]=a;f=a+((c[(c[a>>2]|0)+-12>>2]|0)+4)|0;p=(c[f>>2]|0)+1|0;c[f>>2]=p;if(!p)Ha(79054,79014,48,79068);a=rd(d,h)|0;c[g>>2]=S2(a+(c[(c[a>>2]|0)+-12>>2]|0)|0)|0;p=o8(g,54552)|0;p=zc[c[(c[p>>2]|0)+28>>2]&255](p,10)|0;m8(g);R3(a,p)|0;B3(a)|0;a=c[h>>2]|0;if((a|0)!=0?(d=c[(c[a>>2]|0)+-12>>2]|0,j=a+d|0,d=a+(d+4)|0,p=(c[d>>2]|0)+-1|0,c[d>>2]=p,!((j|0)==0|(p|0)!=0)):0){oc[c[(c[j>>2]|0)+4>>2]&2047](j);a=0}else a=0}else a=3;while(0);CR(k);b=c[l>>2]|0;f=20}else{a=2;f=20}if((f|0)==20)if((b|0)!=0?(l=c[(c[b>>2]|0)+-12>>2]|0,m=b+l|0,l=b+(l+4)|0,p=(c[l>>2]|0)+-1|0,c[l>>2]=p,!((m|0)==0|(p|0)!=0)):0){oc[c[(c[m>>2]|0)+4>>2]&2047](m);e=a}else e=a;a=c[n>>2]|0;if(!a){i=o;return e|0}n=c[(c[a>>2]|0)+-12>>2]|0;b=a+n|0;n=a+(n+4)|0;p=(c[n>>2]|0)+-1|0;c[n>>2]=p;if((b|0)==0|(p|0)!=0){i=o;return e|0}oc[c[(c[b>>2]|0)+4>>2]&2047](b);i=o;return e|0}function PG(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,j=0,k=0,l=0;k=i;i=i+160|0;g=k+152|0;j=k;h=k+8|0;a=mG(a)|0;c[j>>2]=a;if(!a){j=2;i=k;return j|0}l=a+((c[(c[a>>2]|0)+-12>>2]|0)+4)|0;e=(c[l>>2]|0)+1|0;c[l>>2]=e;if(!e)Ha(79054,79014,48,79068);l=c[(c[a>>2]|0)+-12>>2]|0;e=a+l|0;a=a+(l+4)|0;l=(c[a>>2]|0)+-1|0;c[a>>2]=l;if(!((e|0)==0|(l|0)!=0))oc[c[(c[e>>2]|0)+4>>2]&2047](e);e=h+4|0;c[e>>2]=33408;zR(h,39512);c[h>>2]=39248;c[e>>2]=39304;c[h+8>>2]=39396;c[h+12>>2]=39428;c[h+16>>2]=39460;c[h+20>>2]=39492;e=VN(h,j,b,0)|0;a=c[j>>2]|0;if((a|0)!=(e|0)){if((e|0)!=0?(b=e+((c[(c[e>>2]|0)+-12>>2]|0)+4)|0,l=(c[b>>2]|0)+1|0,c[b>>2]=l,(l|0)==0):0)Ha(79054,79014,48,79068);if((a|0)!=0?(b=c[(c[a>>2]|0)+-12>>2]|0,f=a+b|0,b=a+(b+4)|0,l=(c[b>>2]|0)+-1|0,c[b>>2]=l,!((f|0)==0|(l|0)!=0)):0)oc[c[(c[f>>2]|0)+4>>2]&2047](f);c[j>>2]=e}do if(!e)b=3;else{f=c[(c[e>>2]|0)+-12>>2]|0;a=e+f|0;f=e+(f+4)|0;l=(c[f>>2]|0)+-1|0;c[f>>2]=l;if(!((a|0)==0|(l|0)!=0)?(oc[c[(c[a>>2]|0)+4>>2]&2047](a),(c[j>>2]|0)==0):0){b=3;break}b=rd(d,j)|0;c[g>>2]=S2(b+(c[(c[b>>2]|0)+-12>>2]|0)|0)|0;l=o8(g,54552)|0;l=zc[c[(c[l>>2]|0)+28>>2]&255](l,10)|0;m8(g);R3(b,l)|0;B3(b)|0;b=0}while(0);BR(h,39512);a=c[j>>2]|0;if(!a){l=b;i=k;return l|0}j=c[(c[a>>2]|0)+-12>>2]|0;e=a+j|0;j=a+(j+4)|0;l=(c[j>>2]|0)+-1|0;c[j>>2]=l;if((e|0)==0|(l|0)!=0){l=b;i=k;return l|0}oc[c[(c[e>>2]|0)+4>>2]&2047](e);l=b;i=k;return l|0}function QG(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0;o=i;i=i+176|0;g=o+160|0;n=o+8|0;l=o+4|0;k=o+16|0;h=o;a=mG(a)|0;c[n>>2]=a;b=mG(b)|0;c[l>>2]=b;if(a)if(!b)e=2;else{a=k+4|0;c[a>>2]=33408;zR(k,39512);c[k>>2]=39248;c[a>>2]=39304;c[k+8>>2]=39396;c[k+12>>2]=39428;c[k+16>>2]=39460;c[k+20>>2]=39492;a=UN(k,n,l)|0;b=c[n>>2]|0;if((b|0)!=(a|0)){if((a|0)!=0?(p=a+((c[(c[a>>2]|0)+-12>>2]|0)+4)|0,f=(c[p>>2]|0)+1|0,c[p>>2]=f,(f|0)==0):0)Ha(79054,79014,48,79068);if((b|0)!=0?(f=c[(c[b>>2]|0)+-12>>2]|0,e=b+f|0,f=b+(f+4)|0,p=(c[f>>2]|0)+-1|0,c[f>>2]=p,!((e|0)==0|(p|0)!=0)):0)oc[c[(c[e>>2]|0)+4>>2]&2047](e);c[n>>2]=a}do if(a){f=c[(c[a>>2]|0)+-12>>2]|0;b=a+f|0;f=a+(f+4)|0;p=(c[f>>2]|0)+-1|0;c[f>>2]=p;if(!((b|0)==0|(p|0)!=0)){oc[c[(c[b>>2]|0)+4>>2]&2047](b);a=c[n>>2]|0;if(!a){a=3;break}}c[h>>2]=a;f=a+((c[(c[a>>2]|0)+-12>>2]|0)+4)|0;p=(c[f>>2]|0)+1|0;c[f>>2]=p;if(!p)Ha(79054,79014,48,79068);a=rd(d,h)|0;c[g>>2]=S2(a+(c[(c[a>>2]|0)+-12>>2]|0)|0)|0;p=o8(g,54552)|0;p=zc[c[(c[p>>2]|0)+28>>2]&255](p,10)|0;m8(g);R3(a,p)|0;B3(a)|0;a=c[h>>2]|0;if((a|0)!=0?(d=c[(c[a>>2]|0)+-12>>2]|0,j=a+d|0,d=a+(d+4)|0,p=(c[d>>2]|0)+-1|0,c[d>>2]=p,!((j|0)==0|(p|0)!=0)):0){oc[c[(c[j>>2]|0)+4>>2]&2047](j);a=0}else a=0}else a=3;while(0);BR(k,39512);b=c[l>>2]|0;f=20}else{a=2;f=20}if((f|0)==20)if((b|0)!=0?(l=c[(c[b>>2]|0)+-12>>2]|0,m=b+l|0,l=b+(l+4)|0,p=(c[l>>2]|0)+-1|0,c[l>>2]=p,!((m|0)==0|(p|0)!=0)):0){oc[c[(c[m>>2]|0)+4>>2]&2047](m);e=a}else e=a;b=c[n>>2]|0;if(!b){i=o;return e|0}n=c[(c[b>>2]|0)+-12>>2]|0;a=b+n|0;n=b+(n+4)|0;p=(c[n>>2]|0)+-1|0;c[n>>2]=p;if((a|0)==0|(p|0)!=0){i=o;return e|0}oc[c[(c[a>>2]|0)+4>>2]&2047](a);i=o;return e|0}function RG(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0;o=i;i=i+144|0;g=o+128|0;n=o+8|0;l=o+4|0;k=o+16|0;h=o;a=mG(a)|0;c[n>>2]=a;b=mG(b)|0;c[l>>2]=b;if(a)if(!b)e=2;else{XG(k);a=aQ(k,n,l)|0;b=c[n>>2]|0;if((b|0)!=(a|0)){if((a|0)!=0?(p=a+((c[(c[a>>2]|0)+-12>>2]|0)+4)|0,f=(c[p>>2]|0)+1|0,c[p>>2]=f,(f|0)==0):0)Ha(79054,79014,48,79068);if((b|0)!=0?(f=c[(c[b>>2]|0)+-12>>2]|0,e=b+f|0,f=b+(f+4)|0,p=(c[f>>2]|0)+-1|0,c[f>>2]=p,!((e|0)==0|(p|0)!=0)):0)oc[c[(c[e>>2]|0)+4>>2]&2047](e);c[n>>2]=a}do if(a){f=c[(c[a>>2]|0)+-12>>2]|0;b=a+f|0;f=a+(f+4)|0;p=(c[f>>2]|0)+-1|0;c[f>>2]=p;if(!((b|0)==0|(p|0)!=0)){oc[c[(c[b>>2]|0)+4>>2]&2047](b);a=c[n>>2]|0;if(!a){a=3;break}}c[h>>2]=a;f=a+((c[(c[a>>2]|0)+-12>>2]|0)+4)|0;p=(c[f>>2]|0)+1|0;c[f>>2]=p;if(!p)Ha(79054,79014,48,79068);a=rd(d,h)|0;c[g>>2]=S2(a+(c[(c[a>>2]|0)+-12>>2]|0)|0)|0;p=o8(g,54552)|0;p=zc[c[(c[p>>2]|0)+28>>2]&255](p,10)|0;m8(g);R3(a,p)|0;B3(a)|0;a=c[h>>2]|0;if((a|0)!=0?(d=c[(c[a>>2]|0)+-12>>2]|0,j=a+d|0,d=a+(d+4)|0,p=(c[d>>2]|0)+-1|0,c[d>>2]=p,!((j|0)==0|(p|0)!=0)):0){oc[c[(c[j>>2]|0)+4>>2]&2047](j);a=0}else a=0}else a=3;while(0);YG(k,40592);b=c[l>>2]|0;f=20}else{a=2;f=20}if((f|0)==20)if((b|0)!=0?(l=c[(c[b>>2]|0)+-12>>2]|0,m=b+l|0,l=b+(l+4)|0,p=(c[l>>2]|0)+-1|0,c[l>>2]=p,!((m|0)==0|(p|0)!=0)):0){oc[c[(c[m>>2]|0)+4>>2]&2047](m);e=a}else e=a;a=c[n>>2]|0;if(!a){i=o;return e|0}n=c[(c[a>>2]|0)+-12>>2]|0;b=a+n|0;n=a+(n+4)|0;p=(c[n>>2]|0)+-1|0;c[n>>2]=p;if((b|0)==0|(p|0)!=0){i=o;return e|0}oc[c[(c[b>>2]|0)+4>>2]&2047](b);i=o;return e|0}function SG(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0;n=i;i=i+32|0;g=n+24|0;m=n+20|0;k=n+16|0;e=n+8|0;h=n;o=mG(a)|0;c[m>>2]=o;a=mG(b)|0;c[k>>2]=a;if(!o)e=2;else{do if(a){c[e>>2]=40032;c[e+4>>2]=0;a=nP(e,m,k)|0;b=c[m>>2]|0;if((b|0)!=(a|0)){if((a|0)!=0?(e=a+((c[(c[a>>2]|0)+-12>>2]|0)+4)|0,o=(c[e>>2]|0)+1|0,c[e>>2]=o,(o|0)==0):0)Ha(79054,79014,48,79068);if((b|0)!=0?(e=c[(c[b>>2]|0)+-12>>2]|0,f=b+e|0,e=b+(e+4)|0,o=(c[e>>2]|0)+-1|0,c[e>>2]=o,!((f|0)==0|(o|0)!=0)):0)oc[c[(c[f>>2]|0)+4>>2]&2047](f);c[m>>2]=a}if(a){f=c[(c[a>>2]|0)+-12>>2]|0;b=a+f|0;f=a+(f+4)|0;o=(c[f>>2]|0)+-1|0;c[f>>2]=o;if(!((b|0)==0|(o|0)!=0)){oc[c[(c[b>>2]|0)+4>>2]&2047](b);a=c[m>>2]|0;if(!a){a=3;break}}c[h>>2]=a;f=a+((c[(c[a>>2]|0)+-12>>2]|0)+4)|0;o=(c[f>>2]|0)+1|0;c[f>>2]=o;if(!o)Ha(79054,79014,48,79068);a=rd(d,h)|0;c[g>>2]=S2(a+(c[(c[a>>2]|0)+-12>>2]|0)|0)|0;o=o8(g,54552)|0;o=zc[c[(c[o>>2]|0)+28>>2]&255](o,10)|0;m8(g);R3(a,o)|0;B3(a)|0;a=c[h>>2]|0;if((a|0)!=0?(d=c[(c[a>>2]|0)+-12>>2]|0,j=a+d|0,d=a+(d+4)|0,o=(c[d>>2]|0)+-1|0,c[d>>2]=o,!((j|0)==0|(o|0)!=0)):0){oc[c[(c[j>>2]|0)+4>>2]&2047](j);a=0}else a=0}else a=3}else a=2;while(0);e=a;a=c[k>>2]|0}if((a|0)!=0?(k=c[(c[a>>2]|0)+-12>>2]|0,l=a+k|0,k=a+(k+4)|0,o=(c[k>>2]|0)+-1|0,c[k>>2]=o,!((l|0)==0|(o|0)!=0)):0)oc[c[(c[l>>2]|0)+4>>2]&2047](l);a=c[m>>2]|0;if(!a){i=n;return e|0}m=c[(c[a>>2]|0)+-12>>2]|0;b=a+m|0;m=a+(m+4)|0;o=(c[m>>2]|0)+-1|0;c[m>>2]=o;if((b|0)==0|(o|0)!=0){i=n;return e|0}oc[c[(c[b>>2]|0)+4>>2]&2047](b);i=n;return e|0}function TG(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0;n=i;i=i+32|0;g=n+24|0;m=n+20|0;k=n+16|0;e=n+8|0;h=n;o=mG(a)|0;c[m>>2]=o;a=mG(b)|0;c[k>>2]=a;if(!o)e=2;else{do if(a){c[e+4>>2]=1;c[e>>2]=33368;a=nP(e,m,k)|0;b=c[m>>2]|0;if((b|0)!=(a|0)){if((a|0)!=0?(e=a+((c[(c[a>>2]|0)+-12>>2]|0)+4)|0,o=(c[e>>2]|0)+1|0,c[e>>2]=o,(o|0)==0):0)Ha(79054,79014,48,79068);if((b|0)!=0?(e=c[(c[b>>2]|0)+-12>>2]|0,f=b+e|0,e=b+(e+4)|0,o=(c[e>>2]|0)+-1|0,c[e>>2]=o,!((f|0)==0|(o|0)!=0)):0)oc[c[(c[f>>2]|0)+4>>2]&2047](f);c[m>>2]=a}if(a){f=c[(c[a>>2]|0)+-12>>2]|0;b=a+f|0;f=a+(f+4)|0;o=(c[f>>2]|0)+-1|0;c[f>>2]=o;if(!((b|0)==0|(o|0)!=0)){oc[c[(c[b>>2]|0)+4>>2]&2047](b);a=c[m>>2]|0;if(!a){a=3;break}}c[h>>2]=a;f=a+((c[(c[a>>2]|0)+-12>>2]|0)+4)|0;o=(c[f>>2]|0)+1|0;c[f>>2]=o;if(!o)Ha(79054,79014,48,79068);a=rd(d,h)|0;c[g>>2]=S2(a+(c[(c[a>>2]|0)+-12>>2]|0)|0)|0;o=o8(g,54552)|0;o=zc[c[(c[o>>2]|0)+28>>2]&255](o,10)|0;m8(g);R3(a,o)|0;B3(a)|0;a=c[h>>2]|0;if((a|0)!=0?(d=c[(c[a>>2]|0)+-12>>2]|0,j=a+d|0,d=a+(d+4)|0,o=(c[d>>2]|0)+-1|0,c[d>>2]=o,!((j|0)==0|(o|0)!=0)):0){oc[c[(c[j>>2]|0)+4>>2]&2047](j);a=0}else a=0}else a=3}else a=2;while(0);e=a;a=c[k>>2]|0}if((a|0)!=0?(k=c[(c[a>>2]|0)+-12>>2]|0,l=a+k|0,k=a+(k+4)|0,o=(c[k>>2]|0)+-1|0,c[k>>2]=o,!((l|0)==0|(o|0)!=0)):0)oc[c[(c[l>>2]|0)+4>>2]&2047](l);a=c[m>>2]|0;if(!a){i=n;return e|0}m=c[(c[a>>2]|0)+-12>>2]|0;b=a+m|0;m=a+(m+4)|0;o=(c[m>>2]|0)+-1|0;c[m>>2]=o;if((b|0)==0|(o|0)!=0){i=n;return e|0}oc[c[(c[b>>2]|0)+4>>2]&2047](b);i=n;return e|0}function UG(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0;o=i;i=i+96|0;g=o+80|0;n=o+8|0;l=o+4|0;k=o+16|0;h=o;a=mG(a)|0;c[n>>2]=a;b=mG(b)|0;c[l>>2]=b;if(a)if(!b)e=2;else{MO(k);a=$O(k,n,l)|0;b=c[n>>2]|0;if((b|0)!=(a|0)){if((a|0)!=0?(p=a+((c[(c[a>>2]|0)+-12>>2]|0)+4)|0,f=(c[p>>2]|0)+1|0,c[p>>2]=f,(f|0)==0):0)Ha(79054,79014,48,79068);if((b|0)!=0?(f=c[(c[b>>2]|0)+-12>>2]|0,e=b+f|0,f=b+(f+4)|0,p=(c[f>>2]|0)+-1|0,c[f>>2]=p,!((e|0)==0|(p|0)!=0)):0)oc[c[(c[e>>2]|0)+4>>2]&2047](e);c[n>>2]=a}do if(a){f=c[(c[a>>2]|0)+-12>>2]|0;b=a+f|0;f=a+(f+4)|0;p=(c[f>>2]|0)+-1|0;c[f>>2]=p;if(!((b|0)==0|(p|0)!=0)){oc[c[(c[b>>2]|0)+4>>2]&2047](b);a=c[n>>2]|0;if(!a){a=3;break}}c[h>>2]=a;f=a+((c[(c[a>>2]|0)+-12>>2]|0)+4)|0;p=(c[f>>2]|0)+1|0;c[f>>2]=p;if(!p)Ha(79054,79014,48,79068);a=rd(d,h)|0;c[g>>2]=S2(a+(c[(c[a>>2]|0)+-12>>2]|0)|0)|0;p=o8(g,54552)|0;p=zc[c[(c[p>>2]|0)+28>>2]&255](p,10)|0;m8(g);R3(a,p)|0;B3(a)|0;a=c[h>>2]|0;if((a|0)!=0?(d=c[(c[a>>2]|0)+-12>>2]|0,j=a+d|0,d=a+(d+4)|0,p=(c[d>>2]|0)+-1|0,c[d>>2]=p,!((j|0)==0|(p|0)!=0)):0){oc[c[(c[j>>2]|0)+4>>2]&2047](j);a=0}else a=0}else a=3;while(0);NO(k);b=c[l>>2]|0;f=20}else{a=2;f=20}if((f|0)==20)if((b|0)!=0?(l=c[(c[b>>2]|0)+-12>>2]|0,m=b+l|0,l=b+(l+4)|0,p=(c[l>>2]|0)+-1|0,c[l>>2]=p,!((m|0)==0|(p|0)!=0)):0){oc[c[(c[m>>2]|0)+4>>2]&2047](m);e=a}else e=a;a=c[n>>2]|0;if(!a){i=o;return e|0}n=c[(c[a>>2]|0)+-12>>2]|0;b=a+n|0;n=a+(n+4)|0;p=(c[n>>2]|0)+-1|0;c[n>>2]=p;if((b|0)==0|(p|0)!=0){i=o;return e|0}oc[c[(c[b>>2]|0)+4>>2]&2047](b);i=o;return e|0}function VG(a){a=a|0;return}function WG(a){a=a|0;P_(a);return}function XG(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0;h=a+4|0;c[a>>2]=33388;f=c[10150]|0;c[h>>2]=f;c[h+(c[f+-16>>2]|0)>>2]=c[10151];f=a+8|0;e=c[10152]|0;c[f>>2]=e;c[f+(c[e+-16>>2]|0)>>2]=c[10153];e=a+12|0;b=c[10154]|0;c[e>>2]=b;c[e+(c[b+-16>>2]|0)>>2]=c[10155];b=a+16|0;d=c[10156]|0;c[b>>2]=d;c[b+(c[d+-16>>2]|0)>>2]=c[10157];d=a+20|0;g=c[10158]|0;c[d>>2]=g;c[d+(c[g+-16>>2]|0)>>2]=c[10159];g=c[10149]|0;c[h>>2]=g;c[h+(c[g+-16>>2]|0)>>2]=c[10160];c[f>>2]=c[10161];c[e>>2]=c[10162];c[b>>2]=c[10163];c[d>>2]=c[10164];d=a+24|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;d=a+48|0;b=c[10165]|0;c[d>>2]=b;c[d+(c[b+-16>>2]|0)>>2]=c[10166];c[a>>2]=40304;c[a+4>>2]=40356;c[a+8>>2]=40448;c[a+12>>2]=40480;c[a+16>>2]=40512;c[a+20>>2]=40544;c[a+48>>2]=40576;c[a+56>>2]=0;c[a+60>>2]=0;c[a+52>>2]=a+56;c[a+68>>2]=0;c[a+72>>2]=0;c[a+64>>2]=a+68;c[a+80>>2]=0;c[a+84>>2]=0;c[a+76>>2]=a+80;c[a+88>>2]=0;kM(a+92|0,0,1);return}function YG(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0;d=c[b>>2]|0;c[a>>2]=d;i=a+4|0;c[i>>2]=c[b+76>>2];c[a+(c[d+-12>>2]|0)>>2]=c[b+80>>2];d=a+8|0;c[d>>2]=c[b+84>>2];e=a+12|0;c[e>>2]=c[b+88>>2];f=a+16|0;c[f>>2]=c[b+92>>2];g=a+20|0;c[g>>2]=c[b+96>>2];c[a+48>>2]=c[b+100>>2];h=c[a+88>>2]|0;if((h|0)!=0?(k=c[(c[h>>2]|0)+-12>>2]|0,j=h+k|0,k=h+(k+4)|0,h=(c[k>>2]|0)+-1|0,c[k>>2]=h,!((j|0)==0|(h|0)!=0)):0)oc[c[(c[j>>2]|0)+4>>2]&2047](j);ZG(a+76|0,c[a+80>>2]|0);ZG(a+64|0,c[a+68>>2]|0);ZG(a+52|0,c[a+56>>2]|0);h=c[b+4>>2]|0;c[i>>2]=h;c[i+(c[h+-16>>2]|0)>>2]=c[b+48>>2];c[d>>2]=c[b+52>>2];c[e>>2]=c[b+56>>2];c[f>>2]=c[b+60>>2];c[g>>2]=c[b+64>>2];h=a+24|0;pG(h);f=a+28|0;d=c[f>>2]|0;g=a+32|0;e=c[g>>2]|0;if((d|0)!=(e|0)){do{P_(c[d>>2]|0);d=d+4|0}while((d|0)!=(e|0));d=c[f>>2]|0;e=c[g>>2]|0;if((e|0)!=(d|0))c[g>>2]=e+(~((e+-4-d|0)>>>2)<<2)}d=c[h>>2]|0;if(!d)return;P_(d);return}function ZG(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;if(!b)return;ZG(a,c[b>>2]|0);ZG(a,c[b+4>>2]|0);a=b+16|0;d=c[b+28>>2]|0;if((d|0)!=0?(f=c[(c[d>>2]|0)+-12>>2]|0,e=d+f|0,f=d+(f+4)|0,d=(c[f>>2]|0)+-1|0,c[f>>2]=d,!((e|0)==0|(d|0)!=0)):0)oc[c[(c[e>>2]|0)+4>>2]&2047](e);o2(a);P_(b);return}function _G(a){a=a|0;P_(a);return}function $G(a){a=a|0;return}function aH(a){a=a|0;P_(a);return}function bH(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0;c[b>>2]=33388;j=b+4|0;h=c[d+8>>2]|0;c[j>>2]=h;c[j+(c[h+-16>>2]|0)>>2]=c[d+12>>2];h=b+8|0;g=c[d+16>>2]|0;c[h>>2]=g;c[h+(c[g+-16>>2]|0)>>2]=c[d+20>>2];g=b+12|0;f=c[d+24>>2]|0;c[g>>2]=f;c[g+(c[f+-16>>2]|0)>>2]=c[d+28>>2];f=b+16|0;e=c[d+32>>2]|0;c[f>>2]=e;c[f+(c[e+-16>>2]|0)>>2]=c[d+36>>2];e=b+20|0;i=c[d+40>>2]|0;c[e>>2]=i;c[e+(c[i+-16>>2]|0)>>2]=c[d+44>>2];i=c[d+4>>2]|0;c[j>>2]=i;c[j+(c[i+-16>>2]|0)>>2]=c[d+48>>2];c[h>>2]=c[d+52>>2];c[g>>2]=c[d+56>>2];c[f>>2]=c[d+60>>2];c[e>>2]=c[d+64>>2];i=b+24|0;c[i>>2]=0;c[i+4>>2]=0;c[i+8>>2]=0;c[i+12>>2]=0;c[i+16>>2]=0;c[i+20>>2]=0;i=c[d>>2]|0;c[b>>2]=i;c[j>>2]=c[d+68>>2];c[b+(c[i+-12>>2]|0)>>2]=c[d+72>>2];c[h>>2]=c[d+76>>2];c[g>>2]=c[d+80>>2];c[f>>2]=c[d+84>>2];c[e>>2]=c[d+88>>2];kM(b+48|0,0,1);e=b+56|0;d=c[10958]|0;c[e>>2]=d;c[e+(c[d+-16>>2]|0)>>2]=c[10959];d=b+60|0;f=c[10960]|0;c[d>>2]=f;c[d+(c[f+-16>>2]|0)>>2]=c[10961];f=b+64|0;d=c[10962]|0;c[f>>2]=d;c[f+(c[d+-16>>2]|0)>>2]=c[10963];c[e>>2]=1360;c[b+60>>2]=1428;c[b+64>>2]=1460;kM(b+68|0,0,1);kM(b+76|0,0,1);kM(b+84|0,0,1);kM(b+96|0,0,1);c[b+108>>2]=12880;d=b+112|0;c[d>>2]=0;a[b+116>>0]=0;c[d>>2]=e+(c[(c[e>>2]|0)+-16>>2]|0);c[b+132>>2]=0;c[b+136>>2]=0;c[b+128>>2]=b+132;c[b+144>>2]=0;c[b+148>>2]=0;c[b+140>>2]=b+144;d=b+(c[(c[b>>2]|0)+-12>>2]|0)|0;c[b+152>>2]=12880;c[b+156>>2]=d;a[b+160>>0]=0;return} +function $M(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0;p=i;i=i+32|0;f=p+16|0;k=p;if(!(c[d>>2]|0)){o=0;i=p;return o|0}rM(b+248|0,e)|0;if(!(c[d>>2]|0)){o=0;i=p;return o|0}kM(f,1,4);rM(b+256|0,rM(b+264|0,f)|0)|0;f=b+(c[(c[b>>2]|0)+-12>>2]|0)|0;c[k>>2]=12880;c[k+4>>2]=f;a[k+8>>0]=0;h=c[d>>2]|0;if(!h)Ha(78999,79014,95,78956);pc[c[(c[h>>2]|0)+32>>2]&1023](h,f);f=c[h+4>>2]|0;g=h+8|0;a:do if((f|0)==(c[g>>2]|0))l=7;else{while(1){d=rc[c[(c[k>>2]|0)+24>>2]&127](k)|0;e=c[k>>2]|0;if(d){j=e;break a}d=c[f>>2]|0;if(!d)break;pc[c[e+8>>2]&1023](k,d);f=f+4|0;if((f|0)==(c[g>>2]|0)){l=7;break a}}Ha(78999,79014,95,78956)}while(0);if((l|0)==7)j=c[k>>2]|0;pc[c[j+16>>2]&1023](k,h);k=b+44|0;f=c[k>>2]|0;j=b+40|0;d=c[j>>2]|0;e=f+-1+d|0;h=b+28|0;g=c[h>>2]|0;e=c[(c[g+(e>>>10<<2)>>2]|0)+((e&1023)<<2)>>2]|0;do if(e){f=e+((c[(c[e>>2]|0)+-12>>2]|0)+4)|0;l=(c[f>>2]|0)+1|0;c[f>>2]=l;if(!l)Ha(79054,79014,48,79068);else{o=e;m=c[k>>2]|0;break}}else{o=0;m=f}while(0);f=d+-1+m|0;f=c[(c[g+(f>>>10<<2)>>2]|0)+((f&1023)<<2)>>2]|0;if((f|0)!=0?(l=c[(c[f>>2]|0)+-12>>2]|0,n=f+l|0,l=f+(l+4)|0,m=(c[l>>2]|0)+-1|0,c[l>>2]=m,!((n|0)==0|(m|0)!=0)):0){oc[c[(c[n>>2]|0)+4>>2]&2047](n);g=c[h>>2]|0;d=c[j>>2]|0}n=c[k>>2]|0;c[k>>2]=n+-1;f=b+32|0;e=c[f>>2]|0;if((1-d-n+((e|0)==(g|0)?0:(e-g<<8)+-1|0)|0)>>>0>2047){P_(c[e+-4>>2]|0);c[f>>2]=(c[f>>2]|0)+-4}if(!o){o=0;i=p;return o|0}n=o+((c[(c[o>>2]|0)+-12>>2]|0)+4)|0;b=(c[n>>2]|0)+1|0;c[n>>2]=b;if(!b)Ha(79054,79014,48,79068);n=c[(c[o>>2]|0)+-12>>2]|0;f=o+n|0;n=o+(n+4)|0;b=(c[n>>2]|0)+-1|0;c[n>>2]=b;if((f|0)==0|(b|0)!=0){i=p;return o|0}oc[c[(c[f>>2]|0)+4>>2]&2047](f);i=p;return o|0}function aN(b,d,e,f,g){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0.0,j=0.0,k=0.0,l=0.0,m=0,n=0,o=0,p=0.0,q=0.0;o=i;i=i+16|0;m=o+8|0;n=o;oM(b,e,f);vM(b)|0;if((c[b+4>>2]|0)<=(g|0)){i=o;return}k=+jM(b);kM(m,0,1);f=1;h=9999.0;do{if((a[d+48+f>>0]|0)!=0?(kM(n,1,f),l=+jM(n),l=l>k?l-k:k-l,!(l>9999.0)):0){j=l;e=1;do{if(jk?q-k:k-q}while(!(j>p))}f=f+1|0}while((f|0)!=200);rM(b,m)|0;i=o;return}function bN(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0;g=i;i=i+16|0;f=g;e=b+256|0;if((c[d>>2]|0)!=-999999)rM(e,d)|0;lM(a,e);vM(a)|0;aN(f,b,a,b+248|0,200);rM(a,f)|0;e=b+264|0;if(uM(a,e)|0){c[a>>2]=-999999;c[a+4>>2]=4;i=g;return}else{rM(e,a)|0;i=g;return}}function cN(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0;h=i;i=i+16|0;g=h+8|0;f=h;d=a+4|0;e=zc[c[(c[d>>2]|0)+72>>2]&255](d,b)|0;c[g>>2]=e;b=c[b>>2]|0;if(!b)Ha(78999,79014,102,79043);Dc[c[(c[a>>2]|0)+12>>2]&63](f,a,b+60|0);if(!e){i=h;return}GE(e,f)|0;Dc[c[(c[d>>2]|0)+56>>2]&63](d,g,0);b=c[g>>2]|0;if(!b){i=h;return}g=c[(c[b>>2]|0)+-12>>2]|0;d=b+g|0;g=b+(g+4)|0;a=(c[g>>2]|0)+-1|0;c[g>>2]=a;if((d|0)==0|(a|0)!=0){i=h;return}oc[c[(c[d>>2]|0)+4>>2]&2047](d);i=h;return}function dN(a,b){a=a|0;b=b|0;cN(a+-4|0,b);return}function eN(a,b){a=a|0;b=b|0;cN(a+-16|0,b);return}function fN(a,b){a=a|0;b=b|0;var c=0,d=0;c=i;i=i+16|0;d=c;kM(d,1,4);rM(a+256|0,rM(a+264|0,d)|0)|0;HT(a+4|0,b);i=c;return}function gN(a,b){a=a|0;b=b|0;var c=0,d=0;c=i;i=i+16|0;d=c;a=a+-4|0;kM(d,1,4);rM(a+256|0,rM(a+264|0,d)|0)|0;HT(a+4|0,b);i=c;return}function hN(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=i;i=i+16|0;d=c;e=a+-8|0;kM(d,1,4);rM(e+256|0,rM(e+264|0,d)|0)|0;HT(a+-4|0,b);i=c;return}function iN(a){a=a|0;var b=0,d=0,e=0,f=0,g=0;c[a+4>>2]=1136;c[a+8>>2]=1228;c[a+12>>2]=1260;c[a+16>>2]=1292;c[a+20>>2]=1324;g=a+24|0;pG(g);e=a+28|0;b=c[e>>2]|0;f=a+32|0;d=c[f>>2]|0;if((b|0)!=(d|0)){a=b;do{P_(c[a>>2]|0);a=a+4|0}while((a|0)!=(d|0));a=c[e>>2]|0;b=c[f>>2]|0;if((b|0)!=(a|0))c[f>>2]=b+(~((b+-4-a|0)>>>2)<<2)}a=c[g>>2]|0;if(!a)return;P_(a);return}function jN(a){a=a|0;var b=0,d=0,e=0,f=0,g=0;c[a+4>>2]=1136;c[a+8>>2]=1228;c[a+12>>2]=1260;c[a+16>>2]=1292;c[a+20>>2]=1324;f=a+24|0;pG(f);d=a+28|0;b=c[d>>2]|0;g=a+32|0;e=c[g>>2]|0;if((b|0)!=(e|0)){do{P_(c[b>>2]|0);b=b+4|0}while((b|0)!=(e|0));b=c[d>>2]|0;d=c[g>>2]|0;if((d|0)!=(b|0))c[g>>2]=d+(~((d+-4-b|0)>>>2)<<2)}b=c[f>>2]|0;if(!b){P_(a);return}P_(b);P_(a);return}function kN(a){a=a|0;var b=0,d=0,e=0,f=0;f=a+-4|0;c[f+4>>2]=1136;c[f+8>>2]=1228;c[f+12>>2]=1260;c[f+16>>2]=1292;c[f+20>>2]=1324;e=f+24|0;pG(e);d=f+28|0;a=c[d>>2]|0;f=f+32|0;b=c[f>>2]|0;if((a|0)!=(b|0)){do{P_(c[a>>2]|0);a=a+4|0}while((a|0)!=(b|0));a=c[d>>2]|0;b=c[f>>2]|0;if((b|0)!=(a|0))c[f>>2]=b+(~((b+-4-a|0)>>>2)<<2)}a=c[e>>2]|0;if(!a)return;P_(a);return}function lN(a){a=a|0;var b=0,d=0,e=0,f=0,g=0;g=a+-4|0;c[g+4>>2]=1136;c[g+8>>2]=1228;c[g+12>>2]=1260;c[g+16>>2]=1292;c[g+20>>2]=1324;e=g+24|0;pG(e);d=g+28|0;a=c[d>>2]|0;f=g+32|0;b=c[f>>2]|0;if((a|0)!=(b|0)){do{P_(c[a>>2]|0);a=a+4|0}while((a|0)!=(b|0));a=c[d>>2]|0;b=c[f>>2]|0;if((b|0)!=(a|0))c[f>>2]=b+(~((b+-4-a|0)>>>2)<<2)}a=c[e>>2]|0;if(!a){P_(g);return}P_(a);P_(g);return}function mN(a){a=a|0;var b=0,d=0,e=0,f=0;f=a+-8|0;c[a+-4>>2]=1136;c[f+8>>2]=1228;c[f+12>>2]=1260;c[f+16>>2]=1292;c[f+20>>2]=1324;e=f+24|0;pG(e);d=f+28|0;a=c[d>>2]|0;f=f+32|0;b=c[f>>2]|0;if((a|0)!=(b|0)){do{P_(c[a>>2]|0);a=a+4|0}while((a|0)!=(b|0));a=c[d>>2]|0;b=c[f>>2]|0;if((b|0)!=(a|0))c[f>>2]=b+(~((b+-4-a|0)>>>2)<<2)}a=c[e>>2]|0;if(!a)return;P_(a);return}function nN(a){a=a|0;var b=0,d=0,e=0,f=0,g=0;g=a+-8|0;c[a+-4>>2]=1136;c[g+8>>2]=1228;c[g+12>>2]=1260;c[g+16>>2]=1292;c[g+20>>2]=1324;e=g+24|0;pG(e);d=g+28|0;a=c[d>>2]|0;f=g+32|0;b=c[f>>2]|0;if((a|0)!=(b|0)){do{P_(c[a>>2]|0);a=a+4|0}while((a|0)!=(b|0));a=c[d>>2]|0;b=c[f>>2]|0;if((b|0)!=(a|0))c[f>>2]=b+(~((b+-4-a|0)>>>2)<<2)}a=c[e>>2]|0;if(!a){P_(g);return}P_(a);P_(g);return}function oN(a){a=a|0;var b=0,d=0,e=0,f=0;f=a+-12|0;c[f+4>>2]=1136;c[f+8>>2]=1228;c[f+12>>2]=1260;c[f+16>>2]=1292;c[f+20>>2]=1324;e=f+24|0;pG(e);d=f+28|0;a=c[d>>2]|0;f=f+32|0;b=c[f>>2]|0;if((a|0)!=(b|0)){do{P_(c[a>>2]|0);a=a+4|0}while((a|0)!=(b|0));a=c[d>>2]|0;b=c[f>>2]|0;if((b|0)!=(a|0))c[f>>2]=b+(~((b+-4-a|0)>>>2)<<2)}a=c[e>>2]|0;if(!a)return;P_(a);return}function pN(a){a=a|0;var b=0,d=0,e=0,f=0,g=0;g=a+-12|0;c[g+4>>2]=1136;c[g+8>>2]=1228;c[g+12>>2]=1260;c[g+16>>2]=1292;c[g+20>>2]=1324;e=g+24|0;pG(e);d=g+28|0;a=c[d>>2]|0;f=g+32|0;b=c[f>>2]|0;if((a|0)!=(b|0)){do{P_(c[a>>2]|0);a=a+4|0}while((a|0)!=(b|0));a=c[d>>2]|0;b=c[f>>2]|0;if((b|0)!=(a|0))c[f>>2]=b+(~((b+-4-a|0)>>>2)<<2)}a=c[e>>2]|0;if(!a){P_(g);return}P_(a);P_(g);return}function qN(a){a=a|0;var b=0,d=0,e=0,f=0;f=a+-16|0;c[a+-12>>2]=1136;c[f+8>>2]=1228;c[f+12>>2]=1260;c[f+16>>2]=1292;c[f+20>>2]=1324;e=f+24|0;pG(e);d=f+28|0;a=c[d>>2]|0;f=f+32|0;b=c[f>>2]|0;if((a|0)!=(b|0)){do{P_(c[a>>2]|0);a=a+4|0}while((a|0)!=(b|0));a=c[d>>2]|0;b=c[f>>2]|0;if((b|0)!=(a|0))c[f>>2]=b+(~((b+-4-a|0)>>>2)<<2)}a=c[e>>2]|0;if(!a)return;P_(a);return}function rN(a){a=a|0;var b=0,d=0,e=0,f=0,g=0;g=a+-16|0;c[a+-12>>2]=1136;c[g+8>>2]=1228;c[g+12>>2]=1260;c[g+16>>2]=1292;c[g+20>>2]=1324;e=g+24|0;pG(e);d=g+28|0;a=c[d>>2]|0;f=g+32|0;b=c[f>>2]|0;if((a|0)!=(b|0)){do{P_(c[a>>2]|0);a=a+4|0}while((a|0)!=(b|0));a=c[d>>2]|0;b=c[f>>2]|0;if((b|0)!=(a|0))c[f>>2]=b+(~((b+-4-a|0)>>>2)<<2)}a=c[e>>2]|0;if(!a){P_(g);return}P_(a);P_(g);return}function sN(a){a=a|0;var b=0,d=0,e=0,f=0;f=a+-20|0;c[f+4>>2]=1136;c[f+8>>2]=1228;c[f+12>>2]=1260;c[f+16>>2]=1292;c[f+20>>2]=1324;e=f+24|0;pG(e);d=f+28|0;a=c[d>>2]|0;f=f+32|0;b=c[f>>2]|0;if((a|0)!=(b|0)){do{P_(c[a>>2]|0);a=a+4|0}while((a|0)!=(b|0));a=c[d>>2]|0;b=c[f>>2]|0;if((b|0)!=(a|0))c[f>>2]=b+(~((b+-4-a|0)>>>2)<<2)}a=c[e>>2]|0;if(!a)return;P_(a);return}function tN(a){a=a|0;var b=0,d=0,e=0,f=0,g=0;g=a+-20|0;c[g+4>>2]=1136;c[g+8>>2]=1228;c[g+12>>2]=1260;c[g+16>>2]=1292;c[g+20>>2]=1324;e=g+24|0;pG(e);d=g+28|0;a=c[d>>2]|0;f=g+32|0;b=c[f>>2]|0;if((a|0)!=(b|0)){do{P_(c[a>>2]|0);a=a+4|0}while((a|0)!=(b|0));a=c[d>>2]|0;b=c[f>>2]|0;if((b|0)!=(a|0))c[f>>2]=b+(~((b+-4-a|0)>>>2)<<2)}a=c[e>>2]|0;if(!a){P_(g);return}P_(a);P_(g);return}function uN(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0;m=i;i=i+48|0;g=m+8|0;j=m+4|0;h=m;f=c[e>>2]|0;if(!f){l=0;i=m;return l|0}n=c[10951]|0;c[g>>2]=n;c[g+(c[n+-16>>2]|0)>>2]=c[10952];n=g+4|0;e=c[10953]|0;c[n>>2]=e;c[n+(c[e+-16>>2]|0)>>2]=c[10954];c[g>>2]=43744;c[g+4>>2]=43784;c[g+8>>2]=12880;a[g+16>>0]=0;c[g+12>>2]=g+(c[10932]|0);e=c[d>>2]|0;c[j>>2]=e;if((e|0)!=0?(d=e+((c[(c[e>>2]|0)+-12>>2]|0)+4)|0,n=(c[d>>2]|0)+1|0,c[d>>2]=n,(n|0)==0):0)Ha(79054,79014,48,79068);c[h>>2]=f;d=f+((c[(c[f>>2]|0)+-12>>2]|0)+4)|0;n=(c[d>>2]|0)+1|0;c[d>>2]=n;if(!n)Ha(79054,79014,48,79068);d=vN(b,j,XT(g,h)|0,0)|0;e=c[h>>2]|0;if((e|0)!=0?(h=c[(c[e>>2]|0)+-12>>2]|0,k=e+h|0,h=e+(h+4)|0,n=(c[h>>2]|0)+-1|0,c[h>>2]=n,!((k|0)==0|(n|0)!=0)):0)oc[c[(c[k>>2]|0)+4>>2]&2047](k);e=c[j>>2]|0;if((e|0)!=0?(k=c[(c[e>>2]|0)+-12>>2]|0,l=e+k|0,k=e+(k+4)|0,n=(c[k>>2]|0)+-1|0,c[k>>2]=n,!((l|0)==0|(n|0)!=0)):0)oc[c[(c[l>>2]|0)+4>>2]&2047](l);if(!d){n=0;i=m;return n|0}e=o$(d,1576,8200,0)|0;if((e|0)!=0?(l=e+((c[(c[e>>2]|0)+-12>>2]|0)+4)|0,n=(c[l>>2]|0)+1|0,c[l>>2]=n,(n|0)==0):0)Ha(79054,79014,48,79068);l=c[(c[d>>2]|0)+-12>>2]|0;f=d+l|0;l=d+(l+4)|0;n=(c[l>>2]|0)+-1|0;c[l>>2]=n;if((f|0)==0|(n|0)!=0){n=e;i=m;return n|0}oc[c[(c[f>>2]|0)+4>>2]&2047](f);n=e;i=m;return n|0}function vN(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0;l=i;i=i+144|0;j=l+24|0;k=l+16|0;g=l+8|0;h=l;if(!(c[d>>2]|0)){f=0;i=l;return f|0}o=c[11002]|0;c[j>>2]=o;c[j+(c[o+-16>>2]|0)>>2]=c[11003];o=j+4|0;m=c[11004]|0;c[o>>2]=m;c[o+(c[m+-16>>2]|0)>>2]=c[11005];m=j+8|0;n=c[11006]|0;c[m>>2]=n;c[m+(c[n+-16>>2]|0)>>2]=c[11007];n=c[11001]|0;c[j>>2]=n;c[j+(c[n+-16>>2]|0)>>2]=c[11008];c[o>>2]=c[11009];c[m>>2]=c[11010];kM(j+12|0,0,1);kM(j+20|0,0,1);kM(j+28|0,0,1);kM(j+40|0,0,1);c[j+52>>2]=12880;m=j+56|0;c[m>>2]=0;a[j+60>>0]=0;c[m>>2]=j+(c[(c[j>>2]|0)+-16>>2]|0);c[j>>2]=43884;c[j+4>>2]=43952;c[j+8>>2]=43984;kM(j+64|0,0,1);m=j+88|0;o=c[10951]|0;c[m>>2]=o;c[m+(c[o+-16>>2]|0)>>2]=c[10952];o=j+92|0;n=c[10953]|0;c[o>>2]=n;c[o+(c[n+-16>>2]|0)>>2]=c[10954];c[m>>2]=43744;c[j+92>>2]=43784;c[j+96>>2]=12880;a[j+104>>0]=0;c[j+100>>2]=m+(c[10932]|0);zU(k,j,d,e,f);kM(g,0,1);if(tM(k,g)|0){fU(h,b+56|0,d);rM(k,h)|0}g=hO(b,d,k)|0;if(g){n=g+((c[(c[g>>2]|0)+-12>>2]|0)+4)|0;o=(c[n>>2]|0)+1|0;c[n>>2]=o;if(!o)Ha(79054,79014,48,79068);n=c[(c[g>>2]|0)+-12>>2]|0;h=g+n|0;n=g+(n+4)|0;o=(c[n>>2]|0)+-1|0;c[n>>2]=o;if(!((h|0)==0|(o|0)!=0))oc[c[(c[h>>2]|0)+4>>2]&2047](h)}else g=0;o=g;i=l;return o|0}function wN(a){a=a|0;cH(a,39120);return}function xN(a){a=a|0;cH(a,39120);P_(a);return}function yN(a){a=a|0;cH(a+-4|0,39120);return}function zN(a){a=a|0;a=a+-4|0;cH(a,39120);P_(a);return}function AN(a){a=a|0;cH(a+-8|0,39120);return}function BN(a){a=a|0;a=a+-8|0;cH(a,39120);P_(a);return}function CN(a){a=a|0;cH(a+-12|0,39120);return}function DN(a){a=a|0;a=a+-12|0;cH(a,39120);P_(a);return}function EN(a){a=a|0;cH(a+-16|0,39120);return}function FN(a){a=a|0;a=a+-16|0;cH(a,39120);P_(a);return}function GN(a){a=a|0;cH(a+-20|0,39120);return}function HN(a){a=a|0;a=a+-20|0;cH(a,39120);P_(a);return}function IN(a){a=a|0;cH(a,39628);return}function JN(a){a=a|0;cH(a,39628);P_(a);return}function KN(a){a=a|0;cH(a+-4|0,39628);return}function LN(a){a=a|0;a=a+-4|0;cH(a,39628);P_(a);return}function MN(a){a=a|0;cH(a+-8|0,39628);return}function NN(a){a=a|0;a=a+-8|0;cH(a,39628);P_(a);return}function ON(a){a=a|0;cH(a+-12|0,39628);return}function PN(a){a=a|0;a=a+-12|0;cH(a,39628);P_(a);return}function QN(a){a=a|0;cH(a+-16|0,39628);return}function RN(a){a=a|0;a=a+-16|0;cH(a,39628);P_(a);return}function SN(a){a=a|0;cH(a+-20|0,39628);return}function TN(a){a=a|0;a=a+-20|0;cH(a,39628);P_(a);return}function UN(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0;m=i;i=i+48|0;g=m+8|0;j=m+4|0;h=m;f=c[e>>2]|0;if(!f){l=0;i=m;return l|0}n=c[10951]|0;c[g>>2]=n;c[g+(c[n+-16>>2]|0)>>2]=c[10952];n=g+4|0;e=c[10953]|0;c[n>>2]=e;c[n+(c[e+-16>>2]|0)>>2]=c[10954];c[g>>2]=43744;c[g+4>>2]=43784;c[g+8>>2]=12880;a[g+16>>0]=0;c[g+12>>2]=g+(c[10932]|0);e=c[d>>2]|0;c[j>>2]=e;if((e|0)!=0?(d=e+((c[(c[e>>2]|0)+-12>>2]|0)+4)|0,n=(c[d>>2]|0)+1|0,c[d>>2]=n,(n|0)==0):0)Ha(79054,79014,48,79068);c[h>>2]=f;d=f+((c[(c[f>>2]|0)+-12>>2]|0)+4)|0;n=(c[d>>2]|0)+1|0;c[d>>2]=n;if(!n)Ha(79054,79014,48,79068);d=VN(b,j,XT(g,h)|0,0)|0;e=c[h>>2]|0;if((e|0)!=0?(h=c[(c[e>>2]|0)+-12>>2]|0,k=e+h|0,h=e+(h+4)|0,n=(c[h>>2]|0)+-1|0,c[h>>2]=n,!((k|0)==0|(n|0)!=0)):0)oc[c[(c[k>>2]|0)+4>>2]&2047](k);e=c[j>>2]|0;if((e|0)!=0?(k=c[(c[e>>2]|0)+-12>>2]|0,l=e+k|0,k=e+(k+4)|0,n=(c[k>>2]|0)+-1|0,c[k>>2]=n,!((l|0)==0|(n|0)!=0)):0)oc[c[(c[l>>2]|0)+4>>2]&2047](l);if(!d){n=0;i=m;return n|0}e=o$(d,1576,8200,0)|0;if((e|0)!=0?(l=e+((c[(c[e>>2]|0)+-12>>2]|0)+4)|0,n=(c[l>>2]|0)+1|0,c[l>>2]=n,(n|0)==0):0)Ha(79054,79014,48,79068);l=c[(c[d>>2]|0)+-12>>2]|0;f=d+l|0;l=d+(l+4)|0;n=(c[l>>2]|0)+-1|0;c[l>>2]=n;if((f|0)==0|(n|0)!=0){n=e;i=m;return n|0}oc[c[(c[f>>2]|0)+4>>2]&2047](f);n=e;i=m;return n|0}function VN(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0;l=i;i=i+144|0;j=l+24|0;k=l+16|0;g=l+8|0;h=l;if(!(c[d>>2]|0)){f=0;i=l;return f|0}o=c[11002]|0;c[j>>2]=o;c[j+(c[o+-16>>2]|0)>>2]=c[11003];o=j+4|0;m=c[11004]|0;c[o>>2]=m;c[o+(c[m+-16>>2]|0)>>2]=c[11005];m=j+8|0;n=c[11006]|0;c[m>>2]=n;c[m+(c[n+-16>>2]|0)>>2]=c[11007];n=c[11001]|0;c[j>>2]=n;c[j+(c[n+-16>>2]|0)>>2]=c[11008];c[o>>2]=c[11009];c[m>>2]=c[11010];kM(j+12|0,0,1);kM(j+20|0,0,1);kM(j+28|0,0,1);kM(j+40|0,0,1);c[j+52>>2]=12880;m=j+56|0;c[m>>2]=0;a[j+60>>0]=0;c[m>>2]=j+(c[(c[j>>2]|0)+-16>>2]|0);c[j>>2]=43884;c[j+4>>2]=43952;c[j+8>>2]=43984;kM(j+64|0,0,1);m=j+88|0;o=c[10951]|0;c[m>>2]=o;c[m+(c[o+-16>>2]|0)>>2]=c[10952];o=j+92|0;n=c[10953]|0;c[o>>2]=n;c[o+(c[n+-16>>2]|0)>>2]=c[10954];c[m>>2]=43744;c[j+92>>2]=43784;c[j+96>>2]=12880;a[j+104>>0]=0;c[j+100>>2]=m+(c[10932]|0);zU(k,j,d,e,f);kM(g,0,1);if(tM(k,g)|0){fU(h,b+56|0,d);rM(k,h)|0}g=PR(b,d,k)|0;if(g){n=g+((c[(c[g>>2]|0)+-12>>2]|0)+4)|0;o=(c[n>>2]|0)+1|0;c[n>>2]=o;if(!o)Ha(79054,79014,48,79068);n=c[(c[g>>2]|0)+-12>>2]|0;h=g+n|0;n=g+(n+4)|0;o=(c[n>>2]|0)+-1|0;c[n>>2]=o;if(!((h|0)==0|(o|0)!=0))oc[c[(c[h>>2]|0)+4>>2]&2047](h)}else g=0;o=g;i=l;return o|0}function WN(a){a=a|0;BR(a,39512);return}function XN(a){a=a|0;BR(a,39512);P_(a);return}function YN(a){a=a|0;BR(a+-4|0,39512);return}function ZN(a){a=a|0;a=a+-4|0;BR(a,39512);P_(a);return}function _N(a){a=a|0;BR(a+-8|0,39512);return}function $N(a){a=a|0;a=a+-8|0;BR(a,39512);P_(a);return}function aO(a){a=a|0;BR(a+-12|0,39512);return}function bO(a){a=a|0;a=a+-12|0;BR(a,39512);P_(a);return}function cO(a){a=a|0;BR(a+-16|0,39512);return}function dO(a){a=a|0;a=a+-16|0;BR(a,39512);P_(a);return}function eO(a){a=a|0;BR(a+-20|0,39512);return}function fO(a){a=a|0;a=a+-20|0;BR(a,39512);P_(a);return}function gO(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,j=0,k=0,l=0,m=0;k=i;i=i+32|0;e=k+16|0;f=k+8|0;g=k;d=c[d>>2]|0;if(!d){j=0;i=k;return j|0}b=c[b>>2]|0;c[e>>2]=b;if((b|0)!=0?(m=b+((c[(c[b>>2]|0)+-12>>2]|0)+4)|0,l=(c[m>>2]|0)+1|0,c[m>>2]=l,(l|0)==0):0)Ha(79054,79014,48,79068);c[g>>2]=d;l=d+((c[(c[d>>2]|0)+-12>>2]|0)+4)|0;m=(c[l>>2]|0)+1|0;c[l>>2]=m;if(!m)Ha(79054,79014,48,79068);fU(f,a+56|0,g);e=hO(a,e,f)|0;d=c[g>>2]|0;if((d|0)!=0?(l=c[(c[d>>2]|0)+-12>>2]|0,h=d+l|0,l=d+(l+4)|0,m=(c[l>>2]|0)+-1|0,c[l>>2]=m,!((h|0)==0|(m|0)!=0)):0)oc[c[(c[h>>2]|0)+4>>2]&2047](h);if((b|0)!=0?(l=c[(c[b>>2]|0)+-12>>2]|0,j=b+l|0,l=b+(l+4)|0,m=(c[l>>2]|0)+-1|0,c[l>>2]=m,!((j|0)==0|(m|0)!=0)):0)oc[c[(c[j>>2]|0)+4>>2]&2047](j);if(!e){m=0;i=k;return m|0}d=o$(e,1576,8200,0)|0;if((d|0)!=0?(l=d+((c[(c[d>>2]|0)+-12>>2]|0)+4)|0,m=(c[l>>2]|0)+1|0,c[l>>2]=m,(m|0)==0):0)Ha(79054,79014,48,79068);l=c[(c[e>>2]|0)+-12>>2]|0;b=e+l|0;l=e+(l+4)|0;m=(c[l>>2]|0)+-1|0;c[l>>2]=m;if((b|0)==0|(m|0)!=0){m=d;i=k;return m|0}oc[c[(c[b>>2]|0)+4>>2]&2047](b);m=d;i=k;return m|0}function hO(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0;h=a+140|0;g=a+144|0;ZG(h,c[g>>2]|0);c[a+148>>2]=0;c[h>>2]=g;c[g>>2]=0;rM(a+48|0,d)|0;g=c[b>>2]|0;if(!g){m=0;return m|0}h=a+152|0;pc[c[(c[h>>2]|0)+12>>2]&1023](h,g);d=c[g+4>>2]|0;f=g+8|0;a:do if((d|0)==(c[f>>2]|0))j=4;else{while(1){e=rc[c[(c[h>>2]|0)+24>>2]&127](h)|0;b=c[h>>2]|0;if(e){i=b;break a}e=c[d>>2]|0;if(!e)break;pc[c[b+8>>2]&1023](h,e);d=d+4|0;if((d|0)==(c[f>>2]|0)){j=4;break a}}Ha(78999,79014,95,78956)}while(0);if((j|0)==4)i=c[h>>2]|0;pc[c[i+16>>2]&1023](h,g);i=a+44|0;d=c[i>>2]|0;h=a+40|0;e=c[h>>2]|0;b=d+-1+e|0;g=a+28|0;f=c[g>>2]|0;b=c[(c[f+(b>>>10<<2)>>2]|0)+((b&1023)<<2)>>2]|0;do if(b){d=b+((c[(c[b>>2]|0)+-12>>2]|0)+4)|0;j=(c[d>>2]|0)+1|0;c[d>>2]=j;if(!j)Ha(79054,79014,48,79068);else{k=c[i>>2]|0;m=b;break}}else{k=d;m=0}while(0);d=k+-1+e|0;d=c[(c[f+(d>>>10<<2)>>2]|0)+((d&1023)<<2)>>2]|0;if((d|0)!=0?(j=c[(c[d>>2]|0)+-12>>2]|0,l=d+j|0,j=d+(j+4)|0,k=(c[j>>2]|0)+-1|0,c[j>>2]=k,!((l|0)==0|(k|0)!=0)):0){oc[c[(c[l>>2]|0)+4>>2]&2047](l);f=c[g>>2]|0;e=c[h>>2]|0}l=c[i>>2]|0;c[i>>2]=l+-1;d=a+32|0;b=c[d>>2]|0;if((1-e-l+((b|0)==(f|0)?0:(b-f<<8)+-1|0)|0)>>>0<=2047)return m|0;P_(c[b+-4>>2]|0);c[d>>2]=(c[d>>2]|0)+-4;return m|0}function iO(b){b=b|0;var d=0,e=0,f=0,g=0,h=0,j=0,k=0,l=0,m=0,o=0,p=0,q=0,r=0,s=0,t=0;s=i;i=i+32|0;m=s+12|0;l=s+8|0;k=s+4|0;r=s;o=b+140|0;d=c[o>>2]|0;p=b+144|0;a:do if((d|0)!=(p|0)){h=b+4|0;e=d;while(1){f=c[e+28>>2]|0;if(f){t=f+((c[(c[f>>2]|0)+-12>>2]|0)+4)|0;d=(c[t>>2]|0)+1|0;c[t>>2]=d;if(!d){d=5;break}BF(m,f);if((a[8952]|0)==0?(Ga(8952)|0)!=0:0){$e(39720);Ta(52,39720,n|0)|0;$a(8952)}t=_e(39720,m,0)|0;c[l>>2]=t;if(t){LO(l,1);d=c[l>>2]|0;c[k>>2]=d;if((d|0)!=0?(d=d+((c[(c[d>>2]|0)+-12>>2]|0)+4)|0,t=(c[d>>2]|0)+1|0,c[d>>2]=t,(t|0)==0):0){d=12;break}Dc[c[(c[h>>2]|0)+60>>2]&63](h,k,0);d=c[k>>2]|0;if((d|0)!=0?(t=c[(c[d>>2]|0)+-12>>2]|0,g=d+t|0,d=d+(t+4)|0,t=(c[d>>2]|0)+-1|0,c[d>>2]=t,!((g|0)==0|(t|0)!=0)):0)oc[c[(c[g>>2]|0)+4>>2]&2047](g);d=c[l>>2]|0;if((d|0)!=0?(t=c[(c[d>>2]|0)+-12>>2]|0,j=d+t|0,d=d+(t+4)|0,t=(c[d>>2]|0)+-1|0,c[d>>2]=t,!((j|0)==0|(t|0)!=0)):0)oc[c[(c[j>>2]|0)+4>>2]&2047](j)}o2(m);t=c[(c[f>>2]|0)+-12>>2]|0;d=f+t|0;f=f+(t+4)|0;t=(c[f>>2]|0)+-1|0;c[f>>2]=t;if(!((d|0)==0|(t|0)!=0))oc[c[(c[d>>2]|0)+4>>2]&2047](d)}d=c[e+4>>2]|0;if(!d)while(1){d=c[e+8>>2]|0;if((c[d>>2]|0)==(e|0))break;else e=d}else while(1){e=c[d>>2]|0;if(!e)break;else d=e}if((d|0)==(p|0))break a;else e=d}if((d|0)==5)Ha(79054,79014,48,79068);else if((d|0)==12)Ha(79054,79014,48,79068)}while(0);ZG(o,c[p>>2]|0);c[b+148>>2]=0;c[o>>2]=p;c[p>>2]=0;f=b+128|0;d=c[f>>2]|0;g=b+132|0;if((d|0)==(g|0)){t=c[g>>2]|0;ZG(f,t);t=b+136|0;c[t>>2]=0;c[f>>2]=g;c[g>>2]=0;i=s;return}e=d;while(1){d=c[e+28>>2]|0;c[r>>2]=d;if(d){p=d+((c[(c[d>>2]|0)+-12>>2]|0)+4)|0;t=(c[p>>2]|0)+1|0;c[p>>2]=t;if(!t){d=30;break}LO(r,1);d=c[r>>2]|0;if((d|0)!=0?(p=c[(c[d>>2]|0)+-12>>2]|0,q=d+p|0,p=d+(p+4)|0,t=(c[p>>2]|0)+-1|0,c[p>>2]=t,!((q|0)==0|(t|0)!=0)):0)oc[c[(c[q>>2]|0)+4>>2]&2047](q)}d=c[e+4>>2]|0;if(!d)while(1){d=c[e+8>>2]|0;if((c[d>>2]|0)==(e|0))break;else e=d}else while(1){e=c[d>>2]|0;if(!e)break;else d=e}if((d|0)==(g|0)){d=39;break}else e=d}if((d|0)==30)Ha(79054,79014,48,79068);else if((d|0)==39){t=c[g>>2]|0;ZG(f,t);t=b+136|0;c[t>>2]=0;c[f>>2]=g;c[g>>2]=0;i=s;return}}function jO(b){b=b|0;var d=0,e=0,f=0,g=0,h=0,j=0;g=i;i=i+16|0;f=g+12|0;b=g;d=O_(64)|0;c[d+4>>2]=0;c[d+8>>2]=0;c[d+12>>2]=0;j=d+20|0;c[j>>2]=0;c[j+4>>2]=0;c[j+8>>2]=0;c[j+12>>2]=0;c[j+16>>2]=0;c[j+20>>2]=0;a[j+24>>0]=0;c[d+48>>2]=0;c[d>>2]=17848;c[d+56>>2]=17944;c[d+16>>2]=17916;c[d+52>>2]=106;c[f>>2]=d;c[d+60>>2]=2;j=c[(c[d>>2]|0)+-12>>2]|0;e=d+j|0;j=d+(j+4)|0;h=(c[j>>2]|0)+-1|0;c[j>>2]=h;if(!((e|0)==0|(h|0)!=0))oc[c[(c[e>>2]|0)+4>>2]&2047](e);l2(b,76802,3);ad(d,b);o2(b);LO(f,1);b=c[f>>2]|0;if(!b){i=g;return b|0}h=b+((c[(c[b>>2]|0)+-12>>2]|0)+4)|0;j=(c[h>>2]|0)+1|0;c[h>>2]=j;if(!j)Ha(79054,79014,48,79068);h=c[(c[b>>2]|0)+-12>>2]|0;d=b+h|0;h=b+(h+4)|0;j=(c[h>>2]|0)+-1|0;c[h>>2]=j;if((d|0)==0|(j|0)!=0){i=g;return b|0}oc[c[(c[d>>2]|0)+4>>2]&2047](d);i=g;return b|0}function kO(b,d){b=b|0;d=d|0;var e=0,f=0;f=b+140|0;e=b+144|0;ZG(f,c[e>>2]|0);c[b+148>>2]=0;c[f>>2]=e;c[e>>2]=0;c[b+120>>2]=1;a[b+124>>0]=+jM(b+48|0)>.001&1;a[b+125>>0]=0;HT(b+4|0,d);hU(b+56|0,d);return}function lO(b,d){b=b|0;d=d|0;var e=0,f=0;b=b+-4|0;f=b+140|0;e=b+144|0;ZG(f,c[e>>2]|0);c[b+148>>2]=0;c[f>>2]=e;c[e>>2]=0;c[b+120>>2]=1;a[b+124>>0]=+jM(b+48|0)>.001&1;a[b+125>>0]=0;HT(b+4|0,d);hU(b+56|0,d);return}function mO(b,d){b=b|0;d=d|0;var e=0,f=0;b=b+-8|0;f=b+140|0;e=b+144|0;ZG(f,c[e>>2]|0);c[b+148>>2]=0;c[f>>2]=e;c[e>>2]=0;c[b+120>>2]=1;a[b+124>>0]=+jM(b+48|0)>.001&1;a[b+125>>0]=0;HT(b+4|0,d);hU(b+56|0,d);return}function nO(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,j=0,k=0,l=0,m=0;m=i;i=i+48|0;j=m+32|0;f=m+24|0;h=m+16|0;e=m+8|0;g=m;l=b+56|0;lM(f,b+68|0);nM(j,b+48|0,f);f=c[d>>2]|0;if(!f)Ha(78999,79014,102,79043);lM(e,b+84|0);se(h,f,e,c[b+92>>2]|0);if((c[j>>2]|0)<=0){a[b+124>>0]=0;iO(b);iU(l,d);i=m;return}f=b+4|0;if(tM(j,h)|0){e=c[(c[f>>2]|0)+60>>2]|0;c[g>>2]=jO(0)|0;Dc[e&63](f,g,1);e=c[g>>2]|0;if((e|0)!=0?(h=c[(c[e>>2]|0)+-12>>2]|0,k=e+h|0,h=e+(h+4)|0,j=(c[h>>2]|0)+-1|0,c[h>>2]=j,!((k|0)==0|(j|0)!=0)):0)oc[c[(c[k>>2]|0)+4>>2]&2047](k);a[b+125>>0]=1}JT(f,d);iU(l,d);i=m;return}function oO(a,b){a=a|0;b=b|0;nO(a+-4|0,b);return}function pO(a,b){a=a|0;b=b|0;nO(a+-12|0,b);return}function qO(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0;o=i;i=i+48|0;j=o+40|0;e=o+32|0;g=o+24|0;f=o+16|0;h=o+8|0;k=o;n=b+56|0;lM(e,b+68|0);nM(j,b+48|0,e);if((c[j>>2]|0)<=0){a[b+124>>0]=0;iO(b);kU(n,d);i=o;return}e=c[d>>2]|0;if(!e)Ha(78999,79014,102,79043);e=c[e+48>>2]|0;if((e|0)!=-999)c[b+120>>2]=e;lM(g,b+84|0);c[f>>2]=c[b+92>>2];e=c[d>>2]|0;if(!e)Ha(78999,79014,102,79043);FE(h,e,g,f);if(sM(h,j)|0){e=c[d>>2]|0;if(!e)Ha(78999,79014,95,78956);GE(e,j)|0;e=c[d>>2]|0;if(!e)Ha(78999,79014,102,79043);c[e+56>>2]=0;f=e+48|0;if((c[f>>2]|0)==-999)c[f>>2]=c[b+120>>2];if((a[b+104>>0]|0)==0?(B2(e+20|0,77021)|0)!=0:0){f=b+4|0;e=c[(c[f>>2]|0)+60>>2]|0;c[k>>2]=jO(0)|0;Dc[e&63](f,k,1);e=c[k>>2]|0;if((e|0)!=0?(j=c[(c[e>>2]|0)+-12>>2]|0,l=e+j|0,j=e+(j+4)|0,k=(c[j>>2]|0)+-1|0,c[j>>2]=k,!((l|0)==0|(k|0)!=0)):0)oc[c[(c[l>>2]|0)+4>>2]&2047](l);LT(f,d);k=b+44|0;j=b+40|0;g=c[j>>2]|0;h=(c[k>>2]|0)+-1+g|0;e=b+28|0;f=c[e>>2]|0;h=c[(c[f+(h>>>10<<2)>>2]|0)+((h&1023)<<2)>>2]|0;if((h|0)!=0?(l=c[(c[h>>2]|0)+-12>>2]|0,m=h+l|0,h=h+(l+4)|0,l=(c[h>>2]|0)+-1|0,c[h>>2]=l,!((m|0)==0|(l|0)!=0)):0){oc[c[(c[m>>2]|0)+4>>2]&2047](m);h=c[e>>2]|0;g=c[j>>2]|0}else h=f;m=c[k>>2]|0;c[k>>2]=m+-1;e=b+32|0;f=c[e>>2]|0;if((1-g-m+((f|0)==(h|0)?0:(f-h<<8)+-1|0)|0)>>>0<=2047){kU(n,d);i=o;return}P_(c[f+-4>>2]|0);c[e>>2]=(c[e>>2]|0)+-4;kU(n,d);i=o;return}}LT(b+4|0,d);kU(n,d);i=o;return}function rO(a,b){a=a|0;b=b|0;qO(a+-4|0,b);return}function sO(a,b){a=a|0;b=b|0;qO(a+-16|0,b);return}function tO(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,j=0,k=0,l=0,m=0;m=i;i=i+48|0;g=m+32|0;e=m+24|0;l=m+12|0;j=m;lM(g,b+68|0);nM(e,b+48|0,g);e=c[e>>2]|0;a:do if((e|0)>0)g=d;else{do if(!e){e=c[d>>2]|0;if(e)if(AF(e)|0){g=d;break a}else break;else Ha(78999,79014,102,79043)}while(0);a[b+124>>0]=0;iO(b);i=m;return}while(0);NT(b+4|0,d);e=c[g>>2]|0;if(!e)Ha(78999,79014,102,79043);k2(l,e+20|0);e=c[g>>2]|0;if(!e)Ha(78999,79014,102,79043);do if(zF(e)|0){f=FO(b+140|0,l)|0;e=c[g>>2]|0;d=c[f>>2]|0;if((d|0)!=(e|0)){if((e|0)!=0?(j=e+((c[(c[e>>2]|0)+-12>>2]|0)+4)|0,k=(c[j>>2]|0)+1|0,c[j>>2]=k,(k|0)==0):0)Ha(79054,79014,48,79068);if((d|0)!=0?(j=c[(c[d>>2]|0)+-12>>2]|0,h=d+j|0,j=d+(j+4)|0,k=(c[j>>2]|0)+-1|0,c[j>>2]=k,!((h|0)==0|(k|0)!=0)):0)oc[c[(c[h>>2]|0)+4>>2]&2047](h);c[f>>2]=e}}else{e=c[g>>2]|0;if(!e)Ha(78999,79014,102,79043);if(AF(e)|0){e=c[g>>2]|0;if(!e)Ha(78999,79014,102,79043);BF(j,e);e=FO(b+140|0,j)|0;d=c[e>>2]|0;if(d){b=c[(c[d>>2]|0)+-12>>2]|0;f=d+b|0;b=d+(b+4)|0;k=(c[b>>2]|0)+-1|0;c[b>>2]=k;if(!((f|0)==0|(k|0)!=0))oc[c[(c[f>>2]|0)+4>>2]&2047](f);c[e>>2]=0}o2(j);break}e=c[g>>2]|0;if(!e)Ha(78999,79014,102,79043);if(rc[c[(c[e>>2]|0)+8>>2]&127](e)|0){f=FO(b+128|0,l)|0;e=(c[b+44>>2]|0)+-1+(c[b+40>>2]|0)|0;e=c[(c[(c[b+28>>2]|0)+(e>>>10<<2)>>2]|0)+((e&1023)<<2)>>2]|0;if(!e)d=0;else d=o$(e,1576,8280,0)|0;e=c[f>>2]|0;if((e|0)!=(d|0)){if((d|0)!=0?(b=d+((c[(c[d>>2]|0)+-12>>2]|0)+4)|0,j=(c[b>>2]|0)+1|0,c[b>>2]=j,(j|0)==0):0)Ha(79054,79014,48,79068);if((e|0)!=0?(b=c[(c[e>>2]|0)+-12>>2]|0,k=e+b|0,b=e+(b+4)|0,j=(c[b>>2]|0)+-1|0,c[b>>2]=j,!((k|0)==0|(j|0)!=0)):0)oc[c[(c[k>>2]|0)+4>>2]&2047](k);c[f>>2]=d}}}while(0);o2(l);i=m;return}function uO(a,b){a=a|0;b=b|0;tO(a+-4|0,b);return}function vO(a,b){a=a|0;b=b|0;tO(a+-20|0,b);return}function wO(b,d){b=b|0;d=d|0;var e=0,f=0;if(!(a[b+124>>0]|0))return;TT(b+4|0,d);e=c[d>>2]|0;if(!e)Ha(78999,79014,102,79043);if(!(rc[c[(c[e>>2]|0)+8>>2]&127](e)|0))return;e=c[d>>2]|0;if(!e)Ha(78999,79014,102,79043);e=FO(b+128|0,e+20|0)|0;d=c[e>>2]|0;if(!d)return;f=c[(c[d>>2]|0)+-12>>2]|0;b=d+f|0;f=d+(f+4)|0;d=(c[f>>2]|0)+-1|0;c[f>>2]=d;if(!((b|0)==0|(d|0)!=0))oc[c[(c[b>>2]|0)+4>>2]&2047](b);c[e>>2]=0;return}function xO(a,b){a=a|0;b=b|0;wO(a+-4|0,b);return}function yO(a,b){a=a|0;b=b|0;wO(a+-20|0,b);return}function zO(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0;if(!(a[b+124>>0]|0)){b=b+56|0;nU(b,d);return}RT(b+4|0,d);l=b+125|0;if(!(a[l>>0]|0)){b=b+56|0;nU(b,d);return}k=b+44|0;j=b+40|0;g=c[j>>2]|0;h=(c[k>>2]|0)+-1+g|0;e=b+28|0;f=c[e>>2]|0;h=c[(c[f+(h>>>10<<2)>>2]|0)+((h&1023)<<2)>>2]|0;if((h|0)!=0?(m=c[(c[h>>2]|0)+-12>>2]|0,i=h+m|0,m=h+(m+4)|0,h=(c[m>>2]|0)+-1|0,c[m>>2]=h,!((i|0)==0|(h|0)!=0)):0){oc[c[(c[i>>2]|0)+4>>2]&2047](i);h=c[e>>2]|0;g=c[j>>2]|0}else h=f;m=c[k>>2]|0;c[k>>2]=m+-1;e=b+32|0;f=c[e>>2]|0;if((1-g-m+((f|0)==(h|0)?0:(f-h<<8)+-1|0)|0)>>>0>2047){P_(c[f+-4>>2]|0);c[e>>2]=(c[e>>2]|0)+-4}a[l>>0]=0;m=b+56|0;nU(m,d);return}function AO(a,b){a=a|0;b=b|0;zO(a+-4|0,b);return}function BO(a,b){a=a|0;b=b|0;zO(a+-12|0,b);return}function CO(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;PT(a+4|0,b);g=a+44|0;b=c[g>>2]|0;if(b>>>0<=1)return;h=a+40|0;i=a+28|0;f=a+32|0;do{d=c[h>>2]|0;a=b+-1+d|0;b=c[i>>2]|0;a=c[(c[b+(a>>>10<<2)>>2]|0)+((a&1023)<<2)>>2]|0;if((a|0)!=0?(e=c[(c[a>>2]|0)+-12>>2]|0,j=a+e|0,a=a+(e+4)|0,e=(c[a>>2]|0)+-1|0,c[a>>2]=e,!((j|0)==0|(e|0)!=0)):0){oc[c[(c[j>>2]|0)+4>>2]&2047](j);e=c[i>>2]|0;d=c[h>>2]|0}else e=b;k=c[g>>2]|0;b=k+-1|0;c[g>>2]=b;a=c[f>>2]|0;if((1-d-k+((a|0)==(e|0)?0:(a-e<<8)+-1|0)|0)>>>0>2047){P_(c[a+-4>>2]|0);c[f>>2]=(c[f>>2]|0)+-4;b=c[g>>2]|0}}while(b>>>0>1);return}function DO(a,b){a=a|0;b=b|0;CO(a+-4|0,b);return}function EO(a,b){a=a|0;b=b|0;CO(a+-8|0,b);return}function FO(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0;h=i;i=i+16|0;e=h;f=GO(a,e,b)|0;d=c[f>>2]|0;if(d){a=d;a=a+28|0;i=h;return a|0}g=O_(32)|0;k2(g+16|0,b);c[g+28>>2]=0;d=c[e>>2]|0;c[g>>2]=0;c[g+4>>2]=0;c[g+8>>2]=d;c[f>>2]=g;d=c[c[a>>2]>>2]|0;if(!d)d=g;else{c[a>>2]=d;d=c[f>>2]|0}kE(c[a+4>>2]|0,d);a=a+8|0;c[a>>2]=(c[a>>2]|0)+1;a=g;a=a+28|0;i=h;return a|0}function GO(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0;f=b+4|0;b=c[f>>2]|0;if(!b){c[d>>2]=f;d=f;return d|0}j=a[e>>0]|0;i=(j&1)==0;j=i?(j&255)>>>1:c[e+4>>2]|0;i=i?e+1|0:c[e+8>>2]|0;while(1){e=b+16|0;f=a[e>>0]|0;g=(f&1)==0;f=g?(f&255)>>>1:c[b+20>>2]|0;e=g?e+1|0:c[b+24>>2]|0;g=f>>>0>>0;k=c1(i,e,g?f:j)|0;h=j>>>0>>0;if((((k|0)==0?(h?-2147483648:0):k)|0)<0){f=c[b>>2]|0;if(!f){f=b;e=5;break}else b=f}else{k=c1(e,i,h?j:f)|0;if((((k|0)==0?(g?-2147483648:0):k)|0)>=0){e=10;break}f=b+4|0;e=c[f>>2]|0;if(!e){e=9;break}else b=e}}if((e|0)==5){c[d>>2]=b;k=f;return k|0}else if((e|0)==9){c[d>>2]=b;k=f;return k|0}else if((e|0)==10){c[d>>2]=b;k=d;return k|0}return 0}function HO(a){a=a|0;var b=0,d=0,e=0,f=0;f=i;i=i+16|0;b=f;a=c[a>>2]|0;if(!a)Ha(78999,79014,102,79043);l2(b,76449,6);d=cd(a,b)|0;o2(b);if(!d){e=0;i=f;return e|0}a=d+20|0;if(B2(a,76456)|0)if(B2(a,76462)|0)if(B2(a,76466)|0)if(!(B2(a,76476)|0)){a=-1;e=8}else a=0;else{a=3;e=8}else{a=2;e=8}else{a=1;e=8}b=d+4|0;e=(c[b>>2]|0)+-1|0;c[b>>2]=e;if(e){e=a;i=f;return e|0}oc[c[(c[d>>2]|0)+4>>2]&2047](d);e=a;i=f;return e|0}function IO(a){a=a|0;var b=0,d=0;d=i;i=i+16|0;b=d;a=c[a>>2]|0;if(!a)Ha(78999,79014,102,79043);else{l2(b,76449,6);dd(a,b);o2(b);i=d;return}}function JO(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;e=i;i=i+16|0;d=e;a=c[a>>2]|0;if(!a){c[d>>2]=0;i=e;return}a=o$(a,1576,8280,0)|0;c[d>>2]=a;if(!a){i=e;return}f=a+((c[(c[a>>2]|0)+-12>>2]|0)+4)|0;a=(c[f>>2]|0)+1|0;c[f>>2]=a;if(!a)Ha(79054,79014,48,79068);KO(d,b);a=c[d>>2]|0;if(!a){i=e;return}b=c[(c[a>>2]|0)+-12>>2]|0;d=a+b|0;b=a+(b+4)|0;f=(c[b>>2]|0)+-1|0;c[b>>2]=f;if((d|0)==0|(f|0)!=0){i=e;return}oc[c[(c[d>>2]|0)+4>>2]&2047](d);i=e;return}function KO(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,j=0;j=i;i=i+64|0;d=j+48|0;e=j+36|0;f=j+24|0;g=j+12|0;h=j;a=c[a>>2]|0;if(!a)Ha(78999,79014,102,79043);l2(d,76449,6);a=cd(a,d)|0;o2(d);if(!a){i=j;return}switch(b|0){case 1:{l2(e,76456,5);Tc(a,e,1);o2(e);break}case 2:{l2(f,76462,3);Tc(a,f,1);o2(f);break}case 3:{l2(g,76466,9);Tc(a,g,1);o2(g);break}default:{l2(h,76476,6);Tc(a,h,1);o2(h)}}h=a+4|0;b=(c[h>>2]|0)+-1|0;c[h>>2]=b;if(b){i=j;return}oc[c[(c[a>>2]|0)+4>>2]&2047](a);i=j;return}function LO(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,j=0,k=0,l=0,m=0;m=i;i=i+64|0;e=m+52|0;g=m+40|0;h=m+28|0;l=m+24|0;j=m+12|0;k=m;d=c[a>>2]|0;if(!d)Ha(78999,79014,102,79043);switch(c[d+52>>2]|0){case 65:case 69:case 91:case 110:case 111:case 113:case 121:case 122:case 51:case 53:case 105:case 64:case 14:{i=m;return}default:{}}l2(e,76449,6);f=cd(d,e)|0;o2(e);if(f){d=f+20|0;if(b){if(!(B2(d,76456)|0)){l2(g,76466,9);Tc(f,g,1);o2(g)}}else if(!(B2(d,76462)|0)){l2(h,76466,9);Tc(f,h,1);o2(h)}l=f+4|0;b=(c[l>>2]|0)+-1|0;c[l>>2]=b;if(b){i=m;return}oc[c[(c[f>>2]|0)+4>>2]&2047](f);i=m;return}d=bd()|0;c[l>>2]=d;if(!d)Ha(78999,79014,102,79043);l2(j,76449,6);Rc(d,j);o2(j);l2(k,b?76462:76456,b?3:5);Tc(d,k,1);o2(k);d=c[a>>2]|0;if(!d)Ha(78999,79014,102,79043);gd(d,l)|0;d=c[l>>2]|0;if(!d){i=m;return}l=d+4|0;b=(c[l>>2]|0)+-1|0;c[l>>2]=b;if(b){i=m;return}oc[c[(c[d>>2]|0)+4>>2]&2047](d);i=m;return}function MO(a){a=a|0;var b=0;b=a+24|0;c[b>>2]=0;c[b+4>>2]=0;c[b+8>>2]=0;c[b+12>>2]=0;c[b+16>>2]=0;c[b+20>>2]=0;c[a>>2]=39748;c[a+4>>2]=39788;c[a+8>>2]=39880;c[a+12>>2]=39912;c[a+16>>2]=39944;c[a+20>>2]=39976;c[a+48>>2]=40008;c[a+52>>2]=0;c[a+60>>2]=0;return}function NO(a){a=a|0;var b=0,d=0,e=0,f=0,g=0;c[a+4>>2]=1136;c[a+8>>2]=1228;c[a+12>>2]=1260;c[a+16>>2]=1292;c[a+20>>2]=1324;g=a+24|0;pG(g);e=a+28|0;b=c[e>>2]|0;f=a+32|0;d=c[f>>2]|0;if((b|0)!=(d|0)){a=b;do{P_(c[a>>2]|0);a=a+4|0}while((a|0)!=(d|0));a=c[e>>2]|0;b=c[f>>2]|0;if((b|0)!=(a|0))c[f>>2]=b+(~((b+-4-a|0)>>>2)<<2)}a=c[g>>2]|0;if(!a)return;P_(a);return}function OO(a){a=a|0;var b=0,d=0,e=0,f=0;f=a+-4|0;c[f+4>>2]=1136;c[f+8>>2]=1228;c[f+12>>2]=1260;c[f+16>>2]=1292;c[f+20>>2]=1324;e=f+24|0;pG(e);d=f+28|0;a=c[d>>2]|0;f=f+32|0;b=c[f>>2]|0;if((a|0)!=(b|0)){do{P_(c[a>>2]|0);a=a+4|0}while((a|0)!=(b|0));a=c[d>>2]|0;b=c[f>>2]|0;if((b|0)!=(a|0))c[f>>2]=b+(~((b+-4-a|0)>>>2)<<2)}a=c[e>>2]|0;if(!a)return;P_(a);return}function PO(a){a=a|0;var b=0,d=0,e=0,f=0;f=a+-8|0;c[f+4>>2]=1136;c[f+8>>2]=1228;c[f+12>>2]=1260;c[f+16>>2]=1292;c[f+20>>2]=1324;e=f+24|0;pG(e);d=f+28|0;a=c[d>>2]|0;f=f+32|0;b=c[f>>2]|0;if((a|0)!=(b|0)){do{P_(c[a>>2]|0);a=a+4|0}while((a|0)!=(b|0));a=c[d>>2]|0;b=c[f>>2]|0;if((b|0)!=(a|0))c[f>>2]=b+(~((b+-4-a|0)>>>2)<<2)}a=c[e>>2]|0;if(!a)return;P_(a);return}function QO(a){a=a|0;var b=0,d=0,e=0,f=0;f=a+-12|0;c[f+4>>2]=1136;c[f+8>>2]=1228;c[f+12>>2]=1260;c[f+16>>2]=1292;c[f+20>>2]=1324;e=f+24|0;pG(e);d=f+28|0;a=c[d>>2]|0;f=f+32|0;b=c[f>>2]|0;if((a|0)!=(b|0)){do{P_(c[a>>2]|0);a=a+4|0}while((a|0)!=(b|0));a=c[d>>2]|0;b=c[f>>2]|0;if((b|0)!=(a|0))c[f>>2]=b+(~((b+-4-a|0)>>>2)<<2)}a=c[e>>2]|0;if(!a)return;P_(a);return}function RO(a){a=a|0;var b=0,d=0,e=0,f=0;f=a+-16|0;c[f+4>>2]=1136;c[f+8>>2]=1228;c[f+12>>2]=1260;c[f+16>>2]=1292;c[f+20>>2]=1324;e=f+24|0;pG(e);d=f+28|0;a=c[d>>2]|0;f=f+32|0;b=c[f>>2]|0;if((a|0)!=(b|0)){do{P_(c[a>>2]|0);a=a+4|0}while((a|0)!=(b|0));a=c[d>>2]|0;b=c[f>>2]|0;if((b|0)!=(a|0))c[f>>2]=b+(~((b+-4-a|0)>>>2)<<2)}a=c[e>>2]|0;if(!a)return;P_(a);return}function SO(a){a=a|0;var b=0,d=0,e=0,f=0;f=a+-20|0;c[f+4>>2]=1136;c[f+8>>2]=1228;c[f+12>>2]=1260;c[f+16>>2]=1292;c[f+20>>2]=1324;e=f+24|0;pG(e);d=f+28|0;a=c[d>>2]|0;f=f+32|0;b=c[f>>2]|0;if((a|0)!=(b|0)){do{P_(c[a>>2]|0);a=a+4|0}while((a|0)!=(b|0));a=c[d>>2]|0;b=c[f>>2]|0;if((b|0)!=(a|0))c[f>>2]=b+(~((b+-4-a|0)>>>2)<<2)}a=c[e>>2]|0;if(!a)return;P_(a);return}function TO(a){a=a|0;var b=0,d=0,e=0,f=0;f=a+-48|0;c[f+4>>2]=1136;c[f+8>>2]=1228;c[f+12>>2]=1260;c[f+16>>2]=1292;c[f+20>>2]=1324;e=f+24|0;pG(e);d=f+28|0;a=c[d>>2]|0;f=f+32|0;b=c[f>>2]|0;if((a|0)!=(b|0)){do{P_(c[a>>2]|0);a=a+4|0}while((a|0)!=(b|0));a=c[d>>2]|0;b=c[f>>2]|0;if((b|0)!=(a|0))c[f>>2]=b+(~((b+-4-a|0)>>>2)<<2)}a=c[e>>2]|0;if(!a)return;P_(a);return}function UO(a){a=a|0;var b=0,d=0,e=0,f=0,g=0;c[a+4>>2]=1136;c[a+8>>2]=1228;c[a+12>>2]=1260;c[a+16>>2]=1292;c[a+20>>2]=1324;f=a+24|0;pG(f);d=a+28|0;b=c[d>>2]|0;g=a+32|0;e=c[g>>2]|0;if((b|0)!=(e|0)){do{P_(c[b>>2]|0);b=b+4|0}while((b|0)!=(e|0));b=c[d>>2]|0;d=c[g>>2]|0;if((d|0)!=(b|0))c[g>>2]=d+(~((d+-4-b|0)>>>2)<<2)}b=c[f>>2]|0;if(!b){P_(a);return}P_(b);P_(a);return}function VO(a){a=a|0;var b=0,d=0,e=0,f=0,g=0;g=a+-4|0;c[g+4>>2]=1136;c[g+8>>2]=1228;c[g+12>>2]=1260;c[g+16>>2]=1292;c[g+20>>2]=1324;e=g+24|0;pG(e);d=g+28|0;a=c[d>>2]|0;f=g+32|0;b=c[f>>2]|0;if((a|0)!=(b|0)){do{P_(c[a>>2]|0);a=a+4|0}while((a|0)!=(b|0));a=c[d>>2]|0;b=c[f>>2]|0;if((b|0)!=(a|0))c[f>>2]=b+(~((b+-4-a|0)>>>2)<<2)}a=c[e>>2]|0;if(!a){P_(g);return}P_(a);P_(g);return}function WO(a){a=a|0;var b=0,d=0,e=0,f=0,g=0;g=a+-8|0;c[g+4>>2]=1136;c[g+8>>2]=1228;c[g+12>>2]=1260;c[g+16>>2]=1292;c[g+20>>2]=1324;e=g+24|0;pG(e);d=g+28|0;a=c[d>>2]|0;f=g+32|0;b=c[f>>2]|0;if((a|0)!=(b|0)){do{P_(c[a>>2]|0);a=a+4|0}while((a|0)!=(b|0));a=c[d>>2]|0;b=c[f>>2]|0;if((b|0)!=(a|0))c[f>>2]=b+(~((b+-4-a|0)>>>2)<<2)}a=c[e>>2]|0;if(!a){P_(g);return}P_(a);P_(g);return}function XO(a){a=a|0;var b=0,d=0,e=0,f=0,g=0;g=a+-12|0;c[g+4>>2]=1136;c[g+8>>2]=1228;c[g+12>>2]=1260;c[g+16>>2]=1292;c[g+20>>2]=1324;e=g+24|0;pG(e);d=g+28|0;a=c[d>>2]|0;f=g+32|0;b=c[f>>2]|0;if((a|0)!=(b|0)){do{P_(c[a>>2]|0);a=a+4|0}while((a|0)!=(b|0));a=c[d>>2]|0;b=c[f>>2]|0;if((b|0)!=(a|0))c[f>>2]=b+(~((b+-4-a|0)>>>2)<<2)}a=c[e>>2]|0;if(!a){P_(g);return}P_(a);P_(g);return}function YO(a){a=a|0;var b=0,d=0,e=0,f=0,g=0;g=a+-16|0;c[g+4>>2]=1136;c[g+8>>2]=1228;c[g+12>>2]=1260;c[g+16>>2]=1292;c[g+20>>2]=1324;e=g+24|0;pG(e);d=g+28|0;a=c[d>>2]|0;f=g+32|0;b=c[f>>2]|0;if((a|0)!=(b|0)){do{P_(c[a>>2]|0);a=a+4|0}while((a|0)!=(b|0));a=c[d>>2]|0;b=c[f>>2]|0;if((b|0)!=(a|0))c[f>>2]=b+(~((b+-4-a|0)>>>2)<<2)}a=c[e>>2]|0;if(!a){P_(g);return}P_(a);P_(g);return}function ZO(a){a=a|0;var b=0,d=0,e=0,f=0,g=0;g=a+-20|0;c[g+4>>2]=1136;c[g+8>>2]=1228;c[g+12>>2]=1260;c[g+16>>2]=1292;c[g+20>>2]=1324;e=g+24|0;pG(e);d=g+28|0;a=c[d>>2]|0;f=g+32|0;b=c[f>>2]|0;if((a|0)!=(b|0)){do{P_(c[a>>2]|0);a=a+4|0}while((a|0)!=(b|0));a=c[d>>2]|0;b=c[f>>2]|0;if((b|0)!=(a|0))c[f>>2]=b+(~((b+-4-a|0)>>>2)<<2)}a=c[e>>2]|0;if(!a){P_(g);return}P_(a);P_(g);return}function _O(a){a=a|0;var b=0,d=0,e=0,f=0,g=0;g=a+-48|0;c[g+4>>2]=1136;c[g+8>>2]=1228;c[g+12>>2]=1260;c[g+16>>2]=1292;c[g+20>>2]=1324;e=g+24|0;pG(e);d=g+28|0;a=c[d>>2]|0;f=g+32|0;b=c[f>>2]|0;if((a|0)!=(b|0)){do{P_(c[a>>2]|0);a=a+4|0}while((a|0)!=(b|0));a=c[d>>2]|0;b=c[f>>2]|0;if((b|0)!=(a|0))c[f>>2]=b+(~((b+-4-a|0)>>>2)<<2)}a=c[e>>2]|0;if(!a){P_(g);return}P_(a);P_(g);return}function $O(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0;l=i;i=i+48|0;f=l+8|0;g=l+4|0;j=l;if(!(c[d>>2]|0)){k=0;i=l;return k|0}if(!(c[e>>2]|0)){k=0;i=l;return k|0}m=f+12|0;c[f>>2]=12880;c[f+4>>2]=0;a[f+8>>0]=0;n=c[11045]|0;c[m>>2]=n;c[m+(c[n+-16>>2]|0)>>2]=c[11046];n=f+16|0;m=c[11047]|0;c[n>>2]=m;c[n+(c[m+-16>>2]|0)>>2]=c[11048];c[f>>2]=44068;c[f+12>>2]=44128;c[f+16>>2]=44160;pc[c[44096>>2]&1023](f,f+(c[11014]|0)|0);e=c[e>>2]|0;c[g>>2]=e;if((e|0)!=0?(m=e+((c[(c[e>>2]|0)+-12>>2]|0)+4)|0,n=(c[m>>2]|0)+1|0,c[m>>2]=n,(n|0)==0):0)Ha(79054,79014,48,79068);f=OU(f,g)|0;e=c[g>>2]|0;if((e|0)!=0?(m=c[(c[e>>2]|0)+-12>>2]|0,h=e+m|0,m=e+(m+4)|0,n=(c[m>>2]|0)+-1|0,c[m>>2]=n,!((h|0)==0|(n|0)!=0)):0)oc[c[(c[h>>2]|0)+4>>2]&2047](h);e=c[d>>2]|0;if((f|0)<0){if(!e){n=0;i=l;return n|0}m=e+((c[(c[e>>2]|0)+-12>>2]|0)+4)|0;n=(c[m>>2]|0)+1|0;c[m>>2]=n;if(!n)Ha(79054,79014,48,79068);else{n=e;i=l;return n|0}}c[j>>2]=e;if((e|0)!=0?(m=e+((c[(c[e>>2]|0)+-12>>2]|0)+4)|0,n=(c[m>>2]|0)+1|0,c[m>>2]=n,(n|0)==0):0)Ha(79054,79014,48,79068);g=aP(b,j,f)|0;if((e|0)!=0?(m=c[(c[e>>2]|0)+-12>>2]|0,k=e+m|0,m=e+(m+4)|0,n=(c[m>>2]|0)+-1|0,c[m>>2]=n,!((k|0)==0|(n|0)!=0)):0)oc[c[(c[k>>2]|0)+4>>2]&2047](k);if(!g){n=0;i=l;return n|0}e=o$(g,1576,8200,0)|0;if((e|0)!=0?(m=e+((c[(c[e>>2]|0)+-12>>2]|0)+4)|0,n=(c[m>>2]|0)+1|0,c[m>>2]=n,(n|0)==0):0)Ha(79054,79014,48,79068);m=c[(c[g>>2]|0)+-12>>2]|0;f=g+m|0;m=g+(m+4)|0;n=(c[m>>2]|0)+-1|0;c[m>>2]=n;if((f|0)==0|(n|0)!=0){n=e;i=l;return n|0}oc[c[(c[f>>2]|0)+4>>2]&2047](f);n=e;i=l;return n|0}function aP(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0;o=i;i=i+16|0;k=o;c[b+60>>2]=e;c[b+56>>2]=1;c[b+52>>2]=0;e=b+(c[(c[b>>2]|0)+-12>>2]|0)|0;c[k>>2]=12880;c[k+4>>2]=e;a[k+8>>0]=0;h=c[d>>2]|0;if(!h)Ha(78999,79014,95,78956);pc[c[(c[h>>2]|0)+32>>2]&1023](h,e);e=c[h+4>>2]|0;g=h+8|0;a:do if((e|0)==(c[g>>2]|0))l=5;else{d=12880;while(1){f=rc[c[d+24>>2]&127](k)|0;d=c[k>>2]|0;if(f){j=d;break a}f=c[e>>2]|0;if(!f)break;pc[c[d+8>>2]&1023](k,f);e=e+4|0;if((e|0)==(c[g>>2]|0)){l=5;break a}d=c[k>>2]|0}Ha(78999,79014,95,78956)}while(0);if((l|0)==5)j=c[k>>2]|0;pc[c[j+16>>2]&1023](k,h);j=b+44|0;e=c[j>>2]|0;h=b+40|0;f=c[h>>2]|0;k=e+-1+f|0;d=b+28|0;g=c[d>>2]|0;k=c[(c[g+(k>>>10<<2)>>2]|0)+((k&1023)<<2)>>2]|0;do if(k){e=k+((c[(c[k>>2]|0)+-12>>2]|0)+4)|0;l=(c[e>>2]|0)+1|0;c[e>>2]=l;if(!l)Ha(79054,79014,48,79068);else{m=c[j>>2]|0;break}}else m=e;while(0);e=f+-1+m|0;e=c[(c[g+(e>>>10<<2)>>2]|0)+((e&1023)<<2)>>2]|0;if((e|0)!=0?(l=c[(c[e>>2]|0)+-12>>2]|0,n=e+l|0,l=e+(l+4)|0,m=(c[l>>2]|0)+-1|0,c[l>>2]=m,!((n|0)==0|(m|0)!=0)):0){oc[c[(c[n>>2]|0)+4>>2]&2047](n);g=c[d>>2]|0;f=c[h>>2]|0}n=c[j>>2]|0;c[j>>2]=n+-1;e=b+32|0;d=c[e>>2]|0;if((1-f-n+((d|0)==(g|0)?0:(d-g<<8)+-1|0)|0)>>>0<=2047){i=o;return k|0}P_(c[d+-4>>2]|0);c[e>>2]=(c[e>>2]|0)+-4;i=o;return k|0}function bP(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,j=0,k=0,l=0;l=i;i=i+32|0;k=l+16|0;h=l+12|0;j=l;d=c[b>>2]|0;if(!d)Ha(78999,79014,102,79043);d=c[d+48>>2]|0;if((d|0)!=-999)c[a+56>>2]=d;g=a+4|0;c[k>>2]=zc[c[(c[g>>2]|0)+72>>2]&255](g,b)|0;d=c[b>>2]|0;if(!d)Ha(78999,79014,102,79043);f=a+56|0;d=DE(d,f)|0;do if((d|0)>-1){e=(c[a+60>>2]|0)-d<<1;c[h>>2]=0;d=c[b>>2]|0;if(!d)Ha(78999,79014,102,79043);d=EE(d,h)|0;d=CE(d,e,f,h,(c[a+52>>2]|0)>-1)|0;c[j>>2]=0;c[j+4>>2]=0;c[j+8>>2]=0;v2(j,AE(d)|0);d=c[k>>2]|0;if(!d)Ha(78999,79014,102,79043);ad(d,j);d=c[k>>2]|0;if(!d)Ha(78999,79014,102,79043);else{c[d+52>>2]=c[h>>2];c[d+48>>2]=c[f>>2];o2(j);break}}while(0);Dc[c[(c[g>>2]|0)+56>>2]&63](g,k,0);d=c[k>>2]|0;if(!d){i=l;return}j=c[(c[d>>2]|0)+-12>>2]|0;e=d+j|0;j=d+(j+4)|0;k=(c[j>>2]|0)+-1|0;c[j>>2]=k;if((e|0)==0|(k|0)!=0){i=l;return}oc[c[(c[e>>2]|0)+4>>2]&2047](e);i=l;return}function cP(a,b){a=a|0;b=b|0;bP(a+-4|0,b);return}function dP(a,b){a=a|0;b=b|0;bP(a+-16|0,b);return}function eP(a,b){a=a|0;b=b|0;c[a+56>>2]=1;c[a+52>>2]=0;HT(a+4|0,b);return}function fP(a,b){a=a|0;b=b|0;a=a+-4|0;c[a+56>>2]=1;c[a+52>>2]=0;HT(a+4|0,b);return}function gP(a,b){a=a|0;b=b|0;a=a+-8|0;c[a+56>>2]=1;c[a+52>>2]=0;HT(a+4|0,b);return}function hP(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0;h=i;i=i+16|0;g=h;e=c[d>>2]|0;c[g>>2]=e;if((e|0)!=0?(e=e+((c[(c[e>>2]|0)+-12>>2]|0)+4)|0,f=(c[e>>2]|0)+1|0,c[e>>2]=f,(f|0)==0):0)Ha(79054,79014,48,79068);NT(b+4|0,g);e=c[d>>2]|0;if(!e)Ha(78999,79014,102,79043);d=ed(e,0)|0;if(d){do if(a[d+44>>0]|0){f=YS(d+20|0)|0;e=b+52|0;if((f|0)==-99){c[e>>2]=0;break}else{c[e>>2]=f;break}}else c[b+52>>2]=_c(d)|0;while(0);f=d+4|0;b=(c[f>>2]|0)+-1|0;c[f>>2]=b;if(!b)oc[c[(c[d>>2]|0)+4>>2]&2047](d)}e=c[g>>2]|0;if(!e){i=h;return}b=c[(c[e>>2]|0)+-12>>2]|0;d=e+b|0;b=e+(b+4)|0;g=(c[b>>2]|0)+-1|0;c[b>>2]=g;if((d|0)==0|(g|0)!=0){i=h;return}oc[c[(c[d>>2]|0)+4>>2]&2047](d);i=h;return}function iP(a,b){a=a|0;b=b|0;hP(a+-48|0,b);return}function jP(a,b){a=a|0;b=b|0;return}function kP(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0;h=i;i=i+16|0;f=h+8|0;g=h;e=b+4|0;if(a[e>>0]|0){i=h;return}b=c[d>>2]|0;if(!b)Ha(78999,79014,102,79043);lM(f,b+60|0);do if((c[f>>2]|0)==-999999){b=c[d>>2]|0;if(!b)Ha(78999,79014,95,78956);else{kM(g,1,4);GE(b,g)|0;break}}while(0);a[e>>0]=1;i=h;return}function lP(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,j=0,k=0,l=0,m=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0;A=i;i=i+160|0;p=A+136|0;v=A+72|0;x=A+64|0;b=A+56|0;w=A+48|0;y=A+40|0;q=A+24|0;r=A+16|0;s=A+8|0;t=A+4|0;u=A;f=c[10958]|0;c[v>>2]=f;c[v+(c[f+-16>>2]|0)>>2]=c[10959];f=v+4|0;o=c[10960]|0;c[f>>2]=o;c[f+(c[o+-16>>2]|0)>>2]=c[10961];o=v+8|0;f=c[10962]|0;c[o>>2]=f;c[o+(c[f+-16>>2]|0)>>2]=c[10963];c[v>>2]=1360;c[v+4>>2]=1428;c[v+8>>2]=1460;kM(v+12|0,0,1);kM(v+20|0,0,1);kM(v+28|0,0,1);kM(v+40|0,0,1);c[v+52>>2]=12880;f=v+56|0;c[f>>2]=0;a[v+60>>0]=0;c[f>>2]=v+(c[(c[v>>2]|0)+-16>>2]|0);f=c[d>>2]|0;c[b>>2]=f;if((f|0)!=0?(m=f+((c[(c[f>>2]|0)+-12>>2]|0)+4)|0,o=(c[m>>2]|0)+1|0,c[m>>2]=o,(o|0)==0):0)Ha(79054,79014,48,79068);fU(x,v,b);b=c[b>>2]|0;if((b|0)!=0?(m=c[(c[b>>2]|0)+-12>>2]|0,g=b+m|0,m=b+(m+4)|0,o=(c[m>>2]|0)+-1|0,c[m>>2]=o,!((g|0)==0|(o|0)!=0)):0)oc[c[(c[g>>2]|0)+4>>2]&2047](g);f=c[d>>2]|0;if(!f)Ha(78999,79014,102,79043);l=w+4|0;m=p+4|0;o=p+8|0;b=f;k=c[f+4>>2]|0;a:while(1){if((k|0)==(c[b+8>>2]|0)){f=41;break}c[w>>2]=40060;a[l>>0]=0;j=c[k>>2]|0;if(j){c[p>>2]=12880;c[m>>2]=w;a[o>>0]=0;pc[c[(c[j>>2]|0)+32>>2]&1023](j,w);b=c[j+4>>2]|0;h=j+8|0;b:do if((b|0)==(c[h>>2]|0))b=12880;else{f=12880;g=b;while(1){f=rc[c[f+24>>2]&127](p)|0;b=c[p>>2]|0;if(f)break b;f=c[g>>2]|0;if(!f){f=17;break a}pc[c[b+8>>2]&1023](p,f);b=g+4|0;if((b|0)==(c[h>>2]|0))break;f=c[p>>2]|0;g=b}b=c[p>>2]|0}while(0);pc[c[b+16>>2]&1023](p,j)}fU(y,v,k);if((a[8952]|0)==0?(Ga(8952)|0)!=0:0){$e(39720);Ta(52,39720,n|0)|0;$a(8952)}l2(q,77054,1);j=Ze(39720,q)|0;o2(q);if(!j){f=25;break}mM(s,e,x);nM(r,s,y);GE(j,r)|0;h=c[k>>2]|0;if(!h){f=27;break}b=c[h+4>>2]|0;g=c[h+8>>2]|0;c:do if((b|0)!=(g|0)){while(1){f=c[b>>2]|0;if(f){if(o$(f,1576,8168,0)|0)break;if(o$(f,1576,1664,0)|0)break}b=b+4|0;if((b|0)==(g|0))break c}c[t>>2]=b;c[u>>2]=j;f=j+((c[(c[j>>2]|0)+-12>>2]|0)+4)|0;g=(c[f>>2]|0)+1|0;c[f>>2]=g;if(!g){f=33;break a}c[p>>2]=c[t>>2];oP(h+4|0,p,u)|0;b=c[u>>2]|0;if((b|0)!=0?(g=c[(c[b>>2]|0)+-12>>2]|0,z=b+g|0,g=b+(g+4)|0,h=(c[g>>2]|0)+-1|0,c[g>>2]=h,!((z|0)==0|(h|0)!=0)):0)oc[c[(c[z>>2]|0)+4>>2]&2047](z)}while(0);h=c[(c[j>>2]|0)+-12>>2]|0;b=j+h|0;h=j+(h+4)|0;j=(c[h>>2]|0)+-1|0;c[h>>2]=j;if(!((b|0)==0|(j|0)!=0))oc[c[(c[b>>2]|0)+4>>2]&2047](b);b=c[d>>2]|0;if(!b){f=10;break}else k=k+4|0}if((f|0)==10)Ha(78999,79014,102,79043);else if((f|0)==17)Ha(78999,79014,95,78956);else if((f|0)==25)Ha(78999,79014,95,78956);else if((f|0)==27)Ha(78999,79014,102,79043);else if((f|0)==33)Ha(79054,79014,48,79068);else if((f|0)==41){e=b+((c[(c[b>>2]|0)+-12>>2]|0)+4)|0;d=(c[e>>2]|0)+1|0;c[e>>2]=d;if(!d)Ha(79054,79014,48,79068);else{i=A;return b|0}}return 0}function mP(b,d,e){b=b|0;d=d|0;e=e|0;var f=0;if((a[8952]|0)==0?(Ga(8952)|0)!=0:0){$e(39720);Ta(52,39720,n|0)|0;$a(8952)}f=We(39720)|0;if(!f)return f|0;b=c[d>>2]|0;if(b)pc[c[(c[f>>2]|0)+4>>2]&1023](f,b+4|0);b=c[e>>2]|0;if(!b)return f|0;d=b;b=c[b+4>>2]|0;while(1){if((b|0)==(c[d+8>>2]|0)){b=12;break}pc[c[c[f>>2]>>2]&1023](f,b);d=c[e>>2]|0;if(!d){b=9;break}else b=b+4|0}if((b|0)==9)Ha(78999,79014,102,79043);else if((b|0)==12)return f|0;return 0}function nP(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0;I=i;i=i+176|0;G=I+132|0;y=I+128|0;g=I+56|0;z=I+52|0;j=I+48|0;o=I+64|0;s=I+40|0;l=I+32|0;t=I+24|0;n=I+16|0;q=I+8|0;r=I;B=c[10857]|0;c[G>>2]=B;c[G+(c[B+-16>>2]|0)>>2]=c[10858];B=G+4|0;C=c[10859]|0;c[B>>2]=C;c[B+(c[C+-16>>2]|0)>>2]=c[10860];C=G+8|0;D=c[10861]|0;c[C>>2]=D;c[C+(c[D+-16>>2]|0)>>2]=c[10862];D=G+12|0;E=c[10863]|0;c[D>>2]=E;c[D+(c[E+-16>>2]|0)>>2]=c[10864];E=G+16|0;H=c[10865]|0;c[E>>2]=H;c[E+(c[H+-16>>2]|0)>>2]=c[10866];c[G>>2]=1136;c[G+4>>2]=1228;c[G+8>>2]=1260;c[G+12>>2]=1292;c[G+16>>2]=1324;H=G+20|0;c[H>>2]=0;c[H+4>>2]=0;c[H+8>>2]=0;c[H+12>>2]=0;c[H+16>>2]=0;c[H+20>>2]=0;d=c[d>>2]|0;c[g>>2]=d;if((d|0)!=0?(f=d+((c[(c[d>>2]|0)+-12>>2]|0)+4)|0,u=(c[f>>2]|0)+1|0,c[f>>2]=u,(u|0)==0):0)Ha(79054,79014,48,79068);f=AT(G,g)|0;if(f){d=o$(f,1576,8200,0)|0;c[y>>2]=d;if((d|0)!=0?(d=d+((c[(c[d>>2]|0)+-12>>2]|0)+4)|0,u=(c[d>>2]|0)+1|0,c[d>>2]=u,(u|0)==0):0)Ha(79054,79014,48,79068);u=c[(c[f>>2]|0)+-12>>2]|0;d=f+u|0;f=f+(u+4)|0;u=(c[f>>2]|0)+-1|0;c[f>>2]=u;if((d|0)==0|(u|0)!=0)u=y;else{oc[c[(c[d>>2]|0)+4>>2]&2047](d);u=y}}else{c[y>>2]=0;u=y}d=c[g>>2]|0;if((d|0)!=0?(f=c[(c[d>>2]|0)+-12>>2]|0,h=d+f|0,f=d+(f+4)|0,g=(c[f>>2]|0)+-1|0,c[f>>2]=g,!((h|0)==0|(g|0)!=0)):0)oc[c[(c[h>>2]|0)+4>>2]&2047](h);d=c[e>>2]|0;c[j>>2]=d;if((d|0)!=0?(h=d+((c[(c[d>>2]|0)+-12>>2]|0)+4)|0,e=(c[h>>2]|0)+1|0,c[h>>2]=e,(e|0)==0):0)Ha(79054,79014,48,79068);f=AT(G,j)|0;if(f){d=o$(f,1576,8200,0)|0;c[z>>2]=d;if((d|0)!=0?(h=d+((c[(c[d>>2]|0)+-12>>2]|0)+4)|0,e=(c[h>>2]|0)+1|0,c[h>>2]=e,(e|0)==0):0)Ha(79054,79014,48,79068);h=c[(c[f>>2]|0)+-12>>2]|0;d=f+h|0;h=f+(h+4)|0;e=(c[h>>2]|0)+-1|0;c[h>>2]=e;if((d|0)==0|(e|0)!=0)h=z;else{oc[c[(c[d>>2]|0)+4>>2]&2047](d);h=z}}else{c[z>>2]=0;h=z}d=c[j>>2]|0;if((d|0)!=0?(e=c[(c[d>>2]|0)+-12>>2]|0,k=d+e|0,e=d+(e+4)|0,j=(c[e>>2]|0)+-1|0,c[e>>2]=j,!((k|0)==0|(j|0)!=0)):0)oc[c[(c[k>>2]|0)+4>>2]&2047](k);if(!(c[b+4>>2]|0))e=mP(0,y,z)|0;else{d=c[10958]|0;c[o>>2]=d;c[o+(c[d+-16>>2]|0)>>2]=c[10959];d=o+4|0;b=c[10960]|0;c[d>>2]=b;c[d+(c[b+-16>>2]|0)>>2]=c[10961];b=o+8|0;d=c[10962]|0;c[b>>2]=d;c[b+(c[d+-16>>2]|0)>>2]=c[10963];c[o>>2]=1360;c[o+4>>2]=1428;c[o+8>>2]=1460;kM(o+12|0,0,1);kM(o+20|0,0,1);kM(o+28|0,0,1);kM(o+40|0,0,1);c[o+52>>2]=12880;d=o+56|0;c[d>>2]=0;a[o+60>>0]=0;c[d>>2]=o+(c[(c[o>>2]|0)+-16>>2]|0);d=c[u>>2]|0;c[l>>2]=d;if((d|0)!=0?(k=d+((c[(c[d>>2]|0)+-12>>2]|0)+4)|0,b=(c[k>>2]|0)+1|0,c[k>>2]=b,(b|0)==0):0)Ha(79054,79014,48,79068);fU(s,o,l);d=c[l>>2]|0;if((d|0)!=0?(b=c[(c[d>>2]|0)+-12>>2]|0,m=d+b|0,b=d+(b+4)|0,l=(c[b>>2]|0)+-1|0,c[b>>2]=l,!((m|0)==0|(l|0)!=0)):0)oc[c[(c[m>>2]|0)+4>>2]&2047](m);d=c[h>>2]|0;c[n>>2]=d;if((d|0)!=0?(l=d+((c[(c[d>>2]|0)+-12>>2]|0)+4)|0,m=(c[l>>2]|0)+1|0,c[l>>2]=m,(m|0)==0):0)Ha(79054,79014,48,79068);fU(t,o,n);d=c[n>>2]|0;if((d|0)!=0?(n=c[(c[d>>2]|0)+-12>>2]|0,p=d+n|0,n=d+(n+4)|0,o=(c[n>>2]|0)+-1|0,c[n>>2]=o,!((p|0)==0|(o|0)!=0)):0)oc[c[(c[p>>2]|0)+4>>2]&2047](p);if(sM(s,t)|0){nM(q,s,t);d=lP(0,z,q)|0;f=c[h>>2]|0;if((f|0)!=(d|0)){if((d|0)!=0?(t=d+((c[(c[d>>2]|0)+-12>>2]|0)+4)|0,x=(c[t>>2]|0)+1|0,c[t>>2]=x,(x|0)==0):0)Ha(79054,79014,48,79068);if((f|0)!=0?(t=c[(c[f>>2]|0)+-12>>2]|0,v=f+t|0,t=f+(t+4)|0,x=(c[t>>2]|0)+-1|0,c[t>>2]=x,!((v|0)==0|(x|0)!=0)):0)oc[c[(c[v>>2]|0)+4>>2]&2047](v);c[h>>2]=d}if((d|0)!=0?(v=c[(c[d>>2]|0)+-12>>2]|0,w=d+v|0,v=d+(v+4)|0,x=(c[v>>2]|0)+-1|0,c[v>>2]=x,!((w|0)==0|(x|0)!=0)):0)oc[c[(c[w>>2]|0)+4>>2]&2047](w)}else if(tM(s,t)|0){nM(r,t,s);d=lP(0,y,r)|0;f=c[u>>2]|0;if((f|0)!=(d|0)){if((d|0)!=0?(v=d+((c[(c[d>>2]|0)+-12>>2]|0)+4)|0,w=(c[v>>2]|0)+1|0,c[v>>2]=w,(w|0)==0):0)Ha(79054,79014,48,79068);do if(f){v=c[(c[f>>2]|0)+-12>>2]|0;g=f+v|0;v=f+(v+4)|0;w=(c[v>>2]|0)+-1|0;c[v>>2]=w;if((g|0)==0|(w|0)!=0)break;oc[c[(c[g>>2]|0)+4>>2]&2047](g)}while(0);c[u>>2]=d}if((d|0)!=0?(v=c[(c[d>>2]|0)+-12>>2]|0,x=d+v|0,v=d+(v+4)|0,w=(c[v>>2]|0)+-1|0,c[v>>2]=w,!((x|0)==0|(w|0)!=0)):0)oc[c[(c[x>>2]|0)+4>>2]&2047](x)}e=mP(0,y,z)|0}d=c[h>>2]|0;if((d|0)!=0?(y=c[(c[d>>2]|0)+-12>>2]|0,A=d+y|0,y=d+(y+4)|0,z=(c[y>>2]|0)+-1|0,c[y>>2]=z,!((A|0)==0|(z|0)!=0)):0)oc[c[(c[A>>2]|0)+4>>2]&2047](A);d=c[u>>2]|0;if((d|0)!=0?(z=c[(c[d>>2]|0)+-12>>2]|0,F=d+z|0,z=d+(z+4)|0,A=(c[z>>2]|0)+-1|0,c[z>>2]=A,!((F|0)==0|(A|0)!=0)):0)oc[c[(c[F>>2]|0)+4>>2]&2047](F);g=c[10856]|0;c[G>>2]=g;c[G+(c[g+-16>>2]|0)>>2]=c[10867];c[B>>2]=c[10868];c[C>>2]=c[10869];c[D>>2]=c[10870];c[E>>2]=c[10871];pG(H);g=G+24|0;d=c[g>>2]|0;h=G+28|0;f=c[h>>2]|0;if((d|0)!=(f|0)){do{P_(c[d>>2]|0);d=d+4|0}while((d|0)!=(f|0));d=c[g>>2]|0;f=c[h>>2]|0;if((f|0)!=(d|0))c[h>>2]=f+(~((f+-4-d|0)>>>2)<<2)}d=c[H>>2]|0;if(!d){i=I;return e|0}P_(d);i=I;return e|0}function oP(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0;q=i;i=i+32|0;p=q;k=c[a>>2]|0;n=c[b>>2]|0;m=n;b=k;f=m-b>>2;h=a+4|0;g=c[h>>2]|0;j=a+8|0;e=c[j>>2]|0;if(g>>>0>>0){if((n|0)==(g|0)){d=c[d>>2]|0;c[n>>2]=d;if((d|0)!=0?(o=d+((c[(c[d>>2]|0)+-12>>2]|0)+4)|0,p=(c[o>>2]|0)+1|0,c[o>>2]=p,(p|0)==0):0)Ha(79054,79014,48,79068);c[h>>2]=n+4;p=n;i=q;return p|0}sP(a,n,g,k+(f+1<<2)|0);if(n>>>0<=d>>>0)d=(c[h>>2]|0)>>>0>d>>>0?d+4|0:d;d=c[d>>2]|0;b=c[n>>2]|0;if((b|0)==(d|0)){p=n;i=q;return p|0}if((d|0)!=0?(o=d+((c[(c[d>>2]|0)+-12>>2]|0)+4)|0,p=(c[o>>2]|0)+1|0,c[o>>2]=p,(p|0)==0):0)Ha(79054,79014,48,79068);if((b|0)!=0?(o=c[(c[b>>2]|0)+-12>>2]|0,l=b+o|0,o=b+(o+4)|0,p=(c[o>>2]|0)+-1|0,c[o>>2]=p,!((l|0)==0|(p|0)!=0)):0)oc[c[(c[l>>2]|0)+4>>2]&2047](l);c[n>>2]=d;p=n;i=q;return p|0}f=(g-b>>2)+1|0;if(f>>>0>1073741823){M_(a);e=c[j>>2]|0;b=c[a>>2]|0}else b=k;e=e-b|0;if(e>>2>>>0<536870911){h=e>>1;h=h>>>0>>0?f:h}else h=1073741823;b=m-b|0;e=b>>2;c[p+12>>2]=0;c[p+16>>2]=a+8;if(!h)f=0;else f=O_(h<<2)|0;c[p>>2]=f;g=f+(e<<2)|0;k=p+8|0;c[k>>2]=g;j=p+4|0;c[j>>2]=g;g=p+12|0;c[g>>2]=f+(h<<2);do if((e|0)==(h|0)){if((b|0)>0){m=f+(e+(((b>>2)+1|0)/-2|0)<<2)|0;c[k>>2]=m;c[j>>2]=m;break}m=b>>1;m=(m|0)==0?1:m;l=O_(m<<2)|0;h=l+(m>>>2<<2)|0;c[p>>2]=l;c[j>>2]=h;c[k>>2]=h;c[g>>2]=l+(m<<2);if(f)P_(f)}while(0);b=c[k>>2]|0;d=c[d>>2]|0;c[b>>2]=d;if((d|0)!=0?(l=d+((c[(c[d>>2]|0)+-12>>2]|0)+4)|0,m=(c[l>>2]|0)+1|0,c[l>>2]=m,(m|0)==0):0)Ha(79054,79014,48,79068);c[k>>2]=b+4;f=tP(a,p,n)|0;e=c[j>>2]|0;d=c[k>>2]|0;if((d|0)!=(e|0)){do{d=d+-4|0;b=c[d>>2]|0;if((b|0)!=0?(a=c[(c[b>>2]|0)+-12>>2]|0,o=b+a|0,a=b+(a+4)|0,n=(c[a>>2]|0)+-1|0,c[a>>2]=n,!((o|0)==0|(n|0)!=0)):0)oc[c[(c[o>>2]|0)+4>>2]&2047](o)}while((d|0)!=(e|0));c[k>>2]=e}d=c[p>>2]|0;if(!d){p=f;i=q;return p|0}P_(d);p=f;i=q;return p|0}function pP(a){a=a|0;P_(a);return}function qP(a){a=a|0;return}function rP(a){a=a|0;P_(a);return}function sP(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,l=0;j=a+4|0;a=c[j>>2]|0;e=a-e>>2;g=b+(e<<2)|0;a:do if(g>>>0>>0){h=a;i=g;while(1){f=c[i>>2]|0;c[h>>2]=f;if((f|0)!=0?(l=f+((c[(c[f>>2]|0)+-12>>2]|0)+4)|0,f=(c[l>>2]|0)+1|0,c[l>>2]=f,(f|0)==0):0)break;i=i+4|0;h=h+4|0;c[j>>2]=h;if(i>>>0>=d>>>0)break a}Ha(79054,79014,48,79068)}while(0);if(!e)return;while(1){a=a+-4|0;g=g+-4|0;e=c[g>>2]|0;f=c[a>>2]|0;if((f|0)!=(e|0)){if((e|0)!=0?(d=e+((c[(c[e>>2]|0)+-12>>2]|0)+4)|0,l=(c[d>>2]|0)+1|0,c[d>>2]=l,(l|0)==0):0){a=11;break}if((f|0)!=0?(d=c[(c[f>>2]|0)+-12>>2]|0,k=f+d|0,d=f+(d+4)|0,l=(c[d>>2]|0)+-1|0,c[d>>2]=l,!((k|0)==0|(l|0)!=0)):0)oc[c[(c[k>>2]|0)+4>>2]&2047](k);c[a>>2]=e}if((g|0)==(b|0)){a=16;break}}if((a|0)==11)Ha(79054,79014,48,79068);else if((a|0)==16)return}function tP(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0;m=b+4|0;n=c[m>>2]|0;h=c[a>>2]|0;a:do if((h|0)==(d|0))k=n;else{g=d;e=n;while(1){g=g+-4|0;f=c[g>>2]|0;c[e+-4>>2]=f;if((f|0)!=0?(i=f+((c[(c[f>>2]|0)+-12>>2]|0)+4)|0,j=(c[i>>2]|0)+1|0,c[i>>2]=j,(j|0)==0):0)break;e=(c[m>>2]|0)+-4|0;c[m>>2]=e;if((g|0)==(h|0)){k=e;break a}}Ha(79054,79014,48,79068)}while(0);i=a+4|0;h=c[i>>2]|0;j=b+8|0;do if((h|0)!=(d|0)){e=d;g=c[j>>2]|0;while(1){f=c[e>>2]|0;c[g>>2]=f;if((f|0)!=0?(k=f+((c[(c[f>>2]|0)+-12>>2]|0)+4)|0,d=(c[k>>2]|0)+1|0,c[k>>2]=d,(d|0)==0):0){e=11;break}e=e+4|0;g=(c[j>>2]|0)+4|0;c[j>>2]=g;if((e|0)==(h|0)){e=13;break}}if((e|0)==11)Ha(79054,79014,48,79068);else if((e|0)==13){l=m;o=c[m>>2]|0;break}}else{l=m;o=k}while(0);m=c[a>>2]|0;c[a>>2]=o;c[l>>2]=m;m=c[i>>2]|0;c[i>>2]=c[j>>2];c[j>>2]=m;m=a+8|0;a=b+12|0;o=c[m>>2]|0;c[m>>2]=c[a>>2];c[a>>2]=o;c[b>>2]=c[l>>2];return n|0}function uP(b,d){b=b|0;d=d|0;var e=0,f=0;d=c[d>>2]|0;if(!d)Ha(78999,79014,102,79043);d=d+48|0;e=c[d>>2]|0;f=(e|0)==-999;if(!(a[b+20>>0]|0)){if(f)return;c[b+16>>2]=e;return}else{if(f)c[d>>2]=c[b+16>>2];a[b+12>>0]=1;return}}function vP(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0;a[b+48>>0]=0;g=c[d>>2]|0;if(!g){n=0;return n|0}h=b+56|0;pc[c[(c[h>>2]|0)+12>>2]&1023](h,g);d=c[g+4>>2]|0;i=g+8|0;a:do if((d|0)==(c[i>>2]|0))k=4;else{while(1){f=rc[c[(c[h>>2]|0)+24>>2]&127](h)|0;e=c[h>>2]|0;if(f){j=e;break a}f=c[d>>2]|0;if(!f)break;pc[c[e+8>>2]&1023](h,f);d=d+4|0;if((d|0)==(c[i>>2]|0)){k=4;break a}}Ha(78999,79014,95,78956)}while(0);if((k|0)==4)j=c[h>>2]|0;pc[c[j+16>>2]&1023](h,g);j=b+44|0;d=c[j>>2]|0;i=b+40|0;f=c[i>>2]|0;e=d+-1+f|0;h=b+28|0;g=c[h>>2]|0;e=c[(c[g+(e>>>10<<2)>>2]|0)+((e&1023)<<2)>>2]|0;do if(e){d=e+((c[(c[e>>2]|0)+-12>>2]|0)+4)|0;k=(c[d>>2]|0)+1|0;c[d>>2]=k;if(!k)Ha(79054,79014,48,79068);else{l=c[j>>2]|0;n=e;break}}else{l=d;n=0}while(0);d=l+-1+f|0;d=c[(c[g+(d>>>10<<2)>>2]|0)+((d&1023)<<2)>>2]|0;if((d|0)!=0?(k=c[(c[d>>2]|0)+-12>>2]|0,m=d+k|0,k=d+(k+4)|0,l=(c[k>>2]|0)+-1|0,c[k>>2]=l,!((m|0)==0|(l|0)!=0)):0){oc[c[(c[m>>2]|0)+4>>2]&2047](m);g=c[h>>2]|0;f=c[i>>2]|0}m=c[j>>2]|0;c[j>>2]=m+-1;d=b+32|0;e=c[d>>2]|0;if((1-f-m+((e|0)==(g|0)?0:(e-g<<8)+-1|0)|0)>>>0<=2047)return n|0;P_(c[e+-4>>2]|0);c[d>>2]=(c[d>>2]|0)+-4;return n|0}function wP(b,d){b=b|0;d=d|0;a[b+48>>0]=0;c[b+68>>2]=1;c[b+72>>2]=1;c[b+76>>2]=1;HT(b+4|0,d);return}function xP(b,d){b=b|0;d=d|0;b=b+-4|0;a[b+48>>0]=0;c[b+68>>2]=1;c[b+72>>2]=1;c[b+76>>2]=1;HT(b+4|0,d);return}function yP(b,d){b=b|0;d=d|0;b=b+-8|0;a[b+48>>0]=0;c[b+68>>2]=1;c[b+72>>2]=1;c[b+76>>2]=1;HT(b+4|0,d);return}function zP(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0;f=d+12|0;a=c[f>>2]|0;if((a|0)!=(c[e>>2]|0))c[e>>2]=a;a=c[b>>2]|0;if(!a)Ha(78999,79014,102,79043);ad(a,d);a=c[b>>2]|0;if(!a)Ha(78999,79014,102,79043);else{c[a+48>>2]=c[f>>2];c[a+52>>2]=c[d+16>>2];return}}function AP(b,d,e){b=b|0;d=d|0;e=e|0;a[b+48>>0]=1;c[b+80>>2]=(c[b+52>>2]|0)==1?-1:999;if(!e)return;JT(b+4|0,d);return}function BP(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0;x=i;i=i+80|0;r=x+8|0;w=x+32|0;u=x+4|0;p=x;a[b+48>>0]=0;if(f){RT(b+4|0,d);i=x;return}c[r>>2]=40184;c[r+4>>2]=12880;a[r+12>>0]=0;c[r+8>>2]=r;o=c[d>>2]|0;if(o){l=o+((c[(c[o>>2]|0)+-12>>2]|0)+4)|0;m=(c[l>>2]|0)+1|0;c[l>>2]=m;if(!m)Ha(79054,79014,48,79068);m=r+16|0;c[m>>2]=c[b+76>>2];h=r+20|0;a[h>>0]=1;k=r+4|0;pc[c[(c[o>>2]|0)+32>>2]&1023](o,r);f=c[o+4>>2]|0;l=o+8|0;a:do if((f|0)==(c[l>>2]|0))t=8;else{while(1){j=rc[c[(c[k>>2]|0)+24>>2]&127](k)|0;g=c[k>>2]|0;if(j){n=g;break a}j=c[f>>2]|0;if(!j)break;pc[c[g+8>>2]&1023](k,j);f=f+4|0;if((f|0)==(c[l>>2]|0)){t=8;break a}}Ha(78999,79014,95,78956)}while(0);if((t|0)==8)n=c[k>>2]|0;pc[c[n+16>>2]&1023](k,o);n=c[(c[o>>2]|0)+-12>>2]|0;f=o+n|0;n=o+(n+4)|0;o=(c[n>>2]|0)+-1|0;c[n>>2]=o;if(!((f|0)==0|(o|0)!=0))oc[c[(c[f>>2]|0)+4>>2]&2047](f)}else{m=r+16|0;c[m>>2]=c[b+76>>2];h=r+20|0;a[h>>0]=1}MS(w);f=c[d>>2]|0;c[p>>2]=f;if((f|0)!=0?(o=f+((c[(c[f>>2]|0)+-12>>2]|0)+4)|0,d=(c[o>>2]|0)+1|0,c[o>>2]=d,(d|0)==0):0)Ha(79054,79014,48,79068);g=WS(w,p,e-(c[b+80>>2]|0)|0)|0;c[u>>2]=g;f=c[p>>2]|0;if((f|0)!=0?(e=c[(c[f>>2]|0)+-12>>2]|0,q=f+e|0,e=f+(e+4)|0,p=(c[e>>2]|0)+-1|0,c[e>>2]=p,!((q|0)==0|(p|0)!=0)):0){oc[c[(c[q>>2]|0)+4>>2]&2047](q);l=c[u>>2]|0}else l=g;if(l){c[m>>2]=1;a[h>>0]=0;j=r+4|0;pc[c[(c[j>>2]|0)+12>>2]&1023](j,l);f=c[l+4>>2]|0;k=l+8|0;b:do if((f|0)==(c[k>>2]|0))t=24;else{while(1){r=rc[c[(c[j>>2]|0)+24>>2]&127](j)|0;g=c[j>>2]|0;if(r){s=g;break b}h=c[f>>2]|0;if(!h)break;pc[c[g+8>>2]&1023](j,h);f=f+4|0;if((f|0)==(c[k>>2]|0)){t=24;break b}}Ha(78999,79014,95,78956)}while(0);if((t|0)==24)s=c[j>>2]|0;pc[c[s+16>>2]&1023](j,l);f=c[m>>2]|0;if((f|0)!=1)c[b+72>>2]=f;f=b+4|0;Dc[c[(c[f>>2]|0)+60>>2]&63](f,u,0);f=c[u>>2]|0;if((f|0)!=0?(u=c[(c[f>>2]|0)+-12>>2]|0,v=f+u|0,u=f+(u+4)|0,b=(c[u>>2]|0)+-1|0,c[u>>2]=b,!((v|0)==0|(b|0)!=0)):0)oc[c[(c[v>>2]|0)+4>>2]&2047](v)}NS(w);i=x;return}function CP(a,b){a=a|0;b=b|0;var d=0;b=c[b>>2]|0;if(!b)Ha(78999,79014,102,79043);d=DE(b,a+68|0)|0;switch(c[a+52>>2]|0){case 1:{b=a+80|0;if((d|0)<=(c[b>>2]|0))return;c[b>>2]=d;return}case 0:{b=a+80|0;if((d|0)>=(c[b>>2]|0))return;c[b>>2]=d;return}default:return}}function DP(a,b){a=a|0;b=b|0;var d=0,e=0;d=a+76|0;e=c[d>>2]|0;if((e|0)==-999)return;a=c[b>>2]|0;if(!a)Ha(78999,79014,102,79043);a=a+48|0;if((c[a>>2]|0)==-999)c[a>>2]=e;c[d>>2]=-999;return}function EP(a,b){a=a|0;b=b|0;var d=0,e=0;d=c[b>>2]|0;if(!d)Ha(78999,79014,102,79043);d=d+20|0;if((B2(d,77054)|0)!=0?(B2(d,77021)|0)!=0:0){d=c[b>>2]|0;if(!d)Ha(78999,79014,102,79043);d=c[d+48>>2]|0;if((d|0)!=-999)c[a+68>>2]=d;d=a+4|0;b=zc[c[(c[d>>2]|0)+72>>2]&255](d,b)|0;if(!b){a=0;return a|0}d=c[b+48>>2]|0;if((d|0)!=-999)c[a+76>>2]=d;d=b+((c[(c[b>>2]|0)+-12>>2]|0)+4)|0;a=(c[d>>2]|0)+1|0;c[d>>2]=a;if(!a)Ha(79054,79014,48,79068);e=c[(c[b>>2]|0)+-12>>2]|0;d=b+e|0;e=b+(e+4)|0;a=(c[e>>2]|0)+-1|0;c[e>>2]=a;if((d|0)==0|(a|0)!=0){e=b;return e|0}oc[c[(c[d>>2]|0)+4>>2]&2047](d);e=b;return e|0}LT(a+4|0,b);e=0;return e|0}function FP(a){a=a|0;return}function GP(a){a=a|0;P_(a);return}function HP(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,j=0,k=0,l=0,m=0;e=i;i=i+16|0;f=e;c[b>>2]=33388;m=b+4|0;k=c[d+8>>2]|0;c[m>>2]=k;c[m+(c[k+-16>>2]|0)>>2]=c[d+12>>2];k=b+8|0;j=c[d+16>>2]|0;c[k>>2]=j;c[k+(c[j+-16>>2]|0)>>2]=c[d+20>>2];j=b+12|0;g=c[d+24>>2]|0;c[j>>2]=g;c[j+(c[g+-16>>2]|0)>>2]=c[d+28>>2];g=b+16|0;h=c[d+32>>2]|0;c[g>>2]=h;c[g+(c[h+-16>>2]|0)>>2]=c[d+36>>2];h=b+20|0;l=c[d+40>>2]|0;c[h>>2]=l;c[h+(c[l+-16>>2]|0)>>2]=c[d+44>>2];l=c[d+4>>2]|0;c[m>>2]=l;c[m+(c[l+-16>>2]|0)>>2]=c[d+48>>2];c[k>>2]=c[d+52>>2];c[j>>2]=c[d+56>>2];c[g>>2]=c[d+60>>2];c[h>>2]=c[d+64>>2];l=b+24|0;c[l>>2]=0;c[l+4>>2]=0;c[l+8>>2]=0;c[l+12>>2]=0;c[l+16>>2]=0;c[l+20>>2]=0;l=c[d>>2]|0;c[b>>2]=l;c[m>>2]=c[d+68>>2];c[b+(c[l+-12>>2]|0)>>2]=c[d+72>>2];c[k>>2]=c[d+76>>2];c[j>>2]=c[d+80>>2];c[g>>2]=c[d+84>>2];c[h>>2]=c[d+88>>2];c[b+52>>2]=12880;h=b+56|0;c[h>>2]=0;a[b+60>>0]=0;d=b+64|0;kM(d,0,1);g=b+76|0;kM(g,0,1);c[h>>2]=b+(c[(c[b>>2]|0)+-12>>2]|0);kM(f,1,4);rM(g,rM(d,f)|0)|0;c[b+72>>2]=0;i=e;return}function IP(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0;a[b+48>>0]=0;g=c[d>>2]|0;if(!g){n=0;return n|0}h=b+52|0;pc[c[(c[h>>2]|0)+12>>2]&1023](h,g);d=c[g+4>>2]|0;i=g+8|0;a:do if((d|0)==(c[i>>2]|0))k=4;else{while(1){f=rc[c[(c[h>>2]|0)+24>>2]&127](h)|0;e=c[h>>2]|0;if(f){j=e;break a}f=c[d>>2]|0;if(!f)break;pc[c[e+8>>2]&1023](h,f);d=d+4|0;if((d|0)==(c[i>>2]|0)){k=4;break a}}Ha(78999,79014,95,78956)}while(0);if((k|0)==4)j=c[h>>2]|0;pc[c[j+16>>2]&1023](h,g);j=b+44|0;d=c[j>>2]|0;i=b+40|0;f=c[i>>2]|0;e=d+-1+f|0;h=b+28|0;g=c[h>>2]|0;e=c[(c[g+(e>>>10<<2)>>2]|0)+((e&1023)<<2)>>2]|0;do if(e){d=e+((c[(c[e>>2]|0)+-12>>2]|0)+4)|0;k=(c[d>>2]|0)+1|0;c[d>>2]=k;if(!k)Ha(79054,79014,48,79068);else{l=c[j>>2]|0;n=e;break}}else{l=d;n=0}while(0);d=l+-1+f|0;d=c[(c[g+(d>>>10<<2)>>2]|0)+((d&1023)<<2)>>2]|0;if((d|0)!=0?(k=c[(c[d>>2]|0)+-12>>2]|0,m=d+k|0,k=d+(k+4)|0,l=(c[k>>2]|0)+-1|0,c[k>>2]=l,!((m|0)==0|(l|0)!=0)):0){oc[c[(c[m>>2]|0)+4>>2]&2047](m);g=c[h>>2]|0;f=c[i>>2]|0}m=c[j>>2]|0;c[j>>2]=m+-1;d=b+32|0;e=c[d>>2]|0;if((1-f-m+((e|0)==(g|0)?0:(e-g<<8)+-1|0)|0)>>>0<=2047)return n|0;P_(c[e+-4>>2]|0);c[d>>2]=(c[d>>2]|0)+-4;return n|0}function JP(b,d){b=b|0;d=d|0;var e=0,f=0;e=i;i=i+16|0;f=e;a[b+48>>0]=0;kM(f,1,4);rM(b+76|0,rM(b+64|0,f)|0)|0;c[b+72>>2]=0;HT(b+4|0,d);i=e;return}function KP(b,d){b=b|0;d=d|0;var e=0,f=0;e=i;i=i+16|0;f=e;b=b+-4|0;a[b+48>>0]=0;kM(f,1,4);rM(b+76|0,rM(b+64|0,f)|0)|0;c[b+72>>2]=0;HT(b+4|0,d);i=e;return}function LP(b,d){b=b|0;d=d|0;var e=0,f=0,g=0;e=i;i=i+16|0;g=e;f=b+-8|0;a[f+48>>0]=0;kM(g,1,4);rM(f+76|0,rM(f+64|0,g)|0)|0;c[f+72>>2]=0;HT(b+-4|0,d);i=e;return}function MP(b,c){b=b|0;c=c|0;a[b+48>>0]=1;JT(b+4|0,c);return}function NP(b,c){b=b|0;c=c|0;b=b+-4|0;a[b+48>>0]=1;JT(b+4|0,c);return}function OP(b,c){b=b|0;c=c|0;b=b+-12|0;a[b+48>>0]=1;JT(b+4|0,c);return}function PP(b,c){b=b|0;c=c|0;a[b+48>>0]=0;RT(b+4|0,c);return}function QP(b,c){b=b|0;c=c|0;b=b+-4|0;a[b+48>>0]=0;RT(b+4|0,c);return}function RP(b,c){b=b|0;c=c|0;b=b+-12|0;a[b+48>>0]=0;RT(b+4|0,c);return}function SP(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,j=0,k=0,l=0,m=0,o=0,p=0,q=0,r=0;r=i;i=i+32|0;q=r+20|0;g=r+16|0;o=r+4|0;k=r;f=HO(d)|0;if((f|0)==-1){e=c[d>>2]|0;if(!e)Ha(78999,79014,102,79043);if((c[e+52>>2]|0)==106)a[b+72>>0]=1;IO(d)}e=c[d>>2]|0;if(!e)Ha(78999,79014,102,79043);if(!((f|0)==2&(AF(e)|0))){e=c[d>>2]|0;if(!e)Ha(78999,79014,102,79043);if((f|0)==1&(zF(e)|0)){e=c[d>>2]|0;if(!e)Ha(78999,79014,102,79043);BF(o,e);e=b+52|0;f=c[(yQ(e,o)|0)>>2]|0;c[k>>2]=f;if(f){p=f+((c[(c[f>>2]|0)+-12>>2]|0)+4)|0;q=(c[p>>2]|0)+1|0;c[p>>2]=q;if(!q)Ha(79054,79014,48,79068);KO(d,-1);JO(k,-1);e=yQ(e,o)|0;f=c[e>>2]|0;if(f){p=c[(c[f>>2]|0)+-12>>2]|0;g=f+p|0;p=f+(p+4)|0;q=(c[p>>2]|0)+-1|0;c[p>>2]=q;if(!((g|0)==0|(q|0)!=0))oc[c[(c[g>>2]|0)+4>>2]&2047](g);c[e>>2]=0}e=c[k>>2]|0;if((e|0)!=0?(p=c[(c[e>>2]|0)+-12>>2]|0,l=e+p|0,p=e+(p+4)|0,q=(c[p>>2]|0)+-1|0,c[p>>2]=q,!((l|0)==0|(q|0)!=0)):0)oc[c[(c[l>>2]|0)+4>>2]&2047](l)}o2(o)}if(a[b+72>>0]|0){i=r;return}NT(b,d);i=r;return}if((a[8952]|0)==0?(Ga(8952)|0)!=0:0){$e(39720);Ta(52,39720,n|0)|0;$a(8952)}e=c[d>>2]|0;if(!e)Ha(78999,79014,102,79043);e=_e(39720,e+20|0,c[e+48>>2]|0)|0;c[q>>2]=e;if(e){l=e+((c[(c[e>>2]|0)+-12>>2]|0)+4)|0;o=(c[l>>2]|0)+1|0;c[l>>2]=o;if(!o)Ha(79054,79014,48,79068);l=c[(c[e>>2]|0)+-12>>2]|0;f=e+l|0;l=e+(l+4)|0;o=(c[l>>2]|0)+-1|0;c[l>>2]=o;if(!((f|0)==0|(o|0)!=0))oc[c[(c[f>>2]|0)+4>>2]&2047](f)}f=c[(c[b>>2]|0)+68>>2]|0;e=c[d>>2]|0;c[g>>2]=e;if((e|0)!=0?(o=e+((c[(c[e>>2]|0)+-12>>2]|0)+4)|0,d=(c[o>>2]|0)+1|0,c[o>>2]=d,(d|0)==0):0)Ha(79054,79014,48,79068);e=tc[f&63](b,g,q)|0;f=c[q>>2]|0;if((f|0)!=(e|0)){if((e|0)!=0?(o=e+((c[(c[e>>2]|0)+-12>>2]|0)+4)|0,d=(c[o>>2]|0)+1|0,c[o>>2]=d,(d|0)==0):0)Ha(79054,79014,48,79068);if((f|0)!=0?(o=c[(c[f>>2]|0)+-12>>2]|0,h=f+o|0,o=f+(o+4)|0,d=(c[o>>2]|0)+-1|0,c[o>>2]=d,!((h|0)==0|(d|0)!=0)):0)oc[c[(c[h>>2]|0)+4>>2]&2047](h);c[q>>2]=e}if((e|0)!=0?(o=c[(c[e>>2]|0)+-12>>2]|0,j=e+o|0,o=e+(o+4)|0,d=(c[o>>2]|0)+-1|0,c[o>>2]=d,!((j|0)==0|(d|0)!=0)):0)oc[c[(c[j>>2]|0)+4>>2]&2047](j);e=c[g>>2]|0;if((e|0)!=0?(o=c[(c[e>>2]|0)+-12>>2]|0,m=e+o|0,o=e+(o+4)|0,d=(c[o>>2]|0)+-1|0,c[o>>2]=d,!((m|0)==0|(d|0)!=0)):0)oc[c[(c[m>>2]|0)+4>>2]&2047](m);FT(b,q,0);e=c[q>>2]|0;if(!e)Ha(78999,79014,102,79043);f=yQ(b+52|0,e+20|0)|0;e=c[q>>2]|0;g=c[f>>2]|0;if((g|0)!=(e|0)){if((e|0)!=0?(d=e+((c[(c[e>>2]|0)+-12>>2]|0)+4)|0,b=(c[d>>2]|0)+1|0,c[d>>2]=b,(b|0)==0):0)Ha(79054,79014,48,79068);if((g|0)!=0?(d=c[(c[g>>2]|0)+-12>>2]|0,p=g+d|0,d=g+(d+4)|0,b=(c[d>>2]|0)+-1|0,c[d>>2]=b,!((p|0)==0|(b|0)!=0)):0)oc[c[(c[p>>2]|0)+4>>2]&2047](p);c[f>>2]=e;e=c[q>>2]|0}if(!e){i=r;return}q=c[(c[e>>2]|0)+-12>>2]|0;f=e+q|0;q=e+(q+4)|0;b=(c[q>>2]|0)+-1|0;c[q>>2]=b;if((f|0)==0|(b|0)!=0){i=r;return}oc[c[(c[f>>2]|0)+4>>2]&2047](f);i=r;return}function TP(a,b){a=a|0;b=b|0;SP(a+-16|0,b);return}function UP(b,d){b=b|0;d=d|0;var e=0,f=0,g=0;e=b+72|0;if(!(a[e>>0]|0)){TT(b,d);return}a[e>>0]=0;a[b+73>>0]=0;d=b+44|0;f=c[d>>2]|0;if(f){g=c[(c[f>>2]|0)+-12>>2]|0;e=f+g|0;g=f+(g+4)|0;f=(c[g>>2]|0)+-1|0;c[g>>2]=f;if(!((e|0)==0|(f|0)!=0))oc[c[(c[e>>2]|0)+4>>2]&2047](e);c[d>>2]=0}e=b+48|0;d=c[e>>2]|0;if(!d)return;b=c[(c[d>>2]|0)+-12>>2]|0;f=d+b|0;b=d+(b+4)|0;g=(c[b>>2]|0)+-1|0;c[b>>2]=g;if(!((f|0)==0|(g|0)!=0))oc[c[(c[f>>2]|0)+4>>2]&2047](f);c[e>>2]=0;return}function VP(b,d){b=b|0;d=d|0;var e=0,f=0,g=0;f=b+-16|0;b=f+72|0;if(!(a[b>>0]|0)){TT(f,d);return}a[b>>0]=0;a[f+73>>0]=0;d=f+44|0;e=c[d>>2]|0;if(e){g=c[(c[e>>2]|0)+-12>>2]|0;b=e+g|0;g=e+(g+4)|0;e=(c[g>>2]|0)+-1|0;c[g>>2]=e;if(!((b|0)==0|(e|0)!=0))oc[c[(c[b>>2]|0)+4>>2]&2047](b);c[d>>2]=0}b=f+48|0;d=c[b>>2]|0;if(!d)return;f=c[(c[d>>2]|0)+-12>>2]|0;e=d+f|0;f=d+(f+4)|0;g=(c[f>>2]|0)+-1|0;c[f>>2]=g;if(!((e|0)==0|(g|0)!=0))oc[c[(c[e>>2]|0)+4>>2]&2047](e);c[b>>2]=0;return}function WP(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0;t=i;i=i+96|0;e=t+32|0;f=t+24|0;h=t+16|0;j=t+8|0;s=t+40|0;n=t;m=b+64|0;g=c[d>>2]|0;if(!g)Ha(78999,79014,102,79043);lM(f,m);se(e,g,f,0);rM(m,e)|0;if(!(a[b+72>>0]|0)){JT(b,d);i=t;return}a[b+73>>0]=1;l=b+48|0;e=c[l>>2]|0;if(e){e=o$(e,1576,1664,0)|0;if(!e){i=t;return}te(j,e);mM(h,j,m);ue(e,h)|0;i=t;return}g=c[10857]|0;c[s>>2]=g;c[s+(c[g+-16>>2]|0)>>2]=c[10858];g=s+4|0;h=c[10859]|0;c[g>>2]=h;c[g+(c[h+-16>>2]|0)>>2]=c[10860];h=s+8|0;j=c[10861]|0;c[h>>2]=j;c[h+(c[j+-16>>2]|0)>>2]=c[10862];j=s+12|0;k=c[10863]|0;c[j>>2]=k;c[j+(c[k+-16>>2]|0)>>2]=c[10864];k=s+16|0;r=c[10865]|0;c[k>>2]=r;c[k+(c[r+-16>>2]|0)>>2]=c[10866];c[s>>2]=1136;c[s+4>>2]=1228;c[s+8>>2]=1260;c[s+12>>2]=1292;c[s+16>>2]=1324;r=s+20|0;c[r>>2]=0;c[r+4>>2]=0;c[r+8>>2]=0;c[r+12>>2]=0;c[r+16>>2]=0;c[r+20>>2]=0;e=c[d>>2]|0;if(!e)Ha(78999,79014,95,78956);ue(e,m)|0;e=c[d>>2]|0;c[n>>2]=e;if((e|0)!=0?(d=e+((c[(c[e>>2]|0)+-12>>2]|0)+4)|0,m=(c[d>>2]|0)+1|0,c[d>>2]=m,(m|0)==0):0)Ha(79054,79014,48,79068);e=AT(s,n)|0;f=c[l>>2]|0;if((f|0)!=(e|0)){if((e|0)!=0?(d=e+((c[(c[e>>2]|0)+-12>>2]|0)+4)|0,m=(c[d>>2]|0)+1|0,c[d>>2]=m,(m|0)==0):0)Ha(79054,79014,48,79068);if((f|0)!=0?(d=c[(c[f>>2]|0)+-12>>2]|0,o=f+d|0,d=f+(d+4)|0,m=(c[d>>2]|0)+-1|0,c[d>>2]=m,!((o|0)==0|(m|0)!=0)):0)oc[c[(c[o>>2]|0)+4>>2]&2047](o);c[l>>2]=e}if((e|0)!=0?(m=c[(c[e>>2]|0)+-12>>2]|0,p=e+m|0,m=e+(m+4)|0,o=(c[m>>2]|0)+-1|0,c[m>>2]=o,!((p|0)==0|(o|0)!=0)):0)oc[c[(c[p>>2]|0)+4>>2]&2047](p);e=c[n>>2]|0;if((e|0)!=0?(o=c[(c[e>>2]|0)+-12>>2]|0,q=e+o|0,o=e+(o+4)|0,p=(c[o>>2]|0)+-1|0,c[o>>2]=p,!((q|0)==0|(p|0)!=0)):0)oc[c[(c[q>>2]|0)+4>>2]&2047](q);FT(b,l,0);e=c[10856]|0;c[s>>2]=e;c[s+(c[e+-16>>2]|0)>>2]=c[10867];c[g>>2]=c[10868];c[h>>2]=c[10869];c[j>>2]=c[10870];c[k>>2]=c[10871];pG(r);g=s+24|0;e=c[g>>2]|0;h=s+28|0;f=c[h>>2]|0;if((e|0)!=(f|0)){do{P_(c[e>>2]|0);e=e+4|0}while((e|0)!=(f|0));e=c[g>>2]|0;f=c[h>>2]|0;if((f|0)!=(e|0))c[h>>2]=f+(~((f+-4-e|0)>>>2)<<2)}e=c[r>>2]|0;if(e)P_(e);i=t;return}function XP(a,b){a=a|0;b=b|0;WP(a+-8|0,b);return}function YP(b,c){b=b|0;c=c|0;if(a[b+73>>0]|0)return;RT(b,c);return}function ZP(b,c){b=b|0;c=c|0;b=b+-8|0;if(a[b+73>>0]|0)return;RT(b,c);return}function _P(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,j=0,k=0,l=0;k=i;i=i+16|0;e=k;f=c[d>>2]|0;if(!f)Ha(78999,79014,102,79043);kM(e,-999999,4);do if(!(uM(f+60|0,e)|0)){e=c[d>>2]|0;if(!e)Ha(78999,79014,102,79043);else{rM(b+64|0,e+60|0)|0;break}}while(0);f=b+52|0;g=b+56|0;zQ(f,c[g>>2]|0);c[b+60>>2]=0;c[f>>2]=g;c[g>>2]=0;if(a[b+73>>0]|0){i=k;return}if(!(a[b+72>>0]|0)){LT(b,d);i=k;return}g=b+44|0;e=c[g>>2]|0;if(e){HE(e,b+64|0)|0;i=k;return}f=zc[c[(c[b>>2]|0)+72>>2]&255](b,d)|0;e=c[g>>2]|0;if((e|0)!=(f|0)){if((f|0)!=0?(l=f+((c[(c[f>>2]|0)+-12>>2]|0)+4)|0,d=(c[l>>2]|0)+1|0,c[l>>2]=d,(d|0)==0):0)Ha(79054,79014,48,79068);if((e|0)!=0?(d=c[(c[e>>2]|0)+-12>>2]|0,h=e+d|0,d=e+(d+4)|0,l=(c[d>>2]|0)+-1|0,c[d>>2]=l,!((h|0)==0|(l|0)!=0)):0)oc[c[(c[h>>2]|0)+4>>2]&2047](h);c[g>>2]=f}if(!f)Ha(78999,79014,95,78956);h=c[(c[f>>2]|0)+-12>>2]|0;e=f+h|0;h=f+(h+4)|0;l=(c[h>>2]|0)+-1|0;c[h>>2]=l;if(!((e|0)==0|(l|0)!=0)){oc[c[(c[e>>2]|0)+4>>2]&2047](e);e=c[g>>2]|0;if(!e)Ha(78999,79014,95,78956);else j=e}else j=f;GE(j,b+64|0)|0;ET(b,g,0);i=k;return}function $P(a,b){a=a|0;b=b|0;_P(a+-12|0,b);return}function aQ(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,j=0,k=0,l=0,m=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0;Y=i;i=i+240|0;U=Y+144|0;j=Y+96|0;L=Y+84|0;J=Y+56|0;D=Y+44|0;I=Y+40|0;E=Y+28|0;H=Y+24|0;V=Y+152|0;N=Y+12|0;T=Y+100|0;Q=Y;kM(U,1,4);rM(b+92|0,U)|0;if((a[8952]|0)==0?(Ga(8952)|0)!=0:0){$e(39720);Ta(52,39720,n|0)|0;$a(8952)}h=We(39720)|0;c[j>>2]=h;do if(h){K=h+((c[(c[h>>2]|0)+-12>>2]|0)+4)|0;U=(c[K>>2]|0)+1|0;c[K>>2]=U;if(!U)Ha(79054,79014,48,79068);K=c[(c[h>>2]|0)+-12>>2]|0;f=h+K|0;K=h+(K+4)|0;U=(c[K>>2]|0)+-1|0;c[K>>2]=U;if((f|0)==0|(U|0)!=0){U=j;break}else{oc[c[(c[f>>2]|0)+4>>2]&2047](f);g=j;f=c[j>>2]|0;R=11;break}}else{g=j;f=h;R=11}while(0);if((R|0)==11)if(!f){X=0;i=Y;return X|0}else U=g;f=b+4|0;Dc[c[(c[f>>2]|0)+60>>2]&63](f,j,1);f=c[d>>2]|0;if(!f){f=c[U>>2]|0;if(f){G=f+((c[(c[f>>2]|0)+-12>>2]|0)+4)|0;K=(c[G>>2]|0)+1|0;c[G>>2]=K;if(!K)Ha(79054,79014,48,79068);else X=f}else X=0}else{G=f+((c[(c[f>>2]|0)+-12>>2]|0)+4)|0;K=(c[G>>2]|0)+1|0;c[G>>2]=K;if(!K)Ha(79054,79014,48,79068);else X=f}f=c[e>>2]|0;if(!f){f=c[U>>2]|0;if(f){G=f+((c[(c[f>>2]|0)+-12>>2]|0)+4)|0;K=(c[G>>2]|0)+1|0;c[G>>2]=K;if(!K)Ha(79054,79014,48,79068);else W=f}else W=0}else{G=f+((c[(c[f>>2]|0)+-12>>2]|0)+4)|0;K=(c[G>>2]|0)+1|0;c[G>>2]=K;if(!K)Ha(79054,79014,48,79068);else W=f}if(!X)Ha(78999,79014,102,79043);if(!W)Ha(78999,79014,102,79043);f=c[X+4>>2]|0;e=c[W+4>>2]|0;a[b+108>>0]=1;G=b+(c[(c[b>>2]|0)+-12>>2]|0)|0;c[L>>2]=12880;c[L+4>>2]=G;a[L+8>>0]=0;G=X+8|0;K=W+8|0;s=b+52|0;t=b+56|0;u=b+60|0;v=b+64|0;w=b+68|0;x=b+72|0;y=b+76|0;z=b+80|0;A=b+84|0;C=b+104|0;B=J+4|0;l=J+8|0;m=J+12|0;o=J+24|0;p=J+16|0;q=J+20|0;r=J+4|0;a:while(1){do{g=c[G>>2]|0;if((f|0)==(g|0)){g=f;R=76;break a}if((e|0)==(c[K>>2]|0)){R=76;break a}ZG(s,c[t>>2]|0);c[u>>2]=0;c[s>>2]=t;c[t>>2]=0;ZG(v,c[w>>2]|0);c[x>>2]=0;c[v>>2]=w;c[w>>2]=0;ZG(y,c[z>>2]|0);c[A>>2]=0;c[y>>2]=z;c[z>>2]=0;if((f|0)!=(c[G>>2]|0)){c[C>>2]=0;k=c[f>>2]|0;if(!k){R=34;break a}pc[c[(c[L>>2]|0)+12>>2]&1023](L,k);g=c[k+4>>2]|0;d=k+8|0;b:do if((g|0)==(c[d>>2]|0))R=36;else{j=g;while(1){h=rc[c[(c[L>>2]|0)+24>>2]&127](L)|0;g=c[L>>2]|0;if(h)break b;h=c[j>>2]|0;if(!h){R=39;break a}pc[c[g+8>>2]&1023](L,h);j=j+4|0;if((j|0)==(c[d>>2]|0)){R=36;break}}}while(0);if((R|0)==36){R=0;g=c[L>>2]|0}pc[c[g+16>>2]&1023](L,k);f=f+4|0}}while((e|0)==(c[K>>2]|0));c[C>>2]=1;c[J>>2]=41072;c[B>>2]=12880;a[m>>0]=0;c[l>>2]=J;l2(D,76695,3);if(c[(FO(v,D)|0)>>2]|0){c[o>>2]=0;c[p>>2]=0;c[q>>2]=0;k=c[e>>2]|0;if(!k)g=0;else{pc[c[(c[r>>2]|0)+12>>2]&1023](r,k);g=c[k+4>>2]|0;d=k+8|0;c:do if((g|0)==(c[d>>2]|0))R=46;else{j=g;while(1){h=rc[c[(c[r>>2]|0)+24>>2]&127](r)|0;g=c[r>>2]|0;if(h)break c;h=c[j>>2]|0;if(!h){R=49;break a}pc[c[g+8>>2]&1023](r,h);j=j+4|0;if((j|0)==(c[d>>2]|0)){R=46;break}}}while(0);if((R|0)==46){R=0;g=c[r>>2]|0}pc[c[g+16>>2]&1023](r,k);g=c[o>>2]|0}o2(D);if(!g){if((a[8952]|0)==0?(Ga(8952)|0)!=0:0){$e(39720);Ta(52,39720,n|0)|0;$a(8952)}l2(E,76695,3);c[I>>2]=_e(39720,E,0)|0;o2(E);g=bd()|0;c[H>>2]=g;if(!g){R=57;break}Vc(g,0);g=c[I>>2]|0;if(!g){R=59;break}gd(g,H)|0;pc[c[(c[b>>2]|0)+20>>2]&1023](b,I);g=c[H>>2]|0;if((g|0)!=0?(d=g+4|0,k=(c[d>>2]|0)+-1|0,c[d>>2]=k,(k|0)==0):0)oc[c[(c[g>>2]|0)+4>>2]&2047](g);g=c[I>>2]|0;if((g|0)!=0?(d=c[(c[g>>2]|0)+-12>>2]|0,F=g+d|0,d=g+(d+4)|0,k=(c[d>>2]|0)+-1|0,c[d>>2]=k,!((F|0)==0|(k|0)!=0)):0)oc[c[(c[F>>2]|0)+4>>2]&2047](F)}}else o2(D);k=c[e>>2]|0;if(!k){R=68;break}pc[c[(c[L>>2]|0)+12>>2]&1023](L,k);g=c[k+4>>2]|0;d=k+8|0;d:do if((g|0)==(c[d>>2]|0))R=70;else{j=g;while(1){h=rc[c[(c[L>>2]|0)+24>>2]&127](L)|0;g=c[L>>2]|0;if(h)break d;h=c[j>>2]|0;if(!h){R=73;break a}pc[c[g+8>>2]&1023](L,h);j=j+4|0;if((j|0)==(c[d>>2]|0)){R=70;break}}}while(0);if((R|0)==70){R=0;g=c[L>>2]|0}pc[c[g+16>>2]&1023](L,k);e=e+4|0}if((R|0)==34)Ha(78999,79014,95,78956);else if((R|0)==39)Ha(78999,79014,95,78956);else if((R|0)==49)Ha(78999,79014,95,78956);else if((R|0)==57)Ha(78999,79014,102,79043);else if((R|0)==59)Ha(78999,79014,102,79043);else if((R|0)==68)Ha(78999,79014,95,78956);else if((R|0)==73)Ha(78999,79014,95,78956);else if((R|0)==76){c[C>>2]=2;e:do if((f|0)!=(g|0)){k=f;f:while(1){d=c[k>>2]|0;if(!d){R=79;break}pc[c[(c[L>>2]|0)+12>>2]&1023](L,d);f=c[d+4>>2]|0;j=d+8|0;g:do if((f|0)==(c[j>>2]|0))R=81;else{h=f;while(1){b=rc[c[(c[L>>2]|0)+24>>2]&127](L)|0;f=c[L>>2]|0;if(b)break g;g=c[h>>2]|0;if(!g){R=84;break f}pc[c[f+8>>2]&1023](L,g);h=h+4|0;if((h|0)==(c[j>>2]|0)){R=81;break}}}while(0);if((R|0)==81){R=0;f=c[L>>2]|0}pc[c[f+16>>2]&1023](L,d);k=k+4|0;if((k|0)==(c[G>>2]|0))break e}if((R|0)==79)Ha(78999,79014,95,78956);else if((R|0)==84)Ha(78999,79014,95,78956)}while(0);h:do if((e|0)!=(c[K>>2]|0)){i:while(1){d=c[e>>2]|0;if(!d){R=88;break}pc[c[(c[L>>2]|0)+12>>2]&1023](L,d);f=c[d+4>>2]|0;j=d+8|0;j:do if((f|0)==(c[j>>2]|0))R=90;else{h=f;while(1){b=rc[c[(c[L>>2]|0)+24>>2]&127](L)|0;f=c[L>>2]|0;if(b)break j;g=c[h>>2]|0;if(!g){R=93;break i}pc[c[f+8>>2]&1023](L,g);h=h+4|0;if((h|0)==(c[j>>2]|0)){R=90;break}}}while(0);if((R|0)==90){R=0;f=c[L>>2]|0}pc[c[f+16>>2]&1023](L,d);e=e+4|0;if((e|0)==(c[K>>2]|0))break h}if((R|0)==88)Ha(78999,79014,95,78956);else if((R|0)==93)Ha(78999,79014,95,78956)}while(0);AQ(V);f=V+(c[(c[V>>2]|0)+-16>>2]|0)|0;c[N>>2]=12880;c[N+4>>2]=f;a[N+8>>0]=0;d=c[U>>2]|0;if(!d)Ha(78999,79014,95,78956);pc[c[(c[d>>2]|0)+32>>2]&1023](d,f);f=c[d+4>>2]|0;j=d+8|0;k:do if((f|0)==(c[j>>2]|0))R=100;else{while(1){L=rc[c[(c[N>>2]|0)+24>>2]&127](N)|0;g=c[N>>2]|0;if(L){M=g;break k}h=c[f>>2]|0;if(!h)break;pc[c[g+8>>2]&1023](N,h);f=f+4|0;if((f|0)==(c[j>>2]|0)){R=100;break k}}Ha(78999,79014,95,78956)}while(0);if((R|0)==100)M=c[N>>2]|0;pc[c[M+16>>2]&1023](N,d);g=rc[c[(c[V>>2]|0)+20>>2]&127](V)|0;f=c[U>>2]|0;if((f|0)!=(g|0)){if((g|0)!=0?(M=g+((c[(c[g>>2]|0)+-12>>2]|0)+4)|0,N=(c[M>>2]|0)+1|0,c[M>>2]=N,(N|0)==0):0)Ha(79054,79014,48,79068);if((f|0)!=0?(M=c[(c[f>>2]|0)+-12>>2]|0,O=f+M|0,M=f+(M+4)|0,N=(c[M>>2]|0)+-1|0,c[M>>2]=N,!((O|0)==0|(N|0)!=0)):0)oc[c[(c[O>>2]|0)+4>>2]&2047](O);c[U>>2]=g}if(g){N=c[(c[g>>2]|0)+-12>>2]|0;f=g+N|0;N=g+(N+4)|0;O=(c[N>>2]|0)+-1|0;c[N>>2]=O;if(!((f|0)==0|(O|0)!=0)){oc[c[(c[f>>2]|0)+4>>2]&2047](f);g=c[U>>2]|0}}else g=0;e=T+20|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[T>>2]=41108;c[T+4>>2]=41200;c[T+8>>2]=41232;c[T+12>>2]=41264;c[T+16>>2]=41296;c[Q>>2]=12880;c[Q+4>>2]=T;a[Q+8>>0]=0;if(!g)Ha(78999,79014,95,78956);pc[c[(c[g>>2]|0)+32>>2]&1023](g,T);f=c[g+4>>2]|0;d=g+8|0;l:do if((f|0)==(c[d>>2]|0))R=120;else{while(1){O=rc[c[(c[Q>>2]|0)+24>>2]&127](Q)|0;h=c[Q>>2]|0;if(O){P=h;break l}j=c[f>>2]|0;if(!j)break;pc[c[h+8>>2]&1023](Q,j);f=f+4|0;if((f|0)==(c[d>>2]|0)){R=120;break l}}Ha(78999,79014,95,78956)}while(0);if((R|0)==120)P=c[Q>>2]|0;pc[c[P+16>>2]&1023](Q,g);f=rc[c[(c[T>>2]|0)+20>>2]&127](T)|0;g=c[U>>2]|0;if((g|0)!=(f|0)){if((f|0)!=0?(Q=f+((c[(c[f>>2]|0)+-12>>2]|0)+4)|0,R=(c[Q>>2]|0)+1|0,c[Q>>2]=R,(R|0)==0):0)Ha(79054,79014,48,79068);do if(g){Q=c[(c[g>>2]|0)+-12>>2]|0;h=g+Q|0;Q=g+(Q+4)|0;R=(c[Q>>2]|0)+-1|0;c[Q>>2]=R;if((h|0)==0|(R|0)!=0)break;oc[c[(c[h>>2]|0)+4>>2]&2047](h)}while(0);c[U>>2]=f}if((f|0)!=0?(Q=c[(c[f>>2]|0)+-12>>2]|0,S=f+Q|0,Q=f+(Q+4)|0,R=(c[Q>>2]|0)+-1|0,c[Q>>2]=R,!((S|0)==0|(R|0)!=0)):0)oc[c[(c[S>>2]|0)+4>>2]&2047](S);c[T>>2]=1136;c[T+4>>2]=1228;c[T+8>>2]=1260;c[T+12>>2]=1292;c[T+16>>2]=1324;pG(e);h=T+24|0;f=c[h>>2]|0;j=T+28|0;g=c[j>>2]|0;if((f|0)!=(g|0)){do{P_(c[f>>2]|0);f=f+4|0}while((f|0)!=(g|0));f=c[h>>2]|0;g=c[j>>2]|0;if((g|0)!=(f|0))c[j>>2]=g+(~((g+-4-f|0)>>>2)<<2)}f=c[e>>2]|0;if(f)P_(f);BQ(V,40968);V=c[(c[W>>2]|0)+-12>>2]|0;f=W+V|0;V=W+(V+4)|0;W=(c[V>>2]|0)+-1|0;c[V>>2]=W;if(!((f|0)==0|(W|0)!=0))oc[c[(c[f>>2]|0)+4>>2]&2047](f);W=c[(c[X>>2]|0)+-12>>2]|0;f=X+W|0;W=X+(W+4)|0;X=(c[W>>2]|0)+-1|0;c[W>>2]=X;if(!((f|0)==0|(X|0)!=0))oc[c[(c[f>>2]|0)+4>>2]&2047](f);f=c[U>>2]|0;if(!f){X=0;i=Y;return X|0}g=o$(f,1576,8200,0)|0;do if(g){W=g+((c[(c[g>>2]|0)+-12>>2]|0)+4)|0;X=(c[W>>2]|0)+1|0;c[W>>2]=X;if(X)break;Ha(79054,79014,48,79068)}while(0);W=c[(c[f>>2]|0)+-12>>2]|0;h=f+W|0;W=f+(W+4)|0;X=(c[W>>2]|0)+-1|0;c[W>>2]=X;if((h|0)==0|(X|0)!=0){X=g;i=Y;return X|0}oc[c[(c[h>>2]|0)+4>>2]&2047](h);X=g;i=Y;return X|0}return 0}function bQ(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,j=0,k=0,l=0;l=i;i=i+16|0;h=l;d=c[b>>2]|0;if(!d)Ha(78999,79014,102,79043);f=d+20|0;if(zF(d)|0){f=FO(a+52|0,f)|0;d=c[b>>2]|0;e=c[f>>2]|0;if((e|0)==(d|0)){i=l;return}if((d|0)!=0?(k=d+((c[(c[d>>2]|0)+-12>>2]|0)+4)|0,b=(c[k>>2]|0)+1|0,c[k>>2]=b,(b|0)==0):0)Ha(79054,79014,48,79068);if((e|0)!=0?(k=c[(c[e>>2]|0)+-12>>2]|0,g=e+k|0,k=e+(k+4)|0,b=(c[k>>2]|0)+-1|0,c[k>>2]=b,!((g|0)==0|(b|0)!=0)):0)oc[c[(c[g>>2]|0)+4>>2]&2047](g);c[f>>2]=d;i=l;return}d=c[b>>2]|0;if(!d)Ha(78999,79014,102,79043);g=AF(d)|0;d=c[b>>2]|0;e=(d|0)==0;if(g){if(e)Ha(78999,79014,102,79043);BF(h,d);d=FO(a+52|0,h)|0;e=c[d>>2]|0;if(e){k=c[(c[e>>2]|0)+-12>>2]|0;f=e+k|0;k=e+(k+4)|0;b=(c[k>>2]|0)+-1|0;c[k>>2]=b;if(!((f|0)==0|(b|0)!=0))oc[c[(c[f>>2]|0)+4>>2]&2047](f);c[d>>2]=0}o2(h);i=l;return}if(e)Ha(78999,79014,102,79043);if(rc[c[(c[d>>2]|0)+8>>2]&127](d)|0){f=FO(a+52|0,f)|0;d=c[b>>2]|0;e=c[f>>2]|0;if((e|0)==(d|0)){i=l;return}if((d|0)!=0?(k=d+((c[(c[d>>2]|0)+-12>>2]|0)+4)|0,b=(c[k>>2]|0)+1|0,c[k>>2]=b,(b|0)==0):0)Ha(79054,79014,48,79068);if((e|0)!=0?(k=c[(c[e>>2]|0)+-12>>2]|0,j=e+k|0,k=e+(k+4)|0,b=(c[k>>2]|0)+-1|0,c[k>>2]=b,!((j|0)==0|(b|0)!=0)):0)oc[c[(c[j>>2]|0)+4>>2]&2047](j);c[f>>2]=d;i=l;return}d=c[b>>2]|0;if(!d)Ha(78999,79014,102,79043);d=c[d+52>>2]|0;a:do switch(d|0){case 73:case 74:case 75:case 76:case 79:case 56:case 57:case 58:case 59:case 60:case 61:case 55:case 68:case 20:case 24:case 25:case 28:case 30:case 31:case 48:case 62:break;default:if((d+-94|0)>>>0>=10){switch(d|0){case 109:case 114:break a;default:{}}i=l;return}}while(0);f=FO(a+64|0,f)|0;d=c[b>>2]|0;e=c[f>>2]|0;if((e|0)==(d|0)){i=l;return}if((d|0)!=0?(j=d+((c[(c[d>>2]|0)+-12>>2]|0)+4)|0,b=(c[j>>2]|0)+1|0,c[j>>2]=b,(b|0)==0):0)Ha(79054,79014,48,79068);if((e|0)!=0?(j=c[(c[e>>2]|0)+-12>>2]|0,k=e+j|0,j=e+(j+4)|0,b=(c[j>>2]|0)+-1|0,c[j>>2]=b,!((k|0)==0|(b|0)!=0)):0)oc[c[(c[k>>2]|0)+4>>2]&2047](k);c[f>>2]=d;i=l;return}function cQ(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0;d=c[b>>2]|0;if(!d)Ha(78999,79014,102,79043);g=d+20|0;if(!(rc[c[(c[d>>2]|0)+8>>2]&127](d)|0))return;f=FO(a+52|0,g)|0;d=c[f>>2]|0;if(d){l=c[(c[d>>2]|0)+-12>>2]|0;e=d+l|0;l=d+(l+4)|0;d=(c[l>>2]|0)+-1|0;c[l>>2]=d;if(!((e|0)==0|(d|0)!=0))oc[c[(c[e>>2]|0)+4>>2]&2047](e);c[f>>2]=0}if((HO(b)|0)<=1)return;d=(c[a+44>>2]|0)+-1+(c[a+40>>2]|0)|0;d=c[(c[(c[a+28>>2]|0)+(d>>>10<<2)>>2]|0)+((d&1023)<<2)>>2]|0;if((d|0)!=0?(h=o$(d,1576,8280,0)|0,(h|0)!=0):0){b=h+((c[(c[h>>2]|0)+-12>>2]|0)+4)|0;l=(c[b>>2]|0)+1|0;c[b>>2]=l;if(!l)Ha(79054,79014,48,79068);else{k=h;j=0}}else{k=0;j=1}d=FO(a+76|0,g)|0;e=c[d>>2]|0;if((e|0)!=(k|0)){if(!j?(a=k+((c[(c[k>>2]|0)+-12>>2]|0)+4)|0,l=(c[a>>2]|0)+1|0,c[a>>2]=l,(l|0)==0):0)Ha(79054,79014,48,79068);if((e|0)!=0?(a=c[(c[e>>2]|0)+-12>>2]|0,i=e+a|0,a=e+(a+4)|0,l=(c[a>>2]|0)+-1|0,c[a>>2]=l,!((i|0)==0|(l|0)!=0)):0)oc[c[(c[i>>2]|0)+4>>2]&2047](i);c[d>>2]=k}if(j)return;l=c[(c[k>>2]|0)+-12>>2]|0;d=k+l|0;k=k+(l+4)|0;l=(c[k>>2]|0)+-1|0;c[k>>2]=l;if((d|0)==0|(l|0)!=0)return;oc[c[(c[d>>2]|0)+4>>2]&2047](d);return}function dQ(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0;e=c[b>>2]|0;if(!e)Ha(78999,79014,102,79043);g=e+20|0;if(rc[c[(c[e>>2]|0)+8>>2]&127](e)|0){i=0;return i|0}e=a+64|0;f=c[(FO(e,g)|0)>>2]|0;if(!f){i=0;return i|0}j=f+((c[(c[f>>2]|0)+-12>>2]|0)+4)|0;a=(c[j>>2]|0)+1|0;c[j>>2]=a;if(!a)Ha(79054,79014,48,79068);a=zc[c[(c[f>>2]|0)+52>>2]&255](f,b)|0;if(d?(h=FO(e,g)|0,i=c[h>>2]|0,(i|0)!=0):0){j=c[(c[i>>2]|0)+-12>>2]|0;e=i+j|0;i=i+(j+4)|0;j=(c[i>>2]|0)+-1|0;c[i>>2]=j;if(!((e|0)==0|(j|0)!=0))oc[c[(c[e>>2]|0)+4>>2]&2047](e);c[h>>2]=0}i=c[(c[f>>2]|0)+-12>>2]|0;e=f+i|0;i=f+(i+4)|0;j=(c[i>>2]|0)+-1|0;c[i>>2]=j;if((e|0)==0|(j|0)!=0){j=a;return j|0}oc[c[(c[e>>2]|0)+4>>2]&2047](e);j=a;return j|0}function eQ(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0;F=i;i=i+32|0;l=F+28|0;o=F+16|0;n=F+4|0;m=F;e=c[b>>2]|0;if(!e)Ha(78999,79014,102,79043);if((rc[c[(c[e>>2]|0)+8>>2]&127](e)|0)==1){e=c[d>>2]|0;if(!e)Ha(78999,79014,102,79043);if((rc[c[(c[e>>2]|0)+8>>2]&127](e)|0)==1){e=c[b>>2]|0;if(!e)Ha(78999,79014,102,79043);u=c[c[e+4>>2]>>2]|0;v=(u|0)==0;if(!v?(p=u+((c[(c[u>>2]|0)+-12>>2]|0)+4)|0,q=(c[p>>2]|0)+1|0,c[p>>2]=q,(q|0)==0):0)Ha(79054,79014,48,79068);e=c[d>>2]|0;if(!e)Ha(78999,79014,102,79043);p=c[c[e+4>>2]>>2]|0;q=(p|0)==0;if(!q?(b=p+((c[(c[p>>2]|0)+-12>>2]|0)+4)|0,d=(c[b>>2]|0)+1|0,c[b>>2]=d,(d|0)==0):0)Ha(79054,79014,48,79068);if(!v?(h=o$(u,1576,8168,0)|0,(h|0)!=0):0){b=h+((c[(c[h>>2]|0)+-12>>2]|0)+4)|0;d=(c[b>>2]|0)+1|0;c[b>>2]=d;if(!d)Ha(79054,79014,48,79068);else{C=0;D=h}}else{C=1;D=0}if(!q?(j=o$(p,1576,8168,0)|0,(j|0)!=0):0){d=j+((c[(c[j>>2]|0)+-12>>2]|0)+4)|0;h=(c[d>>2]|0)+1|0;c[d>>2]=h;if(!h)Ha(79054,79014,48,79068);else{y=0;E=j}}else{y=1;E=0}do if(C){if(!v?(k=o$(u,1576,1664,0)|0,(k|0)!=0):0){j=k+((c[(c[k>>2]|0)+-12>>2]|0)+4)|0;l=(c[j>>2]|0)+1|0;c[j>>2]=l;if(!l)Ha(79054,79014,48,79068);else{w=0;x=k}}else{w=1;x=0}if(!q?(r=o$(p,1576,1664,0)|0,(r|0)!=0):0){k=r+((c[(c[r>>2]|0)+-12>>2]|0)+4)|0;l=(c[k>>2]|0)+1|0;c[k>>2]=l;if(!l)Ha(79054,79014,48,79068);if(w){g=0;f=0}else{c[o>>2]=0;j=o+4|0;c[j>>2]=0;c[o+8>>2]=0;c[n>>2]=0;h=n+4|0;c[h>>2]=0;c[n+8>>2]=0;f=a+100|0;c[m>>2]=c[f>>2];Dc[c[(c[x>>2]|0)+60>>2]&63](x,f,o);Dc[c[(c[r>>2]|0)+60>>2]&63](r,m,n);f=c[j>>2]|0;e=c[o>>2]|0;g=f-e>>2;a:do if(!g){d=0;g=c[n>>2]|0;s=44}else{b=c[n>>2]|0;if((g|0)!=((c[h>>2]|0)-b>>2|0)){d=0;g=b;s=44;break}if((f|0)==(e|0)){d=1;g=b;s=44;break}else f=0;while(1){if((c[e+(f<<2)>>2]|0)!=(c[b+(f<<2)>>2]|0)){f=0;d=1;e=b;s=45;break a}f=f+1|0;if(f>>>0>=g>>>0){f=1;d=1;e=b;s=45;break}}}while(0);if((s|0)==44)if(!g)f=1;else{f=1;e=g;s=45}if((s|0)==45){g=c[h>>2]|0;if((g|0)!=(e|0))c[h>>2]=g+(~((g+-4-e|0)>>>2)<<2);P_(e);e=c[o>>2]|0}g=e;if(e){b=c[j>>2]|0;if((b|0)!=(e|0))c[j>>2]=b+(~((b+-4-g|0)>>>2)<<2);P_(e)}g=(d|0)!=0&1}o=c[(c[r>>2]|0)+-12>>2]|0;e=r+o|0;o=r+(o+4)|0;r=(c[o>>2]|0)+-1|0;c[o>>2]=r;if(!((e|0)==0|(r|0)!=0))oc[c[(c[e>>2]|0)+4>>2]&2047](e)}else{g=0;f=0}if(!w?(w=c[(c[x>>2]|0)+-12>>2]|0,t=x+w|0,w=x+(w+4)|0,x=(c[w>>2]|0)+-1|0,c[w>>2]=x,!((t|0)==0|(x|0)!=0)):0)oc[c[(c[t>>2]|0)+4>>2]&2047](t);if(!y)s=59}else{e=a+100|0;c[l>>2]=c[e>>2];e=DE(D,e)|0;if(y)Ha(78999,79014,102,79043);else{g=1;f=(e|0)==(DE(E,l)|0);s=59;break}}while(0);if((s|0)==59){y=c[(c[E>>2]|0)+-12>>2]|0;e=E+y|0;y=E+(y+4)|0;E=(c[y>>2]|0)+-1|0;c[y>>2]=E;if(!((e|0)==0|(E|0)!=0))oc[c[(c[e>>2]|0)+4>>2]&2047](e)}if(!C?(E=c[(c[D>>2]|0)+-12>>2]|0,z=D+E|0,D=D+(E+4)|0,E=(c[D>>2]|0)+-1|0,c[D>>2]=E,!((z|0)==0|(E|0)!=0)):0)oc[c[(c[z>>2]|0)+4>>2]&2047](z);if(!q?(D=c[(c[p>>2]|0)+-12>>2]|0,A=p+D|0,D=p+(D+4)|0,E=(c[D>>2]|0)+-1|0,c[D>>2]=E,!((A|0)==0|(E|0)!=0)):0)oc[c[(c[A>>2]|0)+4>>2]&2047](A);if(!v?(D=c[(c[u>>2]|0)+-12>>2]|0,B=u+D|0,D=u+(D+4)|0,E=(c[D>>2]|0)+-1|0,c[D>>2]=E,!((B|0)==0|(E|0)!=0)):0)oc[c[(c[B>>2]|0)+4>>2]&2047](B);if(g){E=f;i=F;return E|0}}}E=0;i=F;return E|0}function fQ(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,j=0,k=0;k=i;i=i+16|0;e=k+4|0;f=k;if(!((HO(d)|0)&2)){j=0;i=k;return j|0}j=c[d>>2]|0;if(!j)Ha(78999,79014,102,79043);if((c[j+52>>2]|0)!=106){j=1;i=k;return j|0}h=c[b>>2]|0;if((c[a+88>>2]|0)==(h|0)){j=1;i=k;return j|0}c[e>>2]=h;g=(h|0)==0;if(!g?(d=h+((c[(c[h>>2]|0)+-12>>2]|0)+4)|0,b=(c[d>>2]|0)+1|0,c[d>>2]=b,(b|0)==0):0)Ha(79054,79014,48,79068);c[f>>2]=j;d=j+((c[(c[j>>2]|0)+-12>>2]|0)+4)|0;b=(c[d>>2]|0)+1|0;c[d>>2]=b;if(!b)Ha(79054,79014,48,79068);b=eQ(a,e,f)|0;a=c[(c[j>>2]|0)+-12>>2]|0;d=j+a|0;a=j+(a+4)|0;j=(c[a>>2]|0)+-1|0;c[a>>2]=j;if(!((d|0)==0|(j|0)!=0))oc[c[(c[d>>2]|0)+4>>2]&2047](d);if(g){j=b;i=k;return j|0}j=c[(c[h>>2]|0)+-12>>2]|0;d=h+j|0;h=h+(j+4)|0;j=(c[h>>2]|0)+-1|0;c[h>>2]=j;if((d|0)==0|(j|0)!=0){j=b;i=k;return j|0}oc[c[(c[d>>2]|0)+4>>2]&2047](d);j=b;i=k;return j|0}function gQ(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0;q=i;i=i+16|0;p=q+8|0;g=q+4|0;h=q;if(!((HO(d)|0)&1)){p=0;i=q;return p|0}n=b+76|0;f=c[d>>2]|0;if(!f)Ha(78999,79014,102,79043);f=c[(FO(n,f+20|0)|0)>>2]|0;c[p>>2]=f;if(!f){p=0;i=q;return p|0}j=f+((c[(c[f>>2]|0)+-12>>2]|0)+4)|0;k=(c[j>>2]|0)+1|0;c[j>>2]=k;if(!k)Ha(79054,79014,48,79068);j=c[d>>2]|0;c[g>>2]=j;k=(j|0)==0;if(!k?(s=j+((c[(c[j>>2]|0)+-12>>2]|0)+4)|0,r=(c[s>>2]|0)+1|0,c[s>>2]=r,(r|0)==0):0)Ha(79054,79014,48,79068);c[h>>2]=f;r=f+((c[(c[f>>2]|0)+-12>>2]|0)+4)|0;s=(c[r>>2]|0)+1|0;c[r>>2]=s;if(!s)Ha(79054,79014,48,79068);g=fQ(b,g,h)|0;f=c[h>>2]|0;if((f|0)!=0?(r=c[(c[f>>2]|0)+-12>>2]|0,l=f+r|0,r=f+(r+4)|0,s=(c[r>>2]|0)+-1|0,c[r>>2]=s,!((l|0)==0|(s|0)!=0)):0)oc[c[(c[l>>2]|0)+4>>2]&2047](l);if(!k?(r=c[(c[j>>2]|0)+-12>>2]|0,m=j+r|0,r=j+(r+4)|0,s=(c[r>>2]|0)+-1|0,c[r>>2]=s,!((m|0)==0|(s|0)!=0)):0)oc[c[(c[m>>2]|0)+4>>2]&2047](m);if(!g){f=c[p>>2]|0;if(!f){s=0;i=q;return s|0}r=c[(c[f>>2]|0)+-12>>2]|0;g=f+r|0;r=f+(r+4)|0;s=(c[r>>2]|0)+-1|0;c[r>>2]=s;if((g|0)==0|(s|0)!=0){s=0;i=q;return s|0}oc[c[(c[g>>2]|0)+4>>2]&2047](g);s=0;i=q;return s|0}if(e){f=(HO(p)|0)==2;KO(p,f?-1:1);f=c[d>>2]|0;if(!f)Ha(78999,79014,102,79043);f=FO(n,f+20|0)|0;g=c[f>>2]|0;if(g){r=c[(c[g>>2]|0)+-12>>2]|0;h=g+r|0;r=g+(r+4)|0;s=(c[r>>2]|0)+-1|0;c[r>>2]=s;if(!((h|0)==0|(s|0)!=0))oc[c[(c[h>>2]|0)+4>>2]&2047](h);c[f>>2]=0}f=b+88|0;g=c[f>>2]|0;if(g){r=c[(c[g>>2]|0)+-12>>2]|0;h=g+r|0;r=g+(r+4)|0;s=(c[r>>2]|0)+-1|0;c[r>>2]=s;if(!((h|0)==0|(s|0)!=0))oc[c[(c[h>>2]|0)+4>>2]&2047](h);c[f>>2]=0}a[b+108>>0]=0;g=c[p>>2]|0;if(!g){s=1;i=q;return s|0}r=c[(c[g>>2]|0)+-12>>2]|0;f=g+r|0;r=g+(r+4)|0;s=(c[r>>2]|0)+-1|0;c[r>>2]=s;if((f|0)==0|(s|0)!=0){s=1;i=q;return s|0}oc[c[(c[f>>2]|0)+4>>2]&2047](f);s=1;i=q;return s|0}h=c[d>>2]|0;f=b+88|0;g=c[f>>2]|0;if((g|0)!=(h|0)){if((h|0)!=0?(r=h+((c[(c[h>>2]|0)+-12>>2]|0)+4)|0,s=(c[r>>2]|0)+1|0,c[r>>2]=s,(s|0)==0):0)Ha(79054,79014,48,79068);if((g|0)!=0?(r=c[(c[g>>2]|0)+-12>>2]|0,o=g+r|0,r=g+(r+4)|0,s=(c[r>>2]|0)+-1|0,c[r>>2]=s,!((o|0)==0|(s|0)!=0)):0)oc[c[(c[o>>2]|0)+4>>2]&2047](o);c[f>>2]=h}f=c[p>>2]|0;if(!f)Ha(78999,79014,102,79043);g=c[d>>2]|0;if(!g)Ha(78999,79014,102,79043);pc[c[(c[f>>2]|0)+4>>2]&1023](f,g+4|0);f=c[d>>2]|0;if(!f)Ha(78999,79014,102,79043);oc[c[(c[f>>2]|0)+16>>2]&2047](f);f=c[p>>2]|0;if(!f){s=1;i=q;return s|0}r=c[(c[f>>2]|0)+-12>>2]|0;g=f+r|0;r=f+(r+4)|0;s=(c[r>>2]|0)+-1|0;c[r>>2]=s;if((g|0)==0|(s|0)!=0){s=1;i=q;return s|0}oc[c[(c[g>>2]|0)+4>>2]&2047](g);s=1;i=q;return s|0}function hQ(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,j=0,k=0,l=0,m=0;m=i;i=i+16|0;g=m+8|0;k=m+4|0;h=m;switch(c[b+104>>2]|0){case 0:{NT(b+4|0,d);f=c[d>>2]|0;c[g>>2]=f;e=(f|0)==0;if(e){bQ(b,g);i=m;return}l=f+((c[(c[f>>2]|0)+-12>>2]|0)+4)|0;d=(c[l>>2]|0)+1|0;c[l>>2]=d;if(!d)Ha(79054,79014,48,79068);bQ(b,g);if(e){i=m;return}d=c[(c[f>>2]|0)+-12>>2]|0;e=f+d|0;d=f+(d+4)|0;b=(c[d>>2]|0)+-1|0;c[d>>2]=b;if((e|0)==0|(b|0)!=0){i=m;return}oc[c[(c[e>>2]|0)+4>>2]&2047](e);i=m;return}case 1:case 2:{if(!(a[b+108>>0]|0)){NT(b+4|0,d);i=m;return}e=c[d>>2]|0;c[k>>2]=e;if((e|0)!=0?(f=e+((c[(c[e>>2]|0)+-12>>2]|0)+4)|0,g=(c[f>>2]|0)+1|0,c[f>>2]=g,(g|0)==0):0)Ha(79054,79014,48,79068);if(!(gQ(b,k,0)|0)){e=c[d>>2]|0;c[h>>2]=e;if((e|0)!=0?(f=e+((c[(c[e>>2]|0)+-12>>2]|0)+4)|0,g=(c[f>>2]|0)+1|0,c[f>>2]=g,(g|0)==0):0)Ha(79054,79014,48,79068);f=(dQ(b,h,0)|0)^1;e=c[h>>2]|0;if((e|0)!=0?(g=c[(c[e>>2]|0)+-12>>2]|0,j=e+g|0,g=e+(g+4)|0,h=(c[g>>2]|0)+-1|0,c[g>>2]=h,!((j|0)==0|(h|0)!=0)):0)oc[c[(c[j>>2]|0)+4>>2]&2047](j)}else f=0;e=c[k>>2]|0;if((e|0)!=0?(j=c[(c[e>>2]|0)+-12>>2]|0,l=e+j|0,j=e+(j+4)|0,k=(c[j>>2]|0)+-1|0,c[j>>2]=k,!((l|0)==0|(k|0)!=0)):0)oc[c[(c[l>>2]|0)+4>>2]&2047](l);if(!f){i=m;return}NT(b+4|0,d);i=m;return}default:{i=m;return}}}function iQ(a,b){a=a|0;b=b|0;hQ(a+-4|0,b);return}function jQ(a,b){a=a|0;b=b|0;hQ(a+-20|0,b);return}function kQ(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,j=0,k=0,l=0,m=0;m=i;i=i+16|0;f=m+8|0;k=m+4|0;h=m;switch(c[b+104>>2]|0){case 0:{e=c[d>>2]|0;c[f>>2]=e;if((e|0)!=0?(k=e+((c[(c[e>>2]|0)+-12>>2]|0)+4)|0,l=(c[k>>2]|0)+1|0,c[k>>2]=l,(l|0)==0):0)Ha(79054,79014,48,79068);cQ(b,f);e=c[f>>2]|0;if((e|0)!=0?(k=c[(c[e>>2]|0)+-12>>2]|0,g=e+k|0,k=e+(k+4)|0,l=(c[k>>2]|0)+-1|0,c[k>>2]=l,!((g|0)==0|(l|0)!=0)):0)oc[c[(c[g>>2]|0)+4>>2]&2047](g);TT(b+4|0,d);i=m;return}case 1:case 2:{if(!(a[b+108>>0]|0)){TT(b+4|0,d);i=m;return}e=c[d>>2]|0;c[k>>2]=e;if((e|0)!=0?(f=e+((c[(c[e>>2]|0)+-12>>2]|0)+4)|0,g=(c[f>>2]|0)+1|0,c[f>>2]=g,(g|0)==0):0)Ha(79054,79014,48,79068);if(!(gQ(b,k,1)|0)){e=c[d>>2]|0;c[h>>2]=e;if((e|0)!=0?(f=e+((c[(c[e>>2]|0)+-12>>2]|0)+4)|0,g=(c[f>>2]|0)+1|0,c[f>>2]=g,(g|0)==0):0)Ha(79054,79014,48,79068);f=(dQ(b,h,0)|0)^1;e=c[h>>2]|0;if((e|0)!=0?(g=c[(c[e>>2]|0)+-12>>2]|0,j=e+g|0,g=e+(g+4)|0,h=(c[g>>2]|0)+-1|0,c[g>>2]=h,!((j|0)==0|(h|0)!=0)):0)oc[c[(c[j>>2]|0)+4>>2]&2047](j)}else f=0;e=c[k>>2]|0;if((e|0)!=0?(j=c[(c[e>>2]|0)+-12>>2]|0,l=e+j|0,j=e+(j+4)|0,k=(c[j>>2]|0)+-1|0,c[j>>2]=k,!((l|0)==0|(k|0)!=0)):0)oc[c[(c[l>>2]|0)+4>>2]&2047](l);if(!f){i=m;return}TT(b+4|0,d);i=m;return}default:{i=m;return}}}function lQ(a,b){a=a|0;b=b|0;kQ(a+-4|0,b);return}function mQ(a,b){a=a|0;b=b|0;kQ(a+-20|0,b);return}function nQ(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,j=0,k=0,l=0;k=i;i=i+32|0;g=k+24|0;j=k+16|0;f=k+8|0;h=k;e=c[d>>2]|0;if(!e)Ha(78999,79014,102,79043);lM(g,e+60|0);e=c[d>>2]|0;if(!e)Ha(78999,79014,102,79043);e=c[e+48>>2]|0;switch(c[b+104>>2]|0){case 0:{h=b+76|0;j=b+80|0;ZG(h,c[j>>2]|0);c[b+84>>2]=0;c[h>>2]=j;c[j>>2]=0;if((c[g>>2]|0)!=-999999)rM(b+92|0,g)|0;if((e|0)!=-999)c[b+100>>2]=e;break}case 1:{l=b+4|0;c[j>>2]=zc[c[(c[l>>2]|0)+72>>2]&255](l,d)|0;Dc[c[(c[l>>2]|0)+56>>2]&63](l,j,0);d=b+108|0;if(a[d>>0]|0){do if((e|0)==-999){e=c[j>>2]|0;if(!e)Ha(78999,79014,102,79043);else{c[e+48>>2]=1;break}}while(0);do if((c[g>>2]|0)==-999999?(kM(f,1,4),!(uM(b+92|0,f)|0)):0){e=c[j>>2]|0;if(!e)Ha(78999,79014,95,78956);else{kM(h,1,4);GE(e,h)|0;break}}while(0);a[d>>0]=0}e=c[j>>2]|0;if(!e){i=k;return}j=c[(c[e>>2]|0)+-12>>2]|0;d=e+j|0;j=e+(j+4)|0;l=(c[j>>2]|0)+-1|0;c[j>>2]=l;if((d|0)==0|(l|0)!=0){i=k;return}oc[c[(c[d>>2]|0)+4>>2]&2047](d);i=k;return}default:{}}LT(b+4|0,d);i=k;return}function oQ(a,b){a=a|0;b=b|0;nQ(a+-4|0,b);return}function pQ(a,b){a=a|0;b=b|0;nQ(a+-16|0,b);return}function qQ(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;e=i;i=i+16|0;d=e;b=c[b>>2]|0;c[d>>2]=b;if((b|0)!=0?(g=b+((c[(c[b>>2]|0)+-12>>2]|0)+4)|0,f=(c[g>>2]|0)+1|0,c[g>>2]=f,(f|0)==0):0)Ha(79054,79014,48,79068);if(((c[a+104>>2]|0)+-1|0)>>>0<2){NT(a+4|0,d);b=c[d>>2]|0}if(!b){i=e;return}f=c[(c[b>>2]|0)+-12>>2]|0;d=b+f|0;f=b+(f+4)|0;g=(c[f>>2]|0)+-1|0;c[f>>2]=g;if((d|0)==0|(g|0)!=0){i=e;return}oc[c[(c[d>>2]|0)+4>>2]&2047](d);i=e;return}function rQ(a,b){a=a|0;b=b|0;qQ(a+-48|0,b);return}function sQ(b,d){b=b|0;d=d|0;c[b+100>>2]=1;a[b+108>>0]=1;switch(c[b+104>>2]|0){case 2:case 0:break;default:return}HT(b+4|0,d);return}function tQ(b,d){b=b|0;d=d|0;b=b+-4|0;c[b+100>>2]=1;a[b+108>>0]=1;switch(c[b+104>>2]|0){case 2:case 0:break;default:return}HT(b+4|0,d);return}function uQ(b,d){b=b|0;d=d|0;b=b+-8|0;c[b+100>>2]=1;a[b+108>>0]=1;switch(c[b+104>>2]|0){case 2:case 0:break;default:return}HT(b+4|0,d);return}function vQ(a,b){a=a|0;b=b|0;if(((c[a+104>>2]|0)+-1|0)>>>0>=2)return;PT(a+4|0,b);return}function wQ(a,b){a=a|0;b=b|0;a=a+-4|0;if(((c[a+104>>2]|0)+-1|0)>>>0>=2)return;PT(a+4|0,b);return}function xQ(a,b){a=a|0;b=b|0;a=a+-8|0;if(((c[a+104>>2]|0)+-1|0)>>>0>=2)return;PT(a+4|0,b);return}function yQ(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0;h=i;i=i+16|0;e=h;f=yR(a,e,b)|0;d=c[f>>2]|0;if(d){a=d;a=a+28|0;i=h;return a|0}g=O_(32)|0;k2(g+16|0,b);c[g+28>>2]=0;d=c[e>>2]|0;c[g>>2]=0;c[g+4>>2]=0;c[g+8>>2]=d;c[f>>2]=g;d=c[c[a>>2]>>2]|0;if(!d)d=g;else{c[a>>2]=d;d=c[f>>2]|0}kE(c[a+4>>2]|0,d);a=a+8|0;c[a>>2]=(c[a>>2]|0)+1;a=g;a=a+28|0;i=h;return a|0}function zQ(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;if(!b)return;zQ(a,c[b>>2]|0);zQ(a,c[b+4>>2]|0);a=b+16|0;d=c[b+28>>2]|0;if((d|0)!=0?(f=c[(c[d>>2]|0)+-12>>2]|0,e=d+f|0,f=d+(f+4)|0,d=(c[f>>2]|0)+-1|0,c[f>>2]=d,!((e|0)==0|(d|0)!=0)):0)oc[c[(c[e>>2]|0)+4>>2]&2047](e);o2(a);P_(b);return}function AQ(b){b=b|0;var d=0;d=b+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;c[b>>2]=40764;c[b+4>>2]=40856;c[b+8>>2]=40888;c[b+12>>2]=40920;c[b+16>>2]=40952;c[b+44>>2]=0;c[b+48>>2]=0;c[b+56>>2]=0;c[b+60>>2]=0;c[b+52>>2]=b+56;kM(b+64|0,1,4);a[b+72>>0]=0;return}function BQ(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0;j=c[b>>2]|0;c[a>>2]=j;c[a+(c[j+-16>>2]|0)>>2]=c[b+68>>2];j=a+4|0;c[j>>2]=c[b+72>>2];f=a+8|0;c[f>>2]=c[b+76>>2];g=a+12|0;c[g>>2]=c[b+80>>2];h=a+16|0;c[h>>2]=c[b+84>>2];zQ(a+52|0,c[a+56>>2]|0);d=c[a+48>>2]|0;if((d|0)!=0?(k=c[(c[d>>2]|0)+-12>>2]|0,e=d+k|0,k=d+(k+4)|0,d=(c[k>>2]|0)+-1|0,c[k>>2]=d,!((e|0)==0|(d|0)!=0)):0)oc[c[(c[e>>2]|0)+4>>2]&2047](e);d=c[a+44>>2]|0;if((d|0)!=0?(e=c[(c[d>>2]|0)+-12>>2]|0,i=d+e|0,e=d+(e+4)|0,k=(c[e>>2]|0)+-1|0,c[e>>2]=k,!((i|0)==0|(k|0)!=0)):0)oc[c[(c[i>>2]|0)+4>>2]&2047](i);d=c[b+4>>2]|0;c[a>>2]=d;c[a+(c[d+-16>>2]|0)>>2]=c[b+48>>2];c[j>>2]=c[b+52>>2];c[f>>2]=c[b+56>>2];c[g>>2]=c[b+60>>2];c[h>>2]=c[b+64>>2];h=a+20|0;pG(h);f=a+24|0;d=c[f>>2]|0;g=a+28|0;e=c[g>>2]|0;if((d|0)!=(e|0)){do{P_(c[d>>2]|0);d=d+4|0}while((d|0)!=(e|0));d=c[f>>2]|0;e=c[g>>2]|0;if((e|0)!=(d|0))c[g>>2]=e+(~((e+-4-d|0)>>>2)<<2)}d=c[h>>2]|0;if(!d)return;P_(d);return}function CQ(a){a=a|0;YG(a,40592);return}function DQ(a){a=a|0;YG(a,40592);P_(a);return}function EQ(a){a=a|0;YG(a+-4|0,40592);return}function FQ(a){a=a|0;a=a+-4|0;YG(a,40592);P_(a);return}function GQ(a){a=a|0;YG(a+-8|0,40592);return}function HQ(a){a=a|0;a=a+-8|0;YG(a,40592);P_(a);return}function IQ(a){a=a|0;YG(a+-12|0,40592);return}function JQ(a){a=a|0;a=a+-12|0;YG(a,40592);P_(a);return}function KQ(a){a=a|0;YG(a+-16|0,40592);return}function LQ(a){a=a|0;a=a+-16|0;YG(a,40592);P_(a);return}function MQ(a){a=a|0;YG(a+-20|0,40592);return}function NQ(a){a=a|0;a=a+-20|0;YG(a,40592);P_(a);return}function OQ(a){a=a|0;YG(a+-48|0,40592);return}function PQ(a){a=a|0;a=a+-48|0;YG(a,40592);P_(a);return}function QQ(a,b){a=a|0;b=b|0;return}function RQ(a){a=a|0;return}function SQ(a){a=a|0;P_(a);return}function TQ(a,b){a=a|0;b=b|0;return}function UQ(a){a=a|0;return}function VQ(a){a=a|0;P_(a+(c[(c[a>>2]|0)+-12>>2]|0)|0);return}function WQ(a){a=a|0;BQ(a,40968);return}function XQ(a){a=a|0;BQ(a,40968);P_(a);return}function YQ(b,d){b=b|0;d=d|0;c[b+64>>2]=1;c[b+68>>2]=4;a[b+72>>0]=0;a[b+73>>0]=0;HT(b,d);return}function ZQ(a){a=a|0;BQ(a+-4|0,40968);return}function _Q(a){a=a|0;a=a+-4|0;BQ(a,40968);P_(a);return}function $Q(b,d){b=b|0;d=d|0;b=b+-4|0;c[b+64>>2]=1;c[b+68>>2]=4;a[b+72>>0]=0;a[b+73>>0]=0;HT(b,d);return}function aR(a){a=a|0;BQ(a+-8|0,40968);return}function bR(a){a=a|0;a=a+-8|0;BQ(a,40968);P_(a);return}function cR(a){a=a|0;BQ(a+-12|0,40968);return}function dR(a){a=a|0;a=a+-12|0;BQ(a,40968);P_(a);return}function eR(a){a=a|0;BQ(a+-16|0,40968);return}function fR(a){a=a|0;a=a+-16|0;BQ(a,40968);P_(a);return}function gR(a){a=a|0;var b=0,d=0,e=0,f=0,g=0;c[a>>2]=1136;c[a+4>>2]=1228;c[a+8>>2]=1260;c[a+12>>2]=1292;c[a+16>>2]=1324;g=a+20|0;pG(g);e=a+24|0;b=c[e>>2]|0;f=a+28|0;d=c[f>>2]|0;if((b|0)!=(d|0)){a=b;do{P_(c[a>>2]|0);a=a+4|0}while((a|0)!=(d|0));a=c[e>>2]|0;b=c[f>>2]|0;if((b|0)!=(a|0))c[f>>2]=b+(~((b+-4-a|0)>>>2)<<2)}a=c[g>>2]|0;if(!a)return;P_(a);return}function hR(a){a=a|0;var b=0,d=0,e=0,f=0,g=0;c[a>>2]=1136;c[a+4>>2]=1228;c[a+8>>2]=1260;c[a+12>>2]=1292;c[a+16>>2]=1324;f=a+20|0;pG(f);d=a+24|0;b=c[d>>2]|0;g=a+28|0;e=c[g>>2]|0;if((b|0)!=(e|0)){do{P_(c[b>>2]|0);b=b+4|0}while((b|0)!=(e|0));b=c[d>>2]|0;d=c[g>>2]|0;if((d|0)!=(b|0))c[g>>2]=d+(~((d+-4-b|0)>>>2)<<2)}b=c[f>>2]|0;if(!b){P_(a);return}P_(b);P_(a);return}function iR(a,b){a=a|0;b=b|0;if((HO(b)|0)==-1)return;NT(a,b);return}function jR(a,b){a=a|0;b=b|0;if((HO(b)|0)==-1)return;TT(a,b);return}function kR(a){a=a|0;var b=0,d=0,e=0,f=0;f=a+-4|0;c[f>>2]=1136;c[f+4>>2]=1228;c[f+8>>2]=1260;c[f+12>>2]=1292;c[f+16>>2]=1324;e=f+20|0;pG(e);b=f+24|0;a=c[b>>2]|0;f=f+28|0;d=c[f>>2]|0;if((a|0)!=(d|0)){do{P_(c[a>>2]|0);a=a+4|0}while((a|0)!=(d|0));a=c[b>>2]|0;b=c[f>>2]|0;if((b|0)!=(a|0))c[f>>2]=b+(~((b+-4-a|0)>>>2)<<2)}a=c[e>>2]|0;if(!a)return;P_(a);return}function lR(a){a=a|0;var b=0,d=0,e=0,f=0,g=0;g=a+-4|0;c[g>>2]=1136;c[g+4>>2]=1228;c[g+8>>2]=1260;c[g+12>>2]=1292;c[g+16>>2]=1324;e=g+20|0;pG(e);b=g+24|0;a=c[b>>2]|0;f=g+28|0;d=c[f>>2]|0;if((a|0)!=(d|0)){do{P_(c[a>>2]|0);a=a+4|0}while((a|0)!=(d|0));a=c[b>>2]|0;b=c[f>>2]|0;if((b|0)!=(a|0))c[f>>2]=b+(~((b+-4-a|0)>>>2)<<2)}a=c[e>>2]|0;if(!a){P_(g);return}P_(a);P_(g);return}function mR(a){a=a|0;var b=0,d=0,e=0,f=0;f=a+-8|0;c[f>>2]=1136;c[f+4>>2]=1228;c[f+8>>2]=1260;c[f+12>>2]=1292;c[f+16>>2]=1324;e=f+20|0;pG(e);b=f+24|0;a=c[b>>2]|0;f=f+28|0;d=c[f>>2]|0;if((a|0)!=(d|0)){do{P_(c[a>>2]|0);a=a+4|0}while((a|0)!=(d|0));a=c[b>>2]|0;b=c[f>>2]|0;if((b|0)!=(a|0))c[f>>2]=b+(~((b+-4-a|0)>>>2)<<2)}a=c[e>>2]|0;if(!a)return;P_(a);return}function nR(a){a=a|0;var b=0,d=0,e=0,f=0,g=0;g=a+-8|0;c[g>>2]=1136;c[g+4>>2]=1228;c[g+8>>2]=1260;c[g+12>>2]=1292;c[g+16>>2]=1324;e=g+20|0;pG(e);b=g+24|0;a=c[b>>2]|0;f=g+28|0;d=c[f>>2]|0;if((a|0)!=(d|0)){do{P_(c[a>>2]|0);a=a+4|0}while((a|0)!=(d|0));a=c[b>>2]|0;b=c[f>>2]|0;if((b|0)!=(a|0))c[f>>2]=b+(~((b+-4-a|0)>>>2)<<2)}a=c[e>>2]|0;if(!a){P_(g);return}P_(a);P_(g);return}function oR(a){a=a|0;var b=0,d=0,e=0,f=0;f=a+-12|0;c[f>>2]=1136;c[f+4>>2]=1228;c[f+8>>2]=1260;c[f+12>>2]=1292;c[f+16>>2]=1324;e=f+20|0;pG(e);b=f+24|0;a=c[b>>2]|0;f=f+28|0;d=c[f>>2]|0;if((a|0)!=(d|0)){do{P_(c[a>>2]|0);a=a+4|0}while((a|0)!=(d|0));a=c[b>>2]|0;b=c[f>>2]|0;if((b|0)!=(a|0))c[f>>2]=b+(~((b+-4-a|0)>>>2)<<2)}a=c[e>>2]|0;if(!a)return;P_(a);return}function pR(a){a=a|0;var b=0,d=0,e=0,f=0,g=0;g=a+-12|0;c[g>>2]=1136;c[g+4>>2]=1228;c[g+8>>2]=1260;c[g+12>>2]=1292;c[g+16>>2]=1324;e=g+20|0;pG(e);b=g+24|0;a=c[b>>2]|0;f=g+28|0;d=c[f>>2]|0;if((a|0)!=(d|0)){do{P_(c[a>>2]|0);a=a+4|0}while((a|0)!=(d|0));a=c[b>>2]|0;b=c[f>>2]|0;if((b|0)!=(a|0))c[f>>2]=b+(~((b+-4-a|0)>>>2)<<2)}a=c[e>>2]|0;if(!a){P_(g);return}P_(a);P_(g);return}function qR(a){a=a|0;var b=0,d=0,e=0,f=0;f=a+-16|0;c[f>>2]=1136;c[f+4>>2]=1228;c[f+8>>2]=1260;c[f+12>>2]=1292;c[f+16>>2]=1324;e=f+20|0;pG(e);b=f+24|0;a=c[b>>2]|0;f=f+28|0;d=c[f>>2]|0;if((a|0)!=(d|0)){do{P_(c[a>>2]|0);a=a+4|0}while((a|0)!=(d|0));a=c[b>>2]|0;b=c[f>>2]|0;if((b|0)!=(a|0))c[f>>2]=b+(~((b+-4-a|0)>>>2)<<2)}a=c[e>>2]|0;if(!a)return;P_(a);return}function rR(a){a=a|0;var b=0,d=0,e=0,f=0,g=0;g=a+-16|0;c[g>>2]=1136;c[g+4>>2]=1228;c[g+8>>2]=1260;c[g+12>>2]=1292;c[g+16>>2]=1324;e=g+20|0;pG(e);b=g+24|0;a=c[b>>2]|0;f=g+28|0;d=c[f>>2]|0;if((a|0)!=(d|0)){do{P_(c[a>>2]|0);a=a+4|0}while((a|0)!=(d|0));a=c[b>>2]|0;b=c[f>>2]|0;if((b|0)!=(a|0))c[f>>2]=b+(~((b+-4-a|0)>>>2)<<2)}a=c[e>>2]|0;if(!a){P_(g);return}P_(a);P_(g);return}function sR(a,b){a=a|0;b=b|0;if((HO(b)|0)==-1)return;NT(a+-16|0,b);return}function tR(a,b){a=a|0;b=b|0;if((HO(b)|0)==-1)return;TT(a+-16|0,b);return}function uR(a){a=a|0;return}function vR(a){a=a|0;P_(a);return}function wR(a,b){a=a|0;b=b|0;if((c[a+20>>2]|0)!=(c[a+16>>2]|0))return;a=a+24|0;c[a>>2]=(c[a>>2]|0)+1;return}function xR(a,b){a=a|0;b=b|0;a=a+20|0;c[a>>2]=(c[a>>2]|0)+1;return}function yR(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0;f=b+4|0;b=c[f>>2]|0;if(!b){c[d>>2]=f;d=f;return d|0}j=a[e>>0]|0;i=(j&1)==0;j=i?(j&255)>>>1:c[e+4>>2]|0;i=i?e+1|0:c[e+8>>2]|0;while(1){e=b+16|0;f=a[e>>0]|0;g=(f&1)==0;f=g?(f&255)>>>1:c[b+20>>2]|0;e=g?e+1|0:c[b+24>>2]|0;g=f>>>0>>0;k=c1(i,e,g?f:j)|0;h=j>>>0>>0;if((((k|0)==0?(h?-2147483648:0):k)|0)<0){f=c[b>>2]|0;if(!f){f=b;e=5;break}else b=f}else{k=c1(e,i,h?j:f)|0;if((((k|0)==0?(g?-2147483648:0):k)|0)>=0){e=10;break}f=b+4|0;e=c[f>>2]|0;if(!e){e=9;break}else b=e}}if((e|0)==5){c[d>>2]=b;k=f;return k|0}else if((e|0)==9){c[d>>2]=b;k=f;return k|0}else if((e|0)==10){c[d>>2]=b;k=d;return k|0}return 0}function zR(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0;c[b>>2]=33388;j=b+4|0;h=c[d+8>>2]|0;c[j>>2]=h;c[j+(c[h+-16>>2]|0)>>2]=c[d+12>>2];h=b+8|0;g=c[d+16>>2]|0;c[h>>2]=g;c[h+(c[g+-16>>2]|0)>>2]=c[d+20>>2];g=b+12|0;f=c[d+24>>2]|0;c[g>>2]=f;c[g+(c[f+-16>>2]|0)>>2]=c[d+28>>2];f=b+16|0;e=c[d+32>>2]|0;c[f>>2]=e;c[f+(c[e+-16>>2]|0)>>2]=c[d+36>>2];e=b+20|0;i=c[d+40>>2]|0;c[e>>2]=i;c[e+(c[i+-16>>2]|0)>>2]=c[d+44>>2];i=c[d+4>>2]|0;c[j>>2]=i;c[j+(c[i+-16>>2]|0)>>2]=c[d+48>>2];c[h>>2]=c[d+52>>2];c[g>>2]=c[d+56>>2];c[f>>2]=c[d+60>>2];c[e>>2]=c[d+64>>2];i=b+24|0;c[i>>2]=0;c[i+4>>2]=0;c[i+8>>2]=0;c[i+12>>2]=0;c[i+16>>2]=0;c[i+20>>2]=0;i=c[d>>2]|0;c[b>>2]=i;c[j>>2]=c[d+68>>2];c[b+(c[i+-12>>2]|0)>>2]=c[d+72>>2];c[h>>2]=c[d+76>>2];c[g>>2]=c[d+80>>2];c[f>>2]=c[d+84>>2];c[e>>2]=c[d+88>>2];kM(b+48|0,0,1);e=b+56|0;d=c[10958]|0;c[e>>2]=d;c[e+(c[d+-16>>2]|0)>>2]=c[10959];d=b+60|0;f=c[10960]|0;c[d>>2]=f;c[d+(c[f+-16>>2]|0)>>2]=c[10961];f=b+64|0;d=c[10962]|0;c[f>>2]=d;c[f+(c[d+-16>>2]|0)>>2]=c[10963];c[e>>2]=1360;c[b+60>>2]=1428;c[b+64>>2]=1460;kM(b+68|0,0,1);kM(b+76|0,0,1);kM(b+84|0,0,1);kM(b+96|0,0,1);c[b+108>>2]=12880;d=b+112|0;c[d>>2]=0;a[b+116>>0]=0;c[d>>2]=e+(c[(c[e>>2]|0)+-16>>2]|0);c[b+132>>2]=0;c[b+136>>2]=0;c[b+140>>2]=0;return}function AR(b){b=b|0;var d=0,e=0,f=0;e=b+24|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[b>>2]=860;c[b+4>>2]=916;c[b+8>>2]=1008;c[b+12>>2]=1040;c[b+16>>2]=1072;c[b+20>>2]=1104;kM(b+48|0,0,1);e=b+56|0;d=c[10958]|0;c[e>>2]=d;c[e+(c[d+-16>>2]|0)>>2]=c[10959];d=b+60|0;f=c[10960]|0;c[d>>2]=f;c[d+(c[f+-16>>2]|0)>>2]=c[10961];f=b+64|0;d=c[10962]|0;c[f>>2]=d;c[f+(c[d+-16>>2]|0)>>2]=c[10963];c[e>>2]=1360;c[b+60>>2]=1428;c[b+64>>2]=1460;kM(b+68|0,0,1);kM(b+76|0,0,1);kM(b+84|0,0,1);kM(b+96|0,0,1);c[b+108>>2]=12880;d=b+112|0;c[d>>2]=0;a[b+116>>0]=0;c[d>>2]=e+(c[(c[e>>2]|0)+-16>>2]|0);c[b+132>>2]=0;c[b+136>>2]=0;c[b+140>>2]=0;return}function BR(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0;j=c[b>>2]|0;c[a>>2]=j;n=a+4|0;c[n>>2]=c[b+68>>2];c[a+(c[j+-12>>2]|0)>>2]=c[b+72>>2];j=a+8|0;c[j>>2]=c[b+76>>2];k=a+12|0;c[k>>2]=c[b+80>>2];l=a+16|0;c[l>>2]=c[b+84>>2];m=a+20|0;c[m>>2]=c[b+88>>2];g=a+132|0;d=c[g>>2]|0;if(d){h=a+136|0;e=c[h>>2]|0;if((e|0)!=(d|0)){do{e=e+-4|0;c[h>>2]=e;f=c[e>>2]|0;if((f|0)!=0?(o=c[(c[f>>2]|0)+-12>>2]|0,i=f+o|0,o=f+(o+4)|0,f=(c[o>>2]|0)+-1|0,c[o>>2]=f,!((i|0)==0|(f|0)!=0)):0){oc[c[(c[i>>2]|0)+4>>2]&2047](i);e=c[h>>2]|0}}while((e|0)!=(d|0));d=c[g>>2]|0}P_(d)}h=c[b+4>>2]|0;c[n>>2]=h;c[n+(c[h+-16>>2]|0)>>2]=c[b+48>>2];c[j>>2]=c[b+52>>2];c[k>>2]=c[b+56>>2];c[l>>2]=c[b+60>>2];c[m>>2]=c[b+64>>2];h=a+24|0;pG(h);f=a+28|0;d=c[f>>2]|0;g=a+32|0;e=c[g>>2]|0;if((d|0)!=(e|0)){do{P_(c[d>>2]|0);d=d+4|0}while((d|0)!=(e|0));d=c[f>>2]|0;e=c[g>>2]|0;if((e|0)!=(d|0))c[g>>2]=e+(~((e+-4-d|0)>>>2)<<2)}d=c[h>>2]|0;if(!d)return;P_(d);return}function CR(a){a=a|0;BR(a,41312);return}function DR(a){a=a|0;BR(a+-4|0,41312);return}function ER(a){a=a|0;BR(a+-8|0,41312);return}function FR(a){a=a|0;BR(a+-12|0,41312);return}function GR(a){a=a|0;BR(a+-16|0,41312);return}function HR(a){a=a|0;BR(a+-20|0,41312);return}function IR(a){a=a|0;BR(a,41312);P_(a);return}function JR(a){a=a|0;a=a+-4|0;BR(a,41312);P_(a);return}function KR(a){a=a|0;a=a+-8|0;BR(a,41312);P_(a);return}function LR(a){a=a|0;a=a+-12|0;BR(a,41312);P_(a);return}function MR(a){a=a|0;a=a+-16|0;BR(a,41312);P_(a);return}function NR(a){a=a|0;a=a+-20|0;BR(a,41312);P_(a);return}function OR(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,j=0,k=0,l=0,m=0;k=i;i=i+32|0;e=k+16|0;f=k+8|0;g=k;d=c[d>>2]|0;if(!d){j=0;i=k;return j|0}b=c[b>>2]|0;c[e>>2]=b;if((b|0)!=0?(m=b+((c[(c[b>>2]|0)+-12>>2]|0)+4)|0,l=(c[m>>2]|0)+1|0,c[m>>2]=l,(l|0)==0):0)Ha(79054,79014,48,79068);c[g>>2]=d;l=d+((c[(c[d>>2]|0)+-12>>2]|0)+4)|0;m=(c[l>>2]|0)+1|0;c[l>>2]=m;if(!m)Ha(79054,79014,48,79068);fU(f,a+56|0,g);e=PR(a,e,f)|0;d=c[g>>2]|0;if((d|0)!=0?(l=c[(c[d>>2]|0)+-12>>2]|0,h=d+l|0,l=d+(l+4)|0,m=(c[l>>2]|0)+-1|0,c[l>>2]=m,!((h|0)==0|(m|0)!=0)):0)oc[c[(c[h>>2]|0)+4>>2]&2047](h);if((b|0)!=0?(l=c[(c[b>>2]|0)+-12>>2]|0,j=b+l|0,l=b+(l+4)|0,m=(c[l>>2]|0)+-1|0,c[l>>2]=m,!((j|0)==0|(m|0)!=0)):0)oc[c[(c[j>>2]|0)+4>>2]&2047](j);if(!e){m=0;i=k;return m|0}d=o$(e,1576,8200,0)|0;if((d|0)!=0?(l=d+((c[(c[d>>2]|0)+-12>>2]|0)+4)|0,m=(c[l>>2]|0)+1|0,c[l>>2]=m,(m|0)==0):0)Ha(79054,79014,48,79068);l=c[(c[e>>2]|0)+-12>>2]|0;b=e+l|0;l=e+(l+4)|0;m=(c[l>>2]|0)+-1|0;c[l>>2]=m;if((b|0)==0|(m|0)!=0){m=d;i=k;return m|0}oc[c[(c[b>>2]|0)+4>>2]&2047](b);m=d;i=k;return m|0}function PR(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0;p=i;i=i+16|0;k=p;c[b+124>>2]=1;c[b+128>>2]=0;rM(b+48|0,e)|0;h=c[d>>2]|0;if(!h){o=0;i=p;return o|0}e=b+(c[(c[b>>2]|0)+-12>>2]|0)|0;c[k>>2]=12880;c[k+4>>2]=e;a[k+8>>0]=0;pc[c[(c[h>>2]|0)+32>>2]&1023](h,e);e=c[h+4>>2]|0;g=h+8|0;a:do if((e|0)==(c[g>>2]|0))l=4;else{d=12880;while(1){f=rc[c[d+24>>2]&127](k)|0;d=c[k>>2]|0;if(f){j=d;break a}f=c[e>>2]|0;if(!f)break;pc[c[d+8>>2]&1023](k,f);e=e+4|0;if((e|0)==(c[g>>2]|0)){l=4;break a}d=c[k>>2]|0}Ha(78999,79014,95,78956)}while(0);if((l|0)==4)j=c[k>>2]|0;pc[c[j+16>>2]&1023](k,h);k=b+44|0;e=c[k>>2]|0;if(!e){o=0;i=p;return o|0}j=b+40|0;f=c[j>>2]|0;d=e+-1+f|0;h=b+28|0;g=c[h>>2]|0;d=c[(c[g+(d>>>10<<2)>>2]|0)+((d&1023)<<2)>>2]|0;do if(d){e=d+((c[(c[d>>2]|0)+-12>>2]|0)+4)|0;l=(c[e>>2]|0)+1|0;c[e>>2]=l;if(!l)Ha(79054,79014,48,79068);else{o=d;m=c[k>>2]|0;break}}else{o=0;m=e}while(0);e=f+-1+m|0;e=c[(c[g+(e>>>10<<2)>>2]|0)+((e&1023)<<2)>>2]|0;if((e|0)!=0?(l=c[(c[e>>2]|0)+-12>>2]|0,n=e+l|0,l=e+(l+4)|0,m=(c[l>>2]|0)+-1|0,c[l>>2]=m,!((n|0)==0|(m|0)!=0)):0){oc[c[(c[n>>2]|0)+4>>2]&2047](n);g=c[h>>2]|0;f=c[j>>2]|0}n=c[k>>2]|0;c[k>>2]=n+-1;e=b+32|0;d=c[e>>2]|0;if((1-f-n+((d|0)==(g|0)?0:(d-g<<8)+-1|0)|0)>>>0<=2047){i=p;return o|0}P_(c[d+-4>>2]|0);c[e>>2]=(c[e>>2]|0)+-4;i=p;return o|0}function QR(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,j=0,k=0,l=0,m=0;l=i;i=i+16|0;g=l;j=a+136|0;f=a+132|0;b=c[f>>2]|0;if((c[j>>2]|0)==(b|0)){i=l;return}e=a+4|0;d=0;a:while(1){a=c[b+(d<<2)>>2]|0;c[g>>2]=a;do if(a){m=a+((c[(c[a>>2]|0)+-12>>2]|0)+4)|0;b=(c[m>>2]|0)+1|0;c[m>>2]=b;if(!b){h=5;break a}do if(zF(a)|0){LO(g,0);h=15}else{a=c[g>>2]|0;if(!a){h=9;break a}if(rc[c[(c[a>>2]|0)+8>>2]&127](a)|0){LO(g,0);h=15;break}a=c[g>>2]|0;if(!a){h=13;break a}switch(c[a+52>>2]|0){case 51:case 121:case 122:case 91:case 111:case 113:case 69:case 14:break;default:h=15}}while(0);if((h|0)==15){h=0;NT(e,g);a=c[g>>2]|0;if(!a)break}m=c[(c[a>>2]|0)+-12>>2]|0;b=a+m|0;a=a+(m+4)|0;m=(c[a>>2]|0)+-1|0;c[a>>2]=m;if(!((b|0)==0|(m|0)!=0))oc[c[(c[b>>2]|0)+4>>2]&2047](b)}while(0);d=d+1|0;a=c[j>>2]|0;b=c[f>>2]|0;if(d>>>0>=a-b>>2>>>0){d=b;h=19;break}}if((h|0)==5)Ha(79054,79014,48,79068);else if((h|0)==9)Ha(78999,79014,102,79043);else if((h|0)==13)Ha(78999,79014,102,79043);else if((h|0)==19){if((a|0)==(d|0)){i=l;return}do{a=a+-4|0;c[j>>2]=a;b=c[a>>2]|0;if((b|0)!=0?(h=c[(c[b>>2]|0)+-12>>2]|0,k=b+h|0,h=b+(h+4)|0,m=(c[h>>2]|0)+-1|0,c[h>>2]=m,!((k|0)==0|(m|0)!=0)):0){oc[c[(c[k>>2]|0)+4>>2]&2047](k);a=c[j>>2]|0}}while((a|0)!=(d|0));i=l;return}}function RR(b){b=b|0;var d=0,e=0,f=0,g=0,h=0,j=0;g=i;i=i+16|0;f=g+12|0;b=g;d=O_(64)|0;c[d+4>>2]=0;c[d+8>>2]=0;c[d+12>>2]=0;j=d+20|0;c[j>>2]=0;c[j+4>>2]=0;c[j+8>>2]=0;c[j+12>>2]=0;c[j+16>>2]=0;c[j+20>>2]=0;a[j+24>>0]=0;c[d+48>>2]=0;c[d>>2]=17848;c[d+56>>2]=17944;c[d+16>>2]=17916;c[d+52>>2]=106;c[f>>2]=d;c[d+60>>2]=2;j=c[(c[d>>2]|0)+-12>>2]|0;e=d+j|0;j=d+(j+4)|0;h=(c[j>>2]|0)+-1|0;c[j>>2]=h;if(!((e|0)==0|(h|0)!=0))oc[c[(c[e>>2]|0)+4>>2]&2047](e);l2(b,76802,3);ad(d,b);o2(b);LO(f,0);b=c[f>>2]|0;if(!b){i=g;return b|0}h=b+((c[(c[b>>2]|0)+-12>>2]|0)+4)|0;j=(c[h>>2]|0)+1|0;c[h>>2]=j;if(!j)Ha(79054,79014,48,79068);h=c[(c[b>>2]|0)+-12>>2]|0;d=b+h|0;h=b+(h+4)|0;j=(c[h>>2]|0)+-1|0;c[h>>2]=j;if((d|0)==0|(j|0)!=0){i=g;return b|0}oc[c[(c[d>>2]|0)+4>>2]&2047](d);i=g;return b|0}function SR(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0;g=c[b+132>>2]|0;i=b+136|0;e=c[i>>2]|0;if((e|0)!=(g|0))do{e=e+-4|0;c[i>>2]=e;f=c[e>>2]|0;if((f|0)!=0?(j=c[(c[f>>2]|0)+-12>>2]|0,h=f+j|0,j=f+(j+4)|0,f=(c[j>>2]|0)+-1|0,c[j>>2]=f,!((h|0)==0|(f|0)!=0)):0){oc[c[(c[h>>2]|0)+4>>2]&2047](h);e=c[i>>2]|0}}while((e|0)!=(g|0));a[b+123>>0]=0;a[b+120>>0]=0;c[b+124>>2]=1;c[b+128>>2]=0;HT(b+4|0,d);hU(b+56|0,d);return}function TR(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0;f=b+-4|0;g=c[f+132>>2]|0;h=f+136|0;b=c[h>>2]|0;if((b|0)!=(g|0))do{b=b+-4|0;c[h>>2]=b;e=c[b>>2]|0;if((e|0)!=0?(j=c[(c[e>>2]|0)+-12>>2]|0,i=e+j|0,j=e+(j+4)|0,e=(c[j>>2]|0)+-1|0,c[j>>2]=e,!((i|0)==0|(e|0)!=0)):0){oc[c[(c[i>>2]|0)+4>>2]&2047](i);b=c[h>>2]|0}}while((b|0)!=(g|0));a[f+123>>0]=0;a[f+120>>0]=0;c[f+124>>2]=1;c[f+128>>2]=0;HT(f+4|0,d);hU(f+56|0,d);return}function UR(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0;f=b+-8|0;g=c[f+132>>2]|0;h=f+136|0;b=c[h>>2]|0;if((b|0)!=(g|0))do{b=b+-4|0;c[h>>2]=b;e=c[b>>2]|0;if((e|0)!=0?(j=c[(c[e>>2]|0)+-12>>2]|0,i=e+j|0,j=e+(j+4)|0,e=(c[j>>2]|0)+-1|0,c[j>>2]=e,!((i|0)==0|(e|0)!=0)):0){oc[c[(c[i>>2]|0)+4>>2]&2047](i);b=c[h>>2]|0}}while((b|0)!=(g|0));a[f+123>>0]=0;a[f+120>>0]=0;c[f+124>>2]=1;c[f+128>>2]=0;HT(f+4|0,d);hU(f+56|0,d);return}function VR(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,j=0,k=0,l=0,m=0;m=i;i=i+48|0;h=m+32|0;e=m+24|0;g=m+16|0;f=m+8|0;j=m;if(a[b+120>>0]|0){JT(b+4|0,d);i=m;return}l=b+56|0;lM(e,b+68|0);nM(h,b+48|0,e);e=c[d>>2]|0;if(!e)Ha(78999,79014,102,79043);lM(f,b+84|0);se(g,e,f,c[b+92>>2]|0);if(tM(h,g)|0){QR(b);f=b+4|0;e=c[(c[f>>2]|0)+60>>2]|0;c[j>>2]=RR(0)|0;Dc[e&63](f,j,1);e=c[j>>2]|0;if((e|0)!=0?(h=c[(c[e>>2]|0)+-12>>2]|0,k=e+h|0,h=e+(h+4)|0,j=(c[h>>2]|0)+-1|0,c[h>>2]=j,!((k|0)==0|(j|0)!=0)):0)oc[c[(c[k>>2]|0)+4>>2]&2047](k);JT(f,d);a[b+123>>0]=1}iU(l,d);i=m;return}function WR(a,b){a=a|0;b=b|0;VR(a+-4|0,b);return}function XR(a,b){a=a|0;b=b|0;VR(a+-12|0,b);return}function YR(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0;u=i;i=i+96|0;o=u+80|0;v=u+72|0;p=u+64|0;q=u+56|0;e=u+48|0;j=u+40|0;h=u+32|0;l=u+24|0;k=u+16|0;m=u+8|0;r=u;f=b+48|0;n=b+56|0;g=b+68|0;lM(v,g);if(tM(f,v)|0){e=c[d>>2]|0;if(!e)Ha(78999,79014,102,79043);if(B2(e+20|0,77054)|0){f=b+122|0;if(a[f>>0]|0){e=c[d>>2]|0;if(!e)Ha(78999,79014,102,79043);e=e+48|0;if((c[e>>2]|0)==-999)c[e>>2]=c[b+124>>2]}a[f>>0]=0}f=b+121|0;do if(a[f>>0]|0){e=c[d>>2]|0;if(!e)Ha(78999,79014,102,79043);kM(o,-999999,4);if(uM(e+60|0,o)|0){e=c[d>>2]|0;if(!e)Ha(78999,79014,95,78956);lM(p,b+84|0);GE(e,p)|0;e=c[d>>2]|0;if(!e)Ha(78999,79014,102,79043);else{c[e+56>>2]=c[b+92>>2];break}}}while(0);a[f>>0]=0;LT(b+4|0,d);i=u;return}lM(e,g);nM(q,f,e);f=b+84|0;lM(j,f);c[h>>2]=c[b+92>>2];e=c[d>>2]|0;if(!e)Ha(78999,79014,102,79043);FE(l,e,j,h);if(!(tM(q,l)|0)){e=c[d>>2]|0;if(!e)Ha(78999,79014,102,79043);f=c[e+48>>2]|0;e=e+20|0;if((B2(e,77054)|0)!=0?!((f|0)==-999|(B2(e,77021)|0)==0):0)c[b+124>>2]=f;kU(n,d);i=u;return}kU(n,d);a[b+120>>0]=1;e=c[d>>2]|0;if(!e)Ha(78999,79014,95,78956);nM(k,l,q);GE(e,k)|0;e=c[d>>2]|0;if(!e)Ha(78999,79014,102,79043);c[e+56>>2]=0;lM(m,f);a[b+121>>0]=(uM(e+60|0,m)|0)&1^1;e=b+122|0;a[e>>0]=0;f=c[d>>2]|0;if(!f)Ha(78999,79014,102,79043);do if((c[f+48>>2]|0)==-999){if(!(B2(f+20|0,77054)|0)){a[e>>0]=1;break}e=c[d>>2]|0;if(!e)Ha(78999,79014,102,79043);else{c[e+48>>2]=c[b+124>>2];break}}while(0);QR(b);if((c[q>>2]|0)!=0?(a[b+104>>0]|0)==0:0){e=c[d>>2]|0;if(!e)Ha(78999,79014,102,79043);if(B2(e+20|0,77021)|0){f=b+4|0;e=c[(c[f>>2]|0)+60>>2]|0;c[r>>2]=RR(0)|0;Dc[e&63](f,r,1);e=c[r>>2]|0;if((e|0)!=0?(r=c[(c[e>>2]|0)+-12>>2]|0,s=e+r|0,r=e+(r+4)|0,v=(c[r>>2]|0)+-1|0,c[r>>2]=v,!((s|0)==0|(v|0)!=0)):0)oc[c[(c[s>>2]|0)+4>>2]&2047](s);LT(f,d);k=b+44|0;j=b+40|0;g=c[j>>2]|0;h=(c[k>>2]|0)+-1+g|0;e=b+28|0;f=c[e>>2]|0;h=c[(c[f+(h>>>10<<2)>>2]|0)+((h&1023)<<2)>>2]|0;if((h|0)!=0?(d=c[(c[h>>2]|0)+-12>>2]|0,t=h+d|0,d=h+(d+4)|0,v=(c[d>>2]|0)+-1|0,c[d>>2]=v,!((t|0)==0|(v|0)!=0)):0){oc[c[(c[t>>2]|0)+4>>2]&2047](t);h=c[e>>2]|0;g=c[j>>2]|0}else h=f;v=c[k>>2]|0;c[k>>2]=v+-1;e=b+32|0;f=c[e>>2]|0;if((1-g-v+((f|0)==(h|0)?0:(f-h<<8)+-1|0)|0)>>>0<=2047){i=u;return}P_(c[f+-4>>2]|0);c[e>>2]=(c[e>>2]|0)+-4;i=u;return}}LT(b+4|0,d);i=u;return}function ZR(a,b){a=a|0;b=b|0;YR(a+-4|0,b);return}function _R(a,b){a=a|0;b=b|0;YR(a+-16|0,b);return}function $R(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0;i=b+132|0;s=b+136|0;t=c[s>>2]|0;u=c[i>>2]|0;a:do if((t|0)!=(u|0)){v=c[d>>2]|0;w=(v|0)==0;p=v+20|0;q=v+24|0;r=v+28|0;j=p+1|0;k=t-u>>2;if(w){f=0;while(1){if(c[u+(f<<2)>>2]|0)break;f=f+1|0;if(f>>>0>=k>>>0)break a}Ha(78999,79014,102,79043)}else e=0;b:while(1){f=c[u+(e<<2)>>2]|0;c:do if((f|0)!=0?(l=f+20|0,n=a[l>>0]|0,m=(n&1)==0,n=m?(n&255)>>>1:c[f+24>>2]|0,h=a[p>>0]|0,o=(h&1)==0,(n|0)==((o?(h&255)>>>1:c[q>>2]|0)|0)):0){f=m?l+1|0:c[f+28>>2]|0;g=o?j:c[r>>2]|0;if(!m)if(!(c1(f,g,n)|0))break b;else break;if(!n)break b;else h=n;while(1){if((a[f>>0]|0)!=(a[g>>0]|0))break c;h=h+-1|0;if(!h)break b;else{f=f+1|0;g=g+1|0}}}while(0);e=e+1|0;if(e>>>0>=k>>>0)break a}e=u+(e<<2)|0;f=c[e>>2]|0;if((f|0)==(v|0))return;if(!w?(u=v+((c[(c[v>>2]|0)+-12>>2]|0)+4)|0,w=(c[u>>2]|0)+1|0,c[u>>2]=w,(w|0)==0):0)Ha(79054,79014,48,79068);if((f|0)!=0?(u=c[(c[f>>2]|0)+-12>>2]|0,x=f+u|0,u=f+(u+4)|0,w=(c[u>>2]|0)+-1|0,c[u>>2]=w,!((x|0)==0|(w|0)!=0)):0)oc[c[(c[x>>2]|0)+4>>2]&2047](x);c[e>>2]=v;return}while(0);if((t|0)==(c[b+140>>2]|0)){nS(i,d);return}e=c[d>>2]|0;c[t>>2]=e;if((e|0)!=0?(w=e+((c[(c[e>>2]|0)+-12>>2]|0)+4)|0,x=(c[w>>2]|0)+1|0,c[w>>2]=x,(x|0)==0):0)Ha(79054,79014,48,79068);c[s>>2]=t+4;return}function aS(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0;v=i;i=i+16|0;u=v;e=c[d>>2]|0;if(!e)Ha(78999,79014,102,79043);if(!(AF(e)|0)){e=c[d>>2]|0;if(!e)Ha(78999,79014,102,79043);if(!(rc[c[(c[e>>2]|0)+8>>2]&127](e)|0)){i=v;return}}t=b+136|0;p=b+132|0;e=c[p>>2]|0;if((c[t>>2]|0)==(e|0)){i=v;return}q=u+4|0;r=u+8|0;s=u+1|0;o=0;a:while(1){n=c[e+(o<<2)>>2]|0;b:do if(n){m=n+20|0;k=c[d>>2]|0;if(!k){e=11;break a}b=k+20|0;j=a[m>>0]|0;h=(j&1)==0;l=n+24|0;j=h?(j&255)>>>1:c[l>>2]|0;f=a[b>>0]|0;g=(f&1)==0;c:do if((j|0)==((g?(f&255)>>>1:c[k+24>>2]|0)|0)){f=h?m+1|0:c[n+28>>2]|0;b=g?b+1|0:c[k+28>>2]|0;if(h){if(j){g=j;while(1){if((a[f>>0]|0)!=(a[b>>0]|0))break c;g=g+-1|0;if(!g)break;else{f=f+1|0;b=b+1|0}}}}else if(c1(f,b,j)|0)break;m=c[(c[n>>2]|0)+-12>>2]|0;b=n+m|0;m=n+(m+4)|0;n=(c[m>>2]|0)+-1|0;c[m>>2]=n;if(!((b|0)==0|(n|0)!=0))oc[c[(c[b>>2]|0)+4>>2]&2047](b);c[e+(o<<2)>>2]=0;break b}while(0);BF(u,k);f=a[m>>0]|0;g=(f&1)==0;f=g?(f&255)>>>1:c[l>>2]|0;l=a[u>>0]|0;e=(l&1)==0;d:do if((f|0)==((e?(l&255)>>>1:c[q>>2]|0)|0)){b=g?m+1|0:c[n+28>>2]|0;e=e?s:c[r>>2]|0;if(!g){n=(c1(b,e,f)|0)==0;o2(u);if(!n)break b}else{if(f)while(1){if((a[b>>0]|0)!=(a[e>>0]|0))break d;f=f+-1|0;if(!f)break;else{b=b+1|0;e=e+1|0}}o2(u)}e=(c[p>>2]|0)+(o<<2)|0;b=c[e>>2]|0;if(!b)break b;m=c[(c[b>>2]|0)+-12>>2]|0;f=b+m|0;m=b+(m+4)|0;n=(c[m>>2]|0)+-1|0;c[m>>2]=n;if(!((f|0)==0|(n|0)!=0))oc[c[(c[f>>2]|0)+4>>2]&2047](f);c[e>>2]=0;break b}while(0);o2(u)}while(0);o=o+1|0;e=c[p>>2]|0;if(o>>>0>=(c[t>>2]|0)-e>>2>>>0){e=34;break}}if((e|0)==11)Ha(78999,79014,102,79043);else if((e|0)==34){i=v;return}}function bS(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0;nU(b+56|0,d);if(!(a[b+120>>0]|0))return;RT(b+4|0,d);k=b+123|0;if(!(a[k>>0]|0))return;j=b+44|0;h=b+40|0;f=c[h>>2]|0;g=(c[j>>2]|0)+-1+f|0;d=b+28|0;e=c[d>>2]|0;g=c[(c[e+(g>>>10<<2)>>2]|0)+((g&1023)<<2)>>2]|0;if((g|0)!=0?(l=c[(c[g>>2]|0)+-12>>2]|0,i=g+l|0,l=g+(l+4)|0,g=(c[l>>2]|0)+-1|0,c[l>>2]=g,!((i|0)==0|(g|0)!=0)):0){oc[c[(c[i>>2]|0)+4>>2]&2047](i);g=c[d>>2]|0;f=c[h>>2]|0}else g=e;l=c[j>>2]|0;c[j>>2]=l+-1;d=b+32|0;e=c[d>>2]|0;if((1-f-l+((e|0)==(g|0)?0:(e-g<<8)+-1|0)|0)>>>0>2047){P_(c[e+-4>>2]|0);c[d>>2]=(c[d>>2]|0)+-4}a[k>>0]=0;return}function cS(a,b){a=a|0;b=b|0;bS(a+-4|0,b);return}function dS(a,b){a=a|0;b=b|0;bS(a+-12|0,b);return}function eS(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;QR(a);PT(a+4|0,b);g=a+44|0;b=c[g>>2]|0;if(b>>>0<=1)return;h=a+40|0;i=a+28|0;f=a+32|0;do{d=c[h>>2]|0;a=b+-1+d|0;b=c[i>>2]|0;a=c[(c[b+(a>>>10<<2)>>2]|0)+((a&1023)<<2)>>2]|0;if((a|0)!=0?(e=c[(c[a>>2]|0)+-12>>2]|0,j=a+e|0,a=a+(e+4)|0,e=(c[a>>2]|0)+-1|0,c[a>>2]=e,!((j|0)==0|(e|0)!=0)):0){oc[c[(c[j>>2]|0)+4>>2]&2047](j);e=c[i>>2]|0;d=c[h>>2]|0}else e=b;k=c[g>>2]|0;b=k+-1|0;c[g>>2]=b;a=c[f>>2]|0;if((1-d-k+((a|0)==(e|0)?0:(a-e<<8)+-1|0)|0)>>>0>2047){P_(c[a+-4>>2]|0);c[f>>2]=(c[f>>2]|0)+-4;b=c[g>>2]|0}}while(b>>>0>1);return}function fS(a,b){a=a|0;b=b|0;eS(a+-4|0,b);return}function gS(a,b){a=a|0;b=b|0;eS(a+-8|0,b);return}function hS(b,d){b=b|0;d=d|0;var e=0;if(a[b+120>>0]|0){NT(b+4|0,d);return}e=c[d>>2]|0;if(!e)Ha(78999,79014,102,79043);switch(c[e+52>>2]|0){case 64:case 105:{c[e+48>>2]=-1;return}default:{$R(b,d);return}}}function iS(b,d){b=b|0;d=d|0;var e=0;b=b+-4|0;if(a[b+120>>0]|0){NT(b+4|0,d);return}e=c[d>>2]|0;if(!e)Ha(78999,79014,102,79043);switch(c[e+52>>2]|0){case 64:case 105:{c[e+48>>2]=-1;return}default:{$R(b,d);return}}}function jS(b,d){b=b|0;d=d|0;var e=0;b=b+-20|0;if(a[b+120>>0]|0){NT(b+4|0,d);return}e=c[d>>2]|0;if(!e)Ha(78999,79014,102,79043);switch(c[e+52>>2]|0){case 64:case 105:{c[e+48>>2]=-1;return}default:{$R(b,d);return}}}function kS(b,d){b=b|0;d=d|0;var e=0;if(!(a[b+120>>0]|0)){aS(b,d);return}e=c[d>>2]|0;if(!e)Ha(78999,79014,102,79043);switch(c[e+52>>2]|0){case 64:case 105:{if((c[e+48>>2]|0)==-1)return;break}default:{}}TT(b+4|0,d);return}function lS(b,d){b=b|0;d=d|0;var e=0;b=b+-4|0;if(!(a[b+120>>0]|0)){aS(b,d);return}e=c[d>>2]|0;if(!e)Ha(78999,79014,102,79043);switch(c[e+52>>2]|0){case 64:case 105:{if((c[e+48>>2]|0)==-1)return;break}default:{}}TT(b+4|0,d);return}function mS(b,d){b=b|0;d=d|0;var e=0;b=b+-20|0;if(!(a[b+120>>0]|0)){aS(b,d);return}e=c[d>>2]|0;if(!e)Ha(78999,79014,102,79043);switch(c[e+52>>2]|0){case 64:case 105:{if((c[e+48>>2]|0)==-1)return;break}default:{}}TT(b+4|0,d);return}function nS(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0;t=a+4|0;e=c[a>>2]|0;g=((c[t>>2]|0)-e>>2)+1|0;if(g>>>0>1073741823){M_(a);e=c[a>>2]|0}q=a+8|0;o=e;f=(c[q>>2]|0)-o|0;if(f>>2>>>0<536870911){f=f>>1;f=f>>>0>>0?g:f;i=c[t>>2]|0;h=i;g=h-o>>2;if(!f){l=0;m=0;k=g;j=h}else n=6}else{i=c[t>>2]|0;h=i;f=1073741823;g=h-o>>2;n=6}if((n|0)==6){l=f;m=O_(f<<2)|0;k=g;j=h}h=m+(k<<2)|0;f=h;l=m+(l<<2)|0;g=c[b>>2]|0;c[h>>2]=g;if((g|0)!=0?(b=g+((c[(c[g>>2]|0)+-12>>2]|0)+4)|0,n=(c[b>>2]|0)+1|0,c[b>>2]=n,(n|0)==0):0)Ha(79054,79014,48,79068);k=m+(k+1<<2)|0;do if((i|0)!=(e|0)){while(1){i=i+-4|0;g=c[i>>2]|0;c[h+-4>>2]=g;if((g|0)!=0?(n=g+((c[(c[g>>2]|0)+-12>>2]|0)+4)|0,o=(c[n>>2]|0)+1|0,c[n>>2]=o,(o|0)==0):0){n=14;break}h=f+-4|0;f=h;if((i|0)==(e|0)){d=f;n=16;break}}if((n|0)==14)Ha(79054,79014,48,79068);else if((n|0)==16){r=a;s=t;p=d;u=c[a>>2]|0;d=c[t>>2]|0;break}}else{r=a;s=t;p=f;u=o;d=j}while(0);c[r>>2]=p;c[s>>2]=k;c[q>>2]=l;f=u;if((d|0)!=(f|0))do{d=d+-4|0;e=c[d>>2]|0;if((e|0)!=0?(t=c[(c[e>>2]|0)+-12>>2]|0,v=e+t|0,t=e+(t+4)|0,a=(c[t>>2]|0)+-1|0,c[t>>2]=a,!((v|0)==0|(a|0)!=0)):0)oc[c[(c[v>>2]|0)+4>>2]&2047](v)}while((d|0)!=(f|0));if(!u)return;P_(u);return} +function oS(b){b=b|0;var d=0;d=b+24|0;c[d>>2]=0;c[d+4>>2]=0;c[d+8>>2]=0;c[d+12>>2]=0;c[d+16>>2]=0;c[d+20>>2]=0;c[b>>2]=41416;c[b+4>>2]=41456;c[b+8>>2]=41548;c[b+12>>2]=41580;c[b+16>>2]=41612;c[b+20>>2]=41644;c[b+56>>2]=12880;a[b+64>>0]=0;c[b+60>>2]=b+4;return}function pS(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0;c[a+48>>2]=d;c[a+52>>2]=0;g=c[b>>2]|0;if(!g){m=0;return m|0}h=a+56|0;pc[c[(c[h>>2]|0)+12>>2]&1023](h,g);b=c[g+4>>2]|0;f=g+8|0;a:do if((b|0)==(c[f>>2]|0))j=4;else{while(1){e=rc[c[(c[h>>2]|0)+24>>2]&127](h)|0;d=c[h>>2]|0;if(e){i=d;break a}e=c[b>>2]|0;if(!e)break;pc[c[d+8>>2]&1023](h,e);b=b+4|0;if((b|0)==(c[f>>2]|0)){j=4;break a}}Ha(78999,79014,95,78956)}while(0);if((j|0)==4)i=c[h>>2]|0;pc[c[i+16>>2]&1023](h,g);i=a+44|0;b=c[i>>2]|0;h=a+40|0;e=c[h>>2]|0;d=b+-1+e|0;g=a+28|0;f=c[g>>2]|0;d=c[(c[f+(d>>>10<<2)>>2]|0)+((d&1023)<<2)>>2]|0;do if(d){b=d+((c[(c[d>>2]|0)+-12>>2]|0)+4)|0;j=(c[b>>2]|0)+1|0;c[b>>2]=j;if(!j)Ha(79054,79014,48,79068);else{k=c[i>>2]|0;m=d;break}}else{k=b;m=0}while(0);b=k+-1+e|0;b=c[(c[f+(b>>>10<<2)>>2]|0)+((b&1023)<<2)>>2]|0;if((b|0)!=0?(j=c[(c[b>>2]|0)+-12>>2]|0,l=b+j|0,j=b+(j+4)|0,k=(c[j>>2]|0)+-1|0,c[j>>2]=k,!((l|0)==0|(k|0)!=0)):0){oc[c[(c[l>>2]|0)+4>>2]&2047](l);f=c[g>>2]|0;e=c[h>>2]|0}l=c[i>>2]|0;c[i>>2]=l+-1;b=a+32|0;d=c[b>>2]|0;if((1-e-l+((d|0)==(f|0)?0:(d-f<<8)+-1|0)|0)>>>0<=2047)return m|0;P_(c[d+-4>>2]|0);c[b>>2]=(c[b>>2]|0)+-4;return m|0}function qS(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,j=0;h=i;i=i+16|0;e=h;f=c[b>>2]|0;c[e>>2]=f;if((f|0)!=0?(j=f+((c[(c[f>>2]|0)+-12>>2]|0)+4)|0,b=(c[j>>2]|0)+1|0,c[j>>2]=b,(b|0)==0):0)Ha(79054,79014,48,79068);b=c[d>>2]|0;if(!b)Ha(78999,79014,102,79043);e=pS(a,e,rc[c[(c[b>>2]|0)+8>>2]&127](b)|0)|0;if((f|0)!=0?(a=c[(c[f>>2]|0)+-12>>2]|0,g=f+a|0,a=f+(a+4)|0,j=(c[a>>2]|0)+-1|0,c[a>>2]=j,!((g|0)==0|(j|0)!=0)):0)oc[c[(c[g>>2]|0)+4>>2]&2047](g);if(!e){j=0;i=h;return j|0}b=o$(e,1576,8200,0)|0;if((b|0)!=0?(g=b+((c[(c[b>>2]|0)+-12>>2]|0)+4)|0,j=(c[g>>2]|0)+1|0,c[g>>2]=j,(j|0)==0):0)Ha(79054,79014,48,79068);g=c[(c[e>>2]|0)+-12>>2]|0;d=e+g|0;g=e+(g+4)|0;j=(c[g>>2]|0)+-1|0;c[g>>2]=j;if((d|0)==0|(j|0)!=0){j=b;i=h;return j|0}oc[c[(c[d>>2]|0)+4>>2]&2047](d);j=b;i=h;return j|0}function rS(a){a=a|0;return (c[a+52>>2]|0)<=(c[a+48>>2]|0)|0}function sS(a){a=a|0;a=a+-4|0;return (c[a+52>>2]|0)<=(c[a+48>>2]|0)|0}function tS(a,b){a=a|0;b=b|0;var d=0;d=a+52|0;c[d>>2]=(c[d>>2]|0)+1;HT(a+4|0,b);return}function uS(a,b){a=a|0;b=b|0;var d=0;a=a+-4|0;d=a+52|0;c[d>>2]=(c[d>>2]|0)+1;HT(a+4|0,b);return}function vS(a,b){a=a|0;b=b|0;var d=0;a=a+-8|0;d=a+52|0;c[d>>2]=(c[d>>2]|0)+1;HT(a+4|0,b);return}function wS(b,d){b=b|0;d=d|0;PT(b+4|0,d);if((c[b+52>>2]|0)<=(c[b+48>>2]|0))return;a[b+64>>0]=1;return}function xS(b,d){b=b|0;d=d|0;b=b+-4|0;PT(b+4|0,d);if((c[b+52>>2]|0)<=(c[b+48>>2]|0))return;a[b+64>>0]=1;return}function yS(b,d){b=b|0;d=d|0;b=b+-8|0;PT(b+4|0,d);if((c[b+52>>2]|0)<=(c[b+48>>2]|0))return;a[b+64>>0]=1;return}function zS(a){a=a|0;var b=0,d=0,e=0,f=0,g=0;c[a+4>>2]=1136;c[a+8>>2]=1228;c[a+12>>2]=1260;c[a+16>>2]=1292;c[a+20>>2]=1324;g=a+24|0;pG(g);e=a+28|0;b=c[e>>2]|0;f=a+32|0;d=c[f>>2]|0;if((b|0)!=(d|0)){a=b;do{P_(c[a>>2]|0);a=a+4|0}while((a|0)!=(d|0));a=c[e>>2]|0;b=c[f>>2]|0;if((b|0)!=(a|0))c[f>>2]=b+(~((b+-4-a|0)>>>2)<<2)}a=c[g>>2]|0;if(!a)return;P_(a);return}function AS(a){a=a|0;var b=0,d=0,e=0,f=0,g=0;c[a+4>>2]=1136;c[a+8>>2]=1228;c[a+12>>2]=1260;c[a+16>>2]=1292;c[a+20>>2]=1324;f=a+24|0;pG(f);d=a+28|0;b=c[d>>2]|0;g=a+32|0;e=c[g>>2]|0;if((b|0)!=(e|0)){do{P_(c[b>>2]|0);b=b+4|0}while((b|0)!=(e|0));b=c[d>>2]|0;d=c[g>>2]|0;if((d|0)!=(b|0))c[g>>2]=d+(~((d+-4-b|0)>>>2)<<2)}b=c[f>>2]|0;if(!b){P_(a);return}P_(b);P_(a);return}function BS(a){a=a|0;var b=0,d=0,e=0,f=0;f=a+-4|0;c[f+4>>2]=1136;c[f+8>>2]=1228;c[f+12>>2]=1260;c[f+16>>2]=1292;c[f+20>>2]=1324;e=f+24|0;pG(e);d=f+28|0;a=c[d>>2]|0;f=f+32|0;b=c[f>>2]|0;if((a|0)!=(b|0)){do{P_(c[a>>2]|0);a=a+4|0}while((a|0)!=(b|0));a=c[d>>2]|0;b=c[f>>2]|0;if((b|0)!=(a|0))c[f>>2]=b+(~((b+-4-a|0)>>>2)<<2)}a=c[e>>2]|0;if(!a)return;P_(a);return}function CS(a){a=a|0;var b=0,d=0,e=0,f=0,g=0;g=a+-4|0;c[g+4>>2]=1136;c[g+8>>2]=1228;c[g+12>>2]=1260;c[g+16>>2]=1292;c[g+20>>2]=1324;e=g+24|0;pG(e);d=g+28|0;a=c[d>>2]|0;f=g+32|0;b=c[f>>2]|0;if((a|0)!=(b|0)){do{P_(c[a>>2]|0);a=a+4|0}while((a|0)!=(b|0));a=c[d>>2]|0;b=c[f>>2]|0;if((b|0)!=(a|0))c[f>>2]=b+(~((b+-4-a|0)>>>2)<<2)}a=c[e>>2]|0;if(!a){P_(g);return}P_(a);P_(g);return}function DS(a){a=a|0;var b=0,d=0,e=0,f=0;f=a+-8|0;c[f+4>>2]=1136;c[f+8>>2]=1228;c[f+12>>2]=1260;c[f+16>>2]=1292;c[f+20>>2]=1324;e=f+24|0;pG(e);d=f+28|0;a=c[d>>2]|0;f=f+32|0;b=c[f>>2]|0;if((a|0)!=(b|0)){do{P_(c[a>>2]|0);a=a+4|0}while((a|0)!=(b|0));a=c[d>>2]|0;b=c[f>>2]|0;if((b|0)!=(a|0))c[f>>2]=b+(~((b+-4-a|0)>>>2)<<2)}a=c[e>>2]|0;if(!a)return;P_(a);return}function ES(a){a=a|0;var b=0,d=0,e=0,f=0,g=0;g=a+-8|0;c[g+4>>2]=1136;c[g+8>>2]=1228;c[g+12>>2]=1260;c[g+16>>2]=1292;c[g+20>>2]=1324;e=g+24|0;pG(e);d=g+28|0;a=c[d>>2]|0;f=g+32|0;b=c[f>>2]|0;if((a|0)!=(b|0)){do{P_(c[a>>2]|0);a=a+4|0}while((a|0)!=(b|0));a=c[d>>2]|0;b=c[f>>2]|0;if((b|0)!=(a|0))c[f>>2]=b+(~((b+-4-a|0)>>>2)<<2)}a=c[e>>2]|0;if(!a){P_(g);return}P_(a);P_(g);return}function FS(a){a=a|0;var b=0,d=0,e=0,f=0;f=a+-12|0;c[a+-8>>2]=1136;c[a+-4>>2]=1228;c[f+12>>2]=1260;c[f+16>>2]=1292;c[f+20>>2]=1324;e=f+24|0;pG(e);d=f+28|0;a=c[d>>2]|0;f=f+32|0;b=c[f>>2]|0;if((a|0)!=(b|0)){do{P_(c[a>>2]|0);a=a+4|0}while((a|0)!=(b|0));a=c[d>>2]|0;b=c[f>>2]|0;if((b|0)!=(a|0))c[f>>2]=b+(~((b+-4-a|0)>>>2)<<2)}a=c[e>>2]|0;if(!a)return;P_(a);return}function GS(a){a=a|0;var b=0,d=0,e=0,f=0,g=0;g=a+-12|0;c[a+-8>>2]=1136;c[a+-4>>2]=1228;c[g+12>>2]=1260;c[g+16>>2]=1292;c[g+20>>2]=1324;e=g+24|0;pG(e);d=g+28|0;a=c[d>>2]|0;f=g+32|0;b=c[f>>2]|0;if((a|0)!=(b|0)){do{P_(c[a>>2]|0);a=a+4|0}while((a|0)!=(b|0));a=c[d>>2]|0;b=c[f>>2]|0;if((b|0)!=(a|0))c[f>>2]=b+(~((b+-4-a|0)>>>2)<<2)}a=c[e>>2]|0;if(!a){P_(g);return}P_(a);P_(g);return}function HS(a){a=a|0;var b=0,d=0,e=0,f=0;f=a+-16|0;c[f+4>>2]=1136;c[f+8>>2]=1228;c[f+12>>2]=1260;c[f+16>>2]=1292;c[f+20>>2]=1324;e=f+24|0;pG(e);d=f+28|0;a=c[d>>2]|0;f=f+32|0;b=c[f>>2]|0;if((a|0)!=(b|0)){do{P_(c[a>>2]|0);a=a+4|0}while((a|0)!=(b|0));a=c[d>>2]|0;b=c[f>>2]|0;if((b|0)!=(a|0))c[f>>2]=b+(~((b+-4-a|0)>>>2)<<2)}a=c[e>>2]|0;if(!a)return;P_(a);return}function IS(a){a=a|0;var b=0,d=0,e=0,f=0,g=0;g=a+-16|0;c[g+4>>2]=1136;c[g+8>>2]=1228;c[g+12>>2]=1260;c[g+16>>2]=1292;c[g+20>>2]=1324;e=g+24|0;pG(e);d=g+28|0;a=c[d>>2]|0;f=g+32|0;b=c[f>>2]|0;if((a|0)!=(b|0)){do{P_(c[a>>2]|0);a=a+4|0}while((a|0)!=(b|0));a=c[d>>2]|0;b=c[f>>2]|0;if((b|0)!=(a|0))c[f>>2]=b+(~((b+-4-a|0)>>>2)<<2)}a=c[e>>2]|0;if(!a){P_(g);return}P_(a);P_(g);return}function JS(a){a=a|0;var b=0,d=0,e=0,f=0;f=a+-20|0;c[f+4>>2]=1136;c[f+8>>2]=1228;c[f+12>>2]=1260;c[f+16>>2]=1292;c[f+20>>2]=1324;e=f+24|0;pG(e);d=f+28|0;a=c[d>>2]|0;f=f+32|0;b=c[f>>2]|0;if((a|0)!=(b|0)){do{P_(c[a>>2]|0);a=a+4|0}while((a|0)!=(b|0));a=c[d>>2]|0;b=c[f>>2]|0;if((b|0)!=(a|0))c[f>>2]=b+(~((b+-4-a|0)>>>2)<<2)}a=c[e>>2]|0;if(!a)return;P_(a);return}function KS(a){a=a|0;var b=0,d=0,e=0,f=0,g=0;g=a+-20|0;c[g+4>>2]=1136;c[g+8>>2]=1228;c[g+12>>2]=1260;c[g+16>>2]=1292;c[g+20>>2]=1324;e=g+24|0;pG(e);d=g+28|0;a=c[d>>2]|0;f=g+32|0;b=c[f>>2]|0;if((a|0)!=(b|0)){do{P_(c[a>>2]|0);a=a+4|0}while((a|0)!=(b|0));a=c[d>>2]|0;b=c[f>>2]|0;if((b|0)!=(a|0))c[f>>2]=b+(~((b+-4-a|0)>>>2)<<2)}a=c[e>>2]|0;if(!a){P_(g);return}P_(a);P_(g);return}function LS(b){b=b|0;var d=0,e=0,f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0;x=i;i=i+64|0;o=x+48|0;p=x+40|0;q=x+32|0;r=x+24|0;s=x+16|0;t=x+8|0;u=x;v=b+16|0;e=c[v>>2]|0;w=b+20|0;d=c[w>>2]|0;if((d|0)!=(e|0)){e=d+(~((d+-8-e|0)>>>3)<<3)|0;c[w>>2]=e}n=o+4|0;f=b+24|0;g=p+4|0;h=q+4|0;j=r+4|0;k=s+4|0;l=t+4|0;m=u+4|0;b=-2;while(1){a[o>>0]=102;c[n>>2]=b;if((e|0)==(c[f>>2]|0)){dT(v,o);d=c[w>>2]|0}else{z=o;y=c[z+4>>2]|0;d=e;c[d>>2]=c[z>>2];c[d+4>>2]=y;d=(c[w>>2]|0)+8|0;c[w>>2]=d}a[p>>0]=99;c[g>>2]=b;if((d|0)==(c[f>>2]|0)){dT(v,p);d=c[w>>2]|0}else{y=p;z=c[y+4>>2]|0;c[d>>2]=c[y>>2];c[d+4>>2]=z;d=(c[w>>2]|0)+8|0;c[w>>2]=d}a[q>>0]=103;c[h>>2]=b;if((d|0)==(c[f>>2]|0)){dT(v,q);d=c[w>>2]|0}else{y=q;z=c[y+4>>2]|0;c[d>>2]=c[y>>2];c[d+4>>2]=z;d=(c[w>>2]|0)+8|0;c[w>>2]=d}a[r>>0]=100;c[j>>2]=b;if((d|0)==(c[f>>2]|0)){dT(v,r);d=c[w>>2]|0}else{y=r;z=c[y+4>>2]|0;c[d>>2]=c[y>>2];c[d+4>>2]=z;d=(c[w>>2]|0)+8|0;c[w>>2]=d}a[s>>0]=97;c[k>>2]=b;if((d|0)==(c[f>>2]|0)){dT(v,s);d=c[w>>2]|0}else{y=s;z=c[y+4>>2]|0;c[d>>2]=c[y>>2];c[d+4>>2]=z;d=(c[w>>2]|0)+8|0;c[w>>2]=d}a[t>>0]=101;c[l>>2]=b;if((d|0)==(c[f>>2]|0)){dT(v,t);d=c[w>>2]|0}else{y=t;z=c[y+4>>2]|0;c[d>>2]=c[y>>2];c[d+4>>2]=z;d=(c[w>>2]|0)+8|0;c[w>>2]=d}a[u>>0]=98;c[m>>2]=b;if((d|0)==(c[f>>2]|0))dT(v,u);else{e=u;y=c[e+4>>2]|0;z=d;c[z>>2]=c[e>>2];c[z+4>>2]=y;c[w>>2]=(c[w>>2]|0)+8}d=b+1|0;if((d|0)==3)break;e=c[w>>2]|0;b=d}i=x;return}function MS(a){a=a|0;c[a>>2]=41764;c[a+4>>2]=41804;c[a+8>>2]=41836;c[a+12>>2]=41868;c[a+16>>2]=0;c[a+20>>2]=0;c[a+24>>2]=0;LS(a);return}function NS(a){a=a|0;var b=0,d=0;c[a>>2]=41764;c[a+4>>2]=41804;c[a+8>>2]=41836;c[a+12>>2]=41868;d=c[a+16>>2]|0;if(!d)return;a=a+20|0;b=c[a>>2]|0;if((b|0)!=(d|0))c[a>>2]=b+(~((b+-8-d|0)>>>3)<<3);P_(d);return}function OS(a){a=a|0;var b=0,d=0;a=a+-4|0;c[a>>2]=41764;c[a+4>>2]=41804;c[a+8>>2]=41836;c[a+12>>2]=41868;d=c[a+16>>2]|0;if(!d)return;a=a+20|0;b=c[a>>2]|0;if((b|0)!=(d|0))c[a>>2]=b+(~((b+-8-d|0)>>>3)<<3);P_(d);return}function PS(a){a=a|0;var b=0,d=0;a=a+-8|0;c[a>>2]=41764;c[a+4>>2]=41804;c[a+8>>2]=41836;c[a+12>>2]=41868;d=c[a+16>>2]|0;if(!d)return;a=a+20|0;b=c[a>>2]|0;if((b|0)!=(d|0))c[a>>2]=b+(~((b+-8-d|0)>>>3)<<3);P_(d);return}function QS(a){a=a|0;var b=0,d=0;a=a+-12|0;c[a>>2]=41764;c[a+4>>2]=41804;c[a+8>>2]=41836;c[a+12>>2]=41868;d=c[a+16>>2]|0;if(!d)return;a=a+20|0;b=c[a>>2]|0;if((b|0)!=(d|0))c[a>>2]=b+(~((b+-8-d|0)>>>3)<<3);P_(d);return}function RS(a){a=a|0;var b=0,d=0,e=0;c[a>>2]=41764;c[a+4>>2]=41804;c[a+8>>2]=41836;c[a+12>>2]=41868;b=c[a+16>>2]|0;if(!b){P_(a);return}d=a+20|0;e=c[d>>2]|0;if((e|0)!=(b|0))c[d>>2]=e+(~((e+-8-b|0)>>>3)<<3);P_(b);P_(a);return}function SS(a){a=a|0;var b=0,d=0,e=0;a=a+-4|0;c[a>>2]=41764;c[a+4>>2]=41804;c[a+8>>2]=41836;c[a+12>>2]=41868;b=c[a+16>>2]|0;if(!b){P_(a);return}d=a+20|0;e=c[d>>2]|0;if((e|0)!=(b|0))c[d>>2]=e+(~((e+-8-b|0)>>>3)<<3);P_(b);P_(a);return}function TS(a){a=a|0;var b=0,d=0,e=0;a=a+-8|0;c[a>>2]=41764;c[a+4>>2]=41804;c[a+8>>2]=41836;c[a+12>>2]=41868;b=c[a+16>>2]|0;if(!b){P_(a);return}d=a+20|0;e=c[d>>2]|0;if((e|0)!=(b|0))c[d>>2]=e+(~((e+-8-b|0)>>>3)<<3);P_(b);P_(a);return}function US(a){a=a|0;var b=0,d=0,e=0;a=a+-12|0;c[a>>2]=41764;c[a+4>>2]=41804;c[a+8>>2]=41836;c[a+12>>2]=41868;b=c[a+16>>2]|0;if(!b){P_(a);return}d=a+20|0;e=c[d>>2]|0;if((e|0)!=(b|0))c[d>>2]=e+(~((e+-8-b|0)>>>3)<<3);P_(b);P_(a);return}function VS(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0;p=i;i=i+48|0;j=p+16|0;g=p+8|0;k=p+4|0;n=p;if(!(c[d>>2]|0)){o=0;i=p;return o|0}if(!(c[e>>2]|0)){o=0;i=p;return o|0}f=j+12|0;c[j>>2]=12880;c[j+4>>2]=0;a[j+8>>0]=0;l=c[11045]|0;c[f>>2]=l;c[f+(c[l+-16>>2]|0)>>2]=c[11046];l=j+16|0;f=c[11047]|0;c[l>>2]=f;c[l+(c[f+-16>>2]|0)>>2]=c[11048];c[j>>2]=44068;c[j+12>>2]=44128;c[j+16>>2]=44160;pc[c[44096>>2]&1023](j,j+(c[11014]|0)|0);f=c[d>>2]|0;c[g>>2]=f;if((f|0)!=0?(f=f+((c[(c[f>>2]|0)+-12>>2]|0)+4)|0,l=(c[f>>2]|0)+1|0,c[f>>2]=l,(l|0)==0):0)Ha(79054,79014,48,79068);l=OU(j,g)|0;f=c[g>>2]|0;if((f|0)!=0?(g=c[(c[f>>2]|0)+-12>>2]|0,h=f+g|0,f=f+(g+4)|0,g=(c[f>>2]|0)+-1|0,c[f>>2]=g,!((h|0)==0|(g|0)!=0)):0)oc[c[(c[h>>2]|0)+4>>2]&2047](h);f=c[e>>2]|0;c[k>>2]=f;if((f|0)!=0?(h=f+((c[(c[f>>2]|0)+-12>>2]|0)+4)|0,e=(c[h>>2]|0)+1|0,c[h>>2]=e,(e|0)==0):0)Ha(79054,79014,48,79068);g=OU(j,k)|0;f=c[k>>2]|0;if((f|0)!=0?(j=c[(c[f>>2]|0)+-12>>2]|0,m=f+j|0,j=f+(j+4)|0,k=(c[j>>2]|0)+-1|0,c[j>>2]=k,!((m|0)==0|(k|0)!=0)):0)oc[c[(c[m>>2]|0)+4>>2]&2047](m);g=(g|l|0)<0?0:g-l|0;f=c[d>>2]|0;c[n>>2]=f;if((f|0)!=0?(m=f+((c[(c[f>>2]|0)+-12>>2]|0)+4)|0,d=(c[m>>2]|0)+1|0,c[m>>2]=d,(d|0)==0):0)Ha(79054,79014,48,79068);h=WS(b,n,g)|0;f=c[n>>2]|0;if((f|0)!=0?(b=c[(c[f>>2]|0)+-12>>2]|0,o=f+b|0,b=f+(b+4)|0,n=(c[b>>2]|0)+-1|0,c[b>>2]=n,!((o|0)==0|(n|0)!=0)):0)oc[c[(c[o>>2]|0)+4>>2]&2047](o);if(!h){o=0;i=p;return o|0}f=o$(h,1576,8200,0)|0;if((f|0)!=0?(n=f+((c[(c[f>>2]|0)+-12>>2]|0)+4)|0,o=(c[n>>2]|0)+1|0,c[n>>2]=o,(o|0)==0):0)Ha(79054,79014,48,79068);n=c[(c[h>>2]|0)+-12>>2]|0;g=h+n|0;n=h+(n+4)|0;o=(c[n>>2]|0)+-1|0;c[n>>2]=o;if((g|0)==0|(o|0)!=0){o=f;i=p;return o|0}oc[c[(c[g>>2]|0)+4>>2]&2047](g);o=f;i=p;return o|0}function WS(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0;p=i;i=i+64|0;m=p+12|0;o=p;c[b+44>>2]=1;c[b+40>>2]=1;c[b+28>>2]=e;c[b+36>>2]=(e|0)/12|0;f=(e|0)%12|0;f=(f|0)<0?f+12|0:f;if(!f)e=0;else{g=0;e=0;do{g=(g+7|0)%12|0;e=e+1|0}while((g|0)!=(f|0))}c[b+32>>2]=(e|0)>5?e+-12|0:e;if(!(c[d>>2]|0)){o=0;i=p;return o|0}g=c[10857]|0;c[m>>2]=g;c[m+(c[g+-16>>2]|0)>>2]=c[10858];g=m+4|0;h=c[10859]|0;c[g>>2]=h;c[g+(c[h+-16>>2]|0)>>2]=c[10860];h=m+8|0;j=c[10861]|0;c[h>>2]=j;c[h+(c[j+-16>>2]|0)>>2]=c[10862];j=m+12|0;k=c[10863]|0;c[j>>2]=k;c[j+(c[k+-16>>2]|0)>>2]=c[10864];k=m+16|0;l=c[10865]|0;c[k>>2]=l;c[k+(c[l+-16>>2]|0)>>2]=c[10866];c[m>>2]=1136;c[m+4>>2]=1228;c[m+8>>2]=1260;c[m+12>>2]=1292;c[m+16>>2]=1324;l=m+20|0;c[l>>2]=0;c[l+4>>2]=0;c[l+8>>2]=0;c[l+12>>2]=0;c[l+16>>2]=0;c[l+20>>2]=0;e=AT(m,d)|0;if(e){f=e+((c[(c[e>>2]|0)+-12>>2]|0)+4)|0;d=(c[f>>2]|0)+1|0;c[f>>2]=d;if(!d)Ha(79054,79014,48,79068);q=c[(c[e>>2]|0)+-12>>2]|0;f=e+q|0;q=e+(q+4)|0;d=(c[q>>2]|0)+-1|0;c[q>>2]=d;if((f|0)==0|(d|0)!=0)d=e;else{oc[c[(c[f>>2]|0)+4>>2]&2047](f);d=e}}else d=0;e=c[10856]|0;c[m>>2]=e;c[m+(c[e+-16>>2]|0)>>2]=c[10867];c[g>>2]=c[10868];c[h>>2]=c[10869];c[j>>2]=c[10870];c[k>>2]=c[10871];pG(l);g=m+24|0;e=c[g>>2]|0;h=m+28|0;f=c[h>>2]|0;if((e|0)!=(f|0)){do{P_(c[e>>2]|0);e=e+4|0}while((e|0)!=(f|0));e=c[g>>2]|0;f=c[h>>2]|0;if((f|0)!=(e|0))c[h>>2]=f+(~((f+-4-e|0)>>>2)<<2)}e=c[l>>2]|0;if(e)P_(e);if(!d){q=0;i=p;return q|0}e=b+(c[(c[b>>2]|0)+-12>>2]|0)|0;c[o>>2]=12880;c[o+4>>2]=e;a[o+8>>0]=0;pc[c[(c[d>>2]|0)+32>>2]&1023](d,e);e=c[d+4>>2]|0;h=d+8|0;a:do if((e|0)!=(c[h>>2]|0)){f=12880;while(1){q=rc[c[f+24>>2]&127](o)|0;f=c[o>>2]|0;if(q){n=f;break a}g=c[e>>2]|0;if(!g){e=21;break}pc[c[f+8>>2]&1023](o,g);e=e+4|0;if((e|0)==(c[h>>2]|0)){e=18;break}f=c[o>>2]|0}if((e|0)==18){n=c[o>>2]|0;break}else if((e|0)==21)Ha(78999,79014,95,78956)}else n=12880;while(0);pc[c[n+16>>2]&1023](o,d);q=d;i=p;return q|0}function XS(b,d,e,f,g){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0;q=i;i=i+16|0;j=q;p=BE(a[d>>0]|0)|0;n=b+16|0;o=c[n>>2]|0;m=(c[b+20>>2]|0)-o>>3;a:do if(m){k=c[e>>2]|0;l=a[d>>0]|0;h=0;while(1){if((c[o+(h<<3)+4>>2]|0)==(k|0)?(a[o+(h<<3)>>0]|0)==l<<24>>24:0)break;h=h+1|0;if(h>>>0>=m>>>0)break a}h=h+g|0;if(h>>>0>m>>>0)h=h+-12|0;else h=(h|0)<0?h+12|0:h;a[d>>0]=a[o+(h<<3)>>0]|0;c[e>>2]=c[(c[n>>2]|0)+(h<<3)+4>>2];h=BE(a[d>>0]|0)|0;if((h|0)<(p|0)?(c[b+28>>2]|0)>0:0){c[f>>2]=(c[f>>2]|0)+1;i=q;return}if((h|0)<=(p|0)){i=q;return}if((c[b+28>>2]|0)>=0){i=q;return}c[f>>2]=(c[f>>2]|0)+-1;i=q;return}while(0);b=df(52028,76858,43)|0;a[j>>0]=a[d>>0]|0;b=df(df(b,j,1)|0,78745,1)|0;b=df(O3(b,c[e>>2]|0)|0,76902,1)|0;c[j>>2]=S2(b+(c[(c[b>>2]|0)+-12>>2]|0)|0)|0;f=o8(j,54552)|0;f=zc[c[(c[f>>2]|0)+28>>2]&255](f,10)|0;m8(j);R3(b,f)|0;B3(b)|0;i=q;return}function YS(a){a=a|0;if(!(B2(a,76904)|0)){a=-7;return a|0}if(!(B2(a,76907)|0)){a=-7;return a|0}if(!(B2(a,88914)|0)){a=0;return a|0}if(!(B2(a,76910)|0)){a=0;return a|0}if(!(B2(a,76912)|0)){a=7;return a|0}if(!(B2(a,76915)|0)){a=7;return a|0}if(!(B2(a,76918)|0)){a=-5;return a|0}if(!(B2(a,76921)|0)){a=-5;return a|0}if(!(B2(a,76924)|0)){a=-5;return a|0}if(!(B2(a,76927)|0)){a=2;return a|0}if(!(B2(a,76929)|0)){a=2;return a|0}if(!(B2(a,76931)|0)){a=2;return a|0}if(!(B2(a,76933)|0)){a=9;return a|0}if(!(B2(a,76936)|0)){a=9;return a|0}if(!(B2(a,76939)|0)){a=9;return a|0}if(!(B2(a,76942)|0)){a=-3;return a|0}if(!(B2(a,76945)|0)){a=-3;return a|0}if(!(B2(a,76947)|0)){a=4;return a|0}if(!(B2(a,76949)|0)){a=4;return a|0}if(!(B2(a,76952)|0)){a=11;return a|0}if(!(B2(a,76955)|0)){a=-8;return a|0}if(!(B2(a,76958)|0)){a=-8;return a|0}if(!(B2(a,76961)|0)){a=-1;return a|0}if(!(B2(a,76963)|0)){a=-1;return a|0}if(!(B2(a,76965)|0)){a=6;return a|0}if(!(B2(a,76968)|0)){a=6;return a|0}if(!(B2(a,76971)|0)){a=-6;return a|0}if(!(B2(a,76974)|0)){a=-6;return a|0}if(!(B2(a,76977)|0)){a=1;return a|0}if(!(B2(a,76979)|0)){a=1;return a|0}if(!(B2(a,76981)|0)){a=8;return a|0}if(!(B2(a,76984)|0)){a=8;return a|0}if(!(B2(a,76987)|0)){a=-4;return a|0}if(!(B2(a,76990)|0)){a=-4;return a|0}if(!(B2(a,76992)|0)){a=3;return a|0}if(!(B2(a,76994)|0)){a=3;return a|0}if(!(B2(a,76997)|0)){a=10;return a|0}if(!(B2(a,77e3)|0)){a=-2;return a|0}if(!(B2(a,77003)|0)){a=-2;return a|0}if(!(B2(a,77006)|0)){a=-2;return a|0}if(!(B2(a,77008)|0)){a=5;return a|0}if(!(B2(a,77010)|0)){a=5;return a|0}if(!(B2(a,77012)|0)){a=5;return a|0}if(!(B2(a,77015)|0)){a=12;return a|0}else{a=(B2(a,77018)|0)==0;return (a?12:-99)|0}return 0}function ZS(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0;n=i;i=i+32|0;k=n+16|0;j=n+20|0;g=n+12|0;l=n;e=c[d>>2]|0;if(!e)Ha(78999,79014,102,79043);if(!(B2(e+20|0,77054)|0)){i=n;return}e=c[d>>2]|0;if(!e)Ha(78999,79014,102,79043);if(!(B2(e+20|0,77021)|0)){i=n;return}e=c[d>>2]|0;if(!e)Ha(78999,79014,102,79043);a[j>>0]=zE(e,k)|0;e=c[d>>2]|0;if(!e)Ha(78999,79014,102,79043);c[k>>2]=(c[k>>2]|0)+(c[e+52>>2]|0);c[g>>2]=0;XS(b,j,k,g,c[b+32>>2]|0);e=c[d>>2]|0;if(!e)Ha(78999,79014,102,79043);e=c[e+48>>2]|0;f=b+40|0;if((e|0)==-999)e=c[f>>2]|0;else c[f>>2]=e;h=(c[g>>2]|0)+e+(c[b+36>>2]|0)|0;c[l>>2]=0;c[l+4>>2]=0;c[l+8>>2]=0;v2(l,a[j>>0]|0);e=c[d>>2]|0;if(!e)Ha(78999,79014,102,79043);ad(e,l);g=b+44|0;e=c[d>>2]|0;f=(e|0)==0;do if((h|0)==(c[g>>2]|0))if(!f)if((c[e+48>>2]|0)==-999)break;else{m=24;break}else Ha(78999,79014,102,79043);else if(f)Ha(78999,79014,102,79043);else m=24;while(0);if((m|0)==24)c[e+48>>2]=h;c[g>>2]=h;c[e+52>>2]=c[k>>2];o2(l);i=n;return}function _S(a,b){a=a|0;b=b|0;ZS(a+-4|0,b);return}function $S(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,j=0,k=0;k=i;i=i+32|0;f=k+12|0;e=k;d=c[d>>2]|0;if(!d)Ha(78999,79014,102,79043);j=ed(d,0)|0;if(!j){i=k;return}if(a[j+44>>0]|0){k2(f,j+20|0);n2(e,f,0,4,f);g=B2(e,77027)|0;o2(e);if(!g){d=1;e=0}else{d=0;e=YS(f)|0}o2(f);if(!d){g=e;h=9}}else{g=_c(j)|0;h=9}if((h|0)==9){e=(c[b+28>>2]|0)%12|0;e=(e|0)<0?e+12|0:e;if(!e)d=0;else{f=0;d=0;do{f=(f+7|0)%12|0;d=d+1|0}while((f|0)!=(e|0))}d=((d|0)>5?d+-12|0:d)+g|0;if((d|0)>5)d=d+-12|0;else d=(d|0)<-6?d+12|0:d;Vc(j,d);Uc(j,0)}b=j+4|0;h=(c[b>>2]|0)+-1|0;c[b>>2]=h;if(h){i=k;return}oc[c[(c[j>>2]|0)+4>>2]&2047](j);i=k;return}function aT(a,b){a=a|0;b=b|0;$S(a+-8|0,b);return}function bT(a,b){a=a|0;b=b|0;var d=0,e=0;c[a+44>>2]=1;c[a+40>>2]=1;d=(c[a+28>>2]|0)%12|0;d=(d|0)<0?d+12|0:d;if(!d)b=0;else{e=0;b=0;do{e=(e+7|0)%12|0;b=b+1|0}while((e|0)!=(d|0))}c[a+32>>2]=(b|0)>5?b+-12|0:b;return}function cT(a,b){a=a|0;b=b|0;var d=0,e=0;e=a+-12|0;c[e+44>>2]=1;c[e+40>>2]=1;a=(c[e+28>>2]|0)%12|0;a=(a|0)<0?a+12|0:a;if(!a)b=0;else{d=0;b=0;do{d=(d+7|0)%12|0;b=b+1|0}while((d|0)!=(a|0))}c[e+32>>2]=(b|0)>5?b+-12|0:b;return}function dT(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;d=c[a>>2]|0;e=d;h=((c[l>>2]|0)-e>>3)+1|0;if(h>>>0>536870911){M_(a);e=c[a>>2]|0;d=e}k=a+8|0;g=d;f=(c[k>>2]|0)-g|0;if(f>>3>>>0<268435455){f=f>>2;f=f>>>0>>0?h:f;h=(c[l>>2]|0)-g|0;g=h>>3;if(!f){j=0;i=0;f=h}else m=6}else{h=(c[l>>2]|0)-g|0;f=536870911;g=h>>3;m=6}if((m|0)==6){j=f;i=O_(f<<3)|0;f=h}h=b;b=c[h+4>>2]|0;m=i+(g<<3)|0;c[m>>2]=c[h>>2];c[m+4>>2]=b;Rba(i|0,d|0,f|0)|0;c[a>>2]=i;c[l>>2]=i+(g+1<<3);c[k>>2]=i+(j<<3);if(!e)return;P_(e);return}function eT(a,b,c){a=a|0;b=b|0;c=c|0;return 0}function fT(b){b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0;i=O_(4)|0;c[i>>2]=0;if((a[8952]|0)==0?(Ga(8952)|0)!=0:0){$e(39720);Ta(52,39720,n|0)|0;$a(8952)}d=We(39720)|0;f=b+4|0;b=c[f>>2]|0;if((b|0)!=(d|0)){if((d|0)!=0?(l=d+((c[(c[d>>2]|0)+-12>>2]|0)+4)|0,k=(c[l>>2]|0)+1|0,c[l>>2]=k,(k|0)==0):0)Ha(79054,79014,48,79068);if((b|0)!=0?(k=c[(c[b>>2]|0)+-12>>2]|0,e=b+k|0,k=b+(k+4)|0,l=(c[k>>2]|0)+-1|0,c[k>>2]=l,!((e|0)==0|(l|0)!=0)):0)oc[c[(c[e>>2]|0)+4>>2]&2047](e);c[f>>2]=d}do if(d){k=c[(c[d>>2]|0)+-12>>2]|0;b=d+k|0;k=d+(k+4)|0;l=(c[k>>2]|0)+-1|0;c[k>>2]=l;if(!((b|0)==0|(l|0)!=0)){oc[c[(c[b>>2]|0)+4>>2]&2047](b);d=c[f>>2]|0;if(!d){j=0;h=1;break}}k=d+((c[(c[d>>2]|0)+-12>>2]|0)+4)|0;l=(c[k>>2]|0)+1|0;c[k>>2]=l;if(!l)Ha(79054,79014,48,79068);else{j=d;h=0}}else{j=0;h=1}while(0);d=c[i>>2]|0;if((d|0)!=(j|0)){if(!h?(k=j+((c[(c[j>>2]|0)+-12>>2]|0)+4)|0,l=(c[k>>2]|0)+1|0,c[k>>2]=l,(l|0)==0):0)Ha(79054,79014,48,79068);if((d|0)!=0?(k=c[(c[d>>2]|0)+-12>>2]|0,g=d+k|0,k=d+(k+4)|0,l=(c[k>>2]|0)+-1|0,c[k>>2]=l,!((g|0)==0|(l|0)!=0)):0)oc[c[(c[g>>2]|0)+4>>2]&2047](g);c[i>>2]=j}if(h)return i|0;k=c[(c[j>>2]|0)+-12>>2]|0;d=j+k|0;k=j+(k+4)|0;l=(c[k>>2]|0)+-1|0;c[k>>2]=l;if((d|0)==0|(l|0)!=0)return i|0;oc[c[(c[d>>2]|0)+4>>2]&2047](d);return i|0}function gT(b){b=b|0;var d=0,e=0,f=0,g=0,h=0;d=O_(4)|0;c[d>>2]=0;if((a[8952]|0)==0?(Ga(8952)|0)!=0:0){$e(39720);Ta(52,39720,n|0)|0;$a(8952)}f=Xe(39720)|0;b=c[d>>2]|0;if((b|0)!=(f|0)){if((f|0)!=0?(h=f+((c[(c[f>>2]|0)+-12>>2]|0)+4)|0,g=(c[h>>2]|0)+1|0,c[h>>2]=g,(g|0)==0):0)Ha(79054,79014,48,79068);if((b|0)!=0?(g=c[(c[b>>2]|0)+-12>>2]|0,e=b+g|0,g=b+(g+4)|0,h=(c[g>>2]|0)+-1|0,c[g>>2]=h,!((e|0)==0|(h|0)!=0)):0)oc[c[(c[e>>2]|0)+4>>2]&2047](e);c[d>>2]=f}if(!f)return d|0;g=c[(c[f>>2]|0)+-12>>2]|0;b=f+g|0;g=f+(g+4)|0;h=(c[g>>2]|0)+-1|0;c[g>>2]=h;if((b|0)==0|(h|0)!=0)return d|0;oc[c[(c[b>>2]|0)+4>>2]&2047](b);return d|0}function hT(b){b=b|0;var d=0,e=0,f=0,g=0,h=0;d=O_(4)|0;c[d>>2]=0;if((a[8952]|0)==0?(Ga(8952)|0)!=0:0){$e(39720);Ta(52,39720,n|0)|0;$a(8952)}f=Ye(39720)|0;b=c[d>>2]|0;if((b|0)!=(f|0)){if((f|0)!=0?(h=f+((c[(c[f>>2]|0)+-12>>2]|0)+4)|0,g=(c[h>>2]|0)+1|0,c[h>>2]=g,(g|0)==0):0)Ha(79054,79014,48,79068);if((b|0)!=0?(g=c[(c[b>>2]|0)+-12>>2]|0,e=b+g|0,g=b+(g+4)|0,h=(c[g>>2]|0)+-1|0,c[g>>2]=h,!((e|0)==0|(h|0)!=0)):0)oc[c[(c[e>>2]|0)+4>>2]&2047](e);c[d>>2]=f}if(!f)return d|0;g=c[(c[f>>2]|0)+-12>>2]|0;b=f+g|0;g=f+(g+4)|0;h=(c[g>>2]|0)+-1|0;c[g>>2]=h;if((b|0)==0|(h|0)!=0)return d|0;oc[c[(c[b>>2]|0)+4>>2]&2047](b);return d|0}function iT(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,j=0,k=0,l=0;l=i;i=i+16|0;b=l;j=O_(4)|0;c[j>>2]=0;if((a[8952]|0)==0?(Ga(8952)|0)!=0:0){$e(39720);Ta(52,39720,n|0)|0;$a(8952)}l2(b,77054,1);k=Ze(39720,b)|0;o2(b);do if((c[d>>2]|0)>-1)if(!k)Ha(78999,79014,95,78956);else{GE(k,d)|0;break}while(0);d=(k|0)==0;do if((e|0)>0)if(d)Ha(78999,79014,102,79043);else{c[k+56>>2]=e;f=13;break}else if(d)h=1;else f=13;while(0);if((f|0)==13){e=k+((c[(c[k>>2]|0)+-12>>2]|0)+4)|0;f=(c[e>>2]|0)+1|0;c[e>>2]=f;if(!f)Ha(79054,79014,48,79068);else h=0}b=c[j>>2]|0;if((b|0)!=(k|0)){if(!d?(e=k+((c[(c[k>>2]|0)+-12>>2]|0)+4)|0,f=(c[e>>2]|0)+1|0,c[e>>2]=f,(f|0)==0):0)Ha(79054,79014,48,79068);if((b|0)!=0?(e=c[(c[b>>2]|0)+-12>>2]|0,g=b+e|0,e=b+(e+4)|0,f=(c[e>>2]|0)+-1|0,c[e>>2]=f,!((g|0)==0|(f|0)!=0)):0)oc[c[(c[g>>2]|0)+4>>2]&2047](g);c[j>>2]=k}if(h){i=l;return j|0}g=c[(c[k>>2]|0)+-12>>2]|0;b=k+g|0;g=k+(g+4)|0;h=(c[g>>2]|0)+-1|0;c[g>>2]=h;if(!((b|0)==0|(h|0)!=0))oc[c[(c[b>>2]|0)+4>>2]&2047](b);h=c[(c[k>>2]|0)+-12>>2]|0;b=k+h|0;h=k+(h+4)|0;k=(c[h>>2]|0)+-1|0;c[h>>2]=k;if((b|0)==0|(k|0)!=0){i=l;return j|0}oc[c[(c[b>>2]|0)+4>>2]&2047](b);i=l;return j|0}function jT(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;m=O_(4)|0;c[m>>2]=0;if((a[8952]|0)==0?(Ga(8952)|0)!=0:0){$e(39720);Ta(52,39720,n|0)|0;$a(8952)}k=Ze(39720,d)|0;do if(e)if(!k)Ha(78999,79014,102,79043);else{c[k+52>>2]=e;break}while(0);do if((f|0)!=-1e3)if(!k)Ha(78999,79014,102,79043);else{c[k+48>>2]=f;break}while(0);do if((c[g>>2]|0)>-1)if(!k)Ha(78999,79014,95,78956);else{GE(k,g)|0;break}while(0);d=(k|0)==0;do if((h|0)>0)if(d)Ha(78999,79014,102,79043);else{c[k+56>>2]=h;i=21;break}else if(d)l=1;else i=21;while(0);if((i|0)==21){h=k+((c[(c[k>>2]|0)+-12>>2]|0)+4)|0;i=(c[h>>2]|0)+1|0;c[h>>2]=i;if(!i)Ha(79054,79014,48,79068);else l=0}b=c[m>>2]|0;if((b|0)!=(k|0)){if(!d?(h=k+((c[(c[k>>2]|0)+-12>>2]|0)+4)|0,i=(c[h>>2]|0)+1|0,c[h>>2]=i,(i|0)==0):0)Ha(79054,79014,48,79068);if((b|0)!=0?(h=c[(c[b>>2]|0)+-12>>2]|0,j=b+h|0,h=b+(h+4)|0,i=(c[h>>2]|0)+-1|0,c[h>>2]=i,!((j|0)==0|(i|0)!=0)):0)oc[c[(c[j>>2]|0)+4>>2]&2047](j);c[m>>2]=k}if(l)return m|0;j=c[(c[k>>2]|0)+-12>>2]|0;b=k+j|0;j=k+(j+4)|0;l=(c[j>>2]|0)+-1|0;c[j>>2]=l;if(!((b|0)==0|(l|0)!=0))oc[c[(c[b>>2]|0)+4>>2]&2047](b);l=c[(c[k>>2]|0)+-12>>2]|0;b=k+l|0;k=k+(l+4)|0;l=(c[k>>2]|0)+-1|0;c[k>>2]=l;if((b|0)==0|(l|0)!=0)return m|0;oc[c[(c[b>>2]|0)+4>>2]&2047](b);return m|0}function kT(b,d,e){b=b|0;d=d|0;e=e|0;var f=0;if((a[8952]|0)==0?(Ga(8952)|0)!=0:0){$e(39720);Ta(52,39720,n|0)|0;$a(8952)}b=_e(39720,d,e)|0;if(!b){b=0;return b|0}e=b+((c[(c[b>>2]|0)+-12>>2]|0)+4)|0;d=(c[e>>2]|0)+1|0;c[e>>2]=d;if(!d)Ha(79054,79014,48,79068);f=c[(c[b>>2]|0)+-12>>2]|0;e=b+f|0;f=b+(f+4)|0;d=(c[f>>2]|0)+-1|0;c[f>>2]=d;if(!((e|0)==0|(d|0)!=0))oc[c[(c[e>>2]|0)+4>>2]&2047](e);e=O_(4)|0;c[e>>2]=0;d=b+((c[(c[b>>2]|0)+-12>>2]|0)+4)|0;f=(c[d>>2]|0)+1|0;c[d>>2]=f;if(!f)Ha(79054,79014,48,79068);c[e>>2]=b;f=c[(c[b>>2]|0)+-12>>2]|0;d=b+f|0;b=b+(f+4)|0;f=(c[b>>2]|0)+-1|0;c[b>>2]=f;if((d|0)==0|(f|0)!=0){f=e;return f|0}oc[c[(c[d>>2]|0)+4>>2]&2047](d);f=e;return f|0}function lT(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;a=O_(4)|0;c[a>>2]=0;d=bd()|0;if(!d)Ha(78999,79014,102,79043);f=d+4|0;e=(c[f>>2]|0)+1|0;c[f>>2]=e;if(!e)Ha(79054,79014,48,79068);c[a>>2]=d;e=d+4|0;f=(c[e>>2]|0)+-1|0;c[e>>2]=f;if(f){Vc(d,b);return a|0}oc[c[(c[d>>2]|0)+4>>2]&2047](d);Vc(d,b);return a|0}function mT(a,b){a=a|0;b=+b;var d=0,e=0,f=0;a=O_(4)|0;c[a>>2]=0;d=bd()|0;if(!d)Ha(78999,79014,102,79043);f=d+4|0;e=(c[f>>2]|0)+1|0;c[f>>2]=e;if(!e)Ha(79054,79014,48,79068);c[a>>2]=d;e=d+4|0;f=(c[e>>2]|0)+-1|0;c[e>>2]=f;if(f){Zc(d,b);return a|0}oc[c[(c[d>>2]|0)+4>>2]&2047](d);Zc(d,b);return a|0}function nT(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0;a=O_(4)|0;c[a>>2]=0;e=bd()|0;if(!e)Ha(78999,79014,102,79043);g=e+4|0;f=(c[g>>2]|0)+1|0;c[g>>2]=f;if(!f)Ha(79054,79014,48,79068);c[a>>2]=e;f=e+4|0;g=(c[f>>2]|0)+-1|0;c[f>>2]=g;if(g){Tc(e,b,d);return a|0}oc[c[(c[e>>2]|0)+4>>2]&2047](e);Tc(e,b,d);return a|0}function oT(a,b,d){a=a|0;b=b|0;d=d|0;var e=0;a=i;i=i+16|0;e=a;b=O3(df(df(52028,b,f1(b)|0)|0,77056,9)|0,d)|0;c[e>>2]=S2(b+(c[(c[b>>2]|0)+-12>>2]|0)|0)|0;d=o8(e,54552)|0;d=zc[c[(c[d>>2]|0)+28>>2]&255](d,10)|0;m8(e);R3(b,d)|0;B3(b)|0;i=a;return 0}function pT(a,b){a=a|0;b=b|0;var d=0;yT(b,a)|0;b=c[a+4>>2]|0;if(!b)return b|0;d=b+((c[(c[b>>2]|0)+-12>>2]|0)+4)|0;a=(c[d>>2]|0)+1|0;c[d>>2]=a;if(!a)Ha(79054,79014,48,79068);else return b|0;return 0}function qT(a){a=a|0;var b=0,d=0;c[a>>2]=41892;a=c[a+4>>2]|0;if(!a)return;d=c[(c[a>>2]|0)+-12>>2]|0;b=a+d|0;d=a+(d+4)|0;a=(c[d>>2]|0)+-1|0;c[d>>2]=a;if((b|0)==0|(a|0)!=0)return;oc[c[(c[b>>2]|0)+4>>2]&2047](b);return}function rT(a){a=a|0;var b=0,d=0,e=0;c[a>>2]=41892;b=c[a+4>>2]|0;if(!b){P_(a);return}e=c[(c[b>>2]|0)+-12>>2]|0;d=b+e|0;e=b+(e+4)|0;b=(c[e>>2]|0)+-1|0;c[e>>2]=b;if((d|0)==0|(b|0)!=0){P_(a);return}oc[c[(c[d>>2]|0)+4>>2]&2047](d);P_(a);return}function sT(){var e=0,f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0;v=i;i=i+16|0;t=v;if(!(c[10495]|0)){c[10495]=1;if(!(c[10496]|0))c[10496]=1;e=c[10488]|0;if(!e){e=c[11943]|0;c[10488]=e}if(!(c[10489]|0))c[10489]=c[11944];h=c[10497]|0;do if(!h){f=w1(4)|0;c[10497]=f;if(!f)zT(77085);else{c[f>>2]=0;c[10499]=1;c[10498]=0;u=17;break}}else{g=c[10498]|0;f=c[h+(g<<2)>>2]|0;if(!f){f=c[10499]|0;if(g>>>0>=(f+-1|0)>>>0){f=f+8|0;e=z1(h,f<<2)|0;c[10497]=e;if(!e)zT(77085);else{e=e+(c[10499]<<2)|0;c[e>>2]=0;c[e+4>>2]=0;c[e+8>>2]=0;c[e+12>>2]=0;c[e+16>>2]=0;c[e+20>>2]=0;c[e+24>>2]=0;c[e+28>>2]=0;c[10499]=f;e=c[10488]|0;u=17;break}}else u=17}else{j=h;k=g;l=f}}while(0);if((u|0)==17){r=tT(e,16384)|0;l=c[10498]|0;c[(c[10497]|0)+(l<<2)>>2]=r;r=c[10497]|0;j=r;k=l;l=c[r+(l<<2)>>2]|0}c[10500]=c[l+16>>2];r=c[l+8>>2]|0;c[10501]=r;c[10491]=r;c[10488]=c[c[j+(k<<2)>>2]>>2];a[77139]=a[r>>0]|0}a:while(1){f=c[10501]|0;a[f>>0]=a[77139]|0;h=f;e=c[10496]|0;b:while(1){j=f;f=e;while(1){e=c[42008+(d[j>>0]<<2)>>2]|0;if(b[58144+(f<<1)>>1]|0){c[10758]=f;c[10759]=j}c:while(1){g=e&255;while(1){e=(b[58408+(f<<1)>>1]|0)+g|0;if((b[58686+(e<<1)>>1]|0)==(f|0))break c;r=b[59244+(f<<1)>>1]|0;e=r<<16>>16;if(r<<16>>16>131){f=e;break}else f=e}e=c[43040+(g<<2)>>2]|0}e=b[59522+(e<<1)>>1]|0;if(e<<16>>16==131)break;else{j=j+1|0;f=e<<16>>16}}r=h;e=43036;f=c[10758]|0;d:while(1){p=r;e:while(1){o=c[e>>2]|0;e=b[58144+(f<<1)>>1]|0;c[10491]=r;q=o;c[10487]=q-p;a[77139]=a[o>>0]|0;a[o>>0]=0;c[10501]=o;if(((f|0)!=9?(c[43236+(e<<2)>>2]|0)!=0:0)?(s=c[10487]|0,(s|0)!=0):0){f=c[10491]|0;g=0;do{if((a[f+g>>0]|0)==10)c[10490]=(c[10490]|0)+1;g=g+1|0}while(g>>>0>>0)}f:while(1){switch(e|0){case 43:case 10:case 8:continue a;case 1:{u=172;break a}case 2:{u=173;break a}case 3:{u=174;break a}case 6:case 5:case 4:{u=175;break a}case 15:{u=45;break a}case 16:{u=46;break a}case 17:{u=47;break a}case 18:{u=48;break a}case 19:{u=49;break a}case 20:{u=50;break a}case 21:{u=51;break a}case 22:{u=52;break a}case 23:{u=53;break a}case 24:{u=54;break a}case 25:{u=55;break a}case 26:{u=56;break a}case 27:{u=57;break a}case 28:{u=58;break a}case 29:{u=59;break a}case 30:{u=60;break a}case 31:{u=61;break a}case 32:{u=62;break a}case 33:{u=63;break a}case 34:{u=64;break a}case 35:{u=65;break a}case 36:{u=66;break a}case 37:{u=68;break a}case 38:{u=69;break a}case 39:{u=70;break a}case 40:{u=71;break a}case 41:{u=72;break a}case 42:{u=73;break a}case 44:{u=84;break a}case 50:case 49:case 48:case 47:{u=86;break a}case 14:{e=262;u=176;break a}case 7:{u=39;break b}case 9:{u=40;break b}case 11:{u=41;break b}case 12:{u=42;break b}case 13:{u=44;break b}case 45:{u=85;break b}case 0:break f;case 46:break;default:{u=171;break a}}n=c[10491]|0;a[o>>0]=a[77139]|0;e=c[10498]|0;f=c[10497]|0;g=c[f+(e<<2)>>2]|0;if(!(c[g+44>>2]|0)){c[10500]=c[g+16>>2];c[g>>2]=c[10488];f=c[10497]|0;c[(c[f+(e<<2)>>2]|0)+44>>2]=1;e=c[10498]|0;g=c[f+(e<<2)>>2]|0}h=c[10501]|0;j=c[10500]|0;k=c[g+4>>2]|0;m=c[10491]|0;l=m;if(h>>>0<=(k+j|0)>>>0){f=n;e=q;break e}if(h>>>0>(k+(j+1)|0)>>>0){u=109;break a}h=h-l|0;if(!(c[g+40>>2]|0)){j=(h|0)==1?1:2;g=l;h=m}else{l=h+-1|0;if((h|0)>1){f=k;g=0;e=m;while(1){a[f>>0]=a[e>>0]|0;g=g+1|0;if((g|0)>=(l|0))break;else{f=f+1|0;e=e+1|0}}f=c[10497]|0;g=c[f+(c[10498]<<2)>>2]|0}if((c[g+44>>2]|0)==2){c[10500]=0;c[g+16>>2]=0}else{h=c[g+12>>2]|0;e=h-l+-1|0;if(!e){k=c[10501]|0;do{e=g+4|0;j=c[e>>2]|0;if(!(c[g+20>>2]|0)){u=120;break a}f=h<<1;f=(f|0)==0?(h>>>3)+h|0:f;c[g+12>>2]=f;f=z1(j,f+2|0)|0;c[e>>2]=f;if(!f){u=122;break a}k=f+(k-j)|0;c[10501]=k;f=c[10497]|0;g=c[f+(c[10498]<<2)>>2]|0;h=c[g+12>>2]|0;e=h-l+-1|0}while((e|0)==0)}h=e>>>0>8192?8192:e;g:do if(!(c[g+24>>2]|0)){g=M$()|0;c[g>>2]=0;e=J0((c[(c[f+(c[10498]<<2)>>2]|0)+4>>2]|0)+l|0,1,h,c[10488]|0)|0;c[10500]=e;if(!e)do{e=c[10488]|0;if(!(F0(e)|0)){e=0;break g}if((c[g>>2]|0)!=4){u=136;break a}c[g>>2]=0;E0(e);e=J0((c[(c[(c[10497]|0)+(c[10498]<<2)>>2]|0)+4>>2]|0)+l|0,1,h,c[10488]|0)|0;c[10500]=e}while((e|0)==0)}else{do if(!h)e=0;else{e=0;h:while(1){f=M0(c[10488]|0)|0;switch(f|0){case -1:{u=130;break h}case 10:break h;default:{}}a[(c[(c[(c[10497]|0)+(c[10498]<<2)>>2]|0)+4>>2]|0)+(e+l)>>0]=f;e=e+1|0;if(e>>>0>=h>>>0){u=128;break}}if((u|0)==128){u=0;if((f|0)!=10)break}else if((u|0)==130){u=0;if(!(F0(c[10488]|0)|0))break;else{u=131;break a}}a[(c[(c[(c[10497]|0)+(c[10498]<<2)>>2]|0)+4>>2]|0)+(e+l)>>0]=10;e=e+1|0}while(0);c[10500]=e}while(0);f=c[10497]|0;c[(c[f+(c[10498]<<2)>>2]|0)+16>>2]=e}do if(!(c[10500]|0))if(!l){uT(c[10488]|0);f=c[10497]|0;j=1;break}else{c[(c[f+(c[10498]<<2)>>2]|0)+44>>2]=2;j=2;break}else j=0;while(0);e=c[10500]|0;g=e+l|0;f=c[f+(c[10498]<<2)>>2]|0;if(g>>>0>(c[f+12>>2]|0)>>>0){m=z1(c[f+4>>2]|0,g+(e>>>1)|0)|0;e=c[10498]|0;c[(c[(c[10497]|0)+(e<<2)>>2]|0)+4>>2]=m;e=c[(c[(c[10497]|0)+(e<<2)>>2]|0)+4>>2]|0;if(!e){u=147;break a}g=c[10500]|0}else{g=e;e=c[f+4>>2]|0}f=g+l|0;c[10500]=f;a[e+f>>0]=0;a[(c[(c[(c[10497]|0)+(c[10498]<<2)>>2]|0)+4>>2]|0)+((c[10500]|0)+1)>>0]=0;e=c[10498]|0;f=c[10497]|0;h=c[(c[f+(e<<2)>>2]|0)+4>>2]|0;c[10491]=h;g=h}switch(j|0){case 0:{f=n;e=q;break d}case 2:{u=161;break e}case 1:break;default:continue a}c[10501]=g;e=(((c[10496]|0)+-1|0)/2|0)+47|0}a[o>>0]=a[77139]|0;e=43036;f=c[10758]|0}if((u|0)==161){u=0;k=(c[(c[f+(e<<2)>>2]|0)+4>>2]|0)+(c[10500]|0)|0;c[10501]=k;f=c[10496]|0;if(h>>>0>>0)j=h;else{r=h;e=42004;continue}while(1){e=a[j>>0]|0;if(!(e<<24>>24))e=1;else e=c[42008+((e&255)<<2)>>2]|0;if(!(b[58144+(f<<1)>>1]|0)){g=e;e=f}else{c[10758]=f;c[10759]=j;g=e;e=f}i:while(1){g=g&255;f=e;while(1){e=(b[58408+(f<<1)>>1]|0)+g|0;if((b[58686+(e<<1)>>1]|0)==(f|0))break i;r=b[59244+(f<<1)>>1]|0;e=r<<16>>16;if(r<<16>>16>131)break;else f=e}g=c[43040+(g<<2)>>2]|0}f=b[59522+(e<<1)>>1]|0;e=j+1|0;if((e|0)==(k|0)){r=h;e=42004;continue d}else j=e}}l=e-f|0;k=m+(l+-1)|0;c[10501]=k;e=c[10496]|0;if((l|0)>1){h=m+(l+-1)|0;j=m;do{f=a[j>>0]|0;if(!(f<<24>>24))f=1;else f=c[42008+((f&255)<<2)>>2]|0;if(b[58144+(e<<1)>>1]|0){c[10758]=e;c[10759]=j}j:while(1){g=f&255;do{f=(b[58408+(e<<1)>>1]|0)+g|0;if((b[58686+(f<<1)>>1]|0)==(e|0)){e=f;break j}r=b[59244+(e<<1)>>1]|0;e=r<<16>>16}while(r<<16>>16<=131);f=c[43040+(g<<2)>>2]|0}e=b[59522+(e<<1)>>1]|0;j=j+1|0}while((j|0)!=(h|0))}if(b[58144+(e<<1)>>1]|0){c[10758]=e;c[10759]=k}f=(b[58408+(e<<1)>>1]|0)+1|0;if((b[58686+(f<<1)>>1]|0)==(e|0))e=f;else{do{r=b[59244+(e<<1)>>1]|0;e=r<<16>>16;f=(b[58408+(e<<1)>>1]|0)+1|0}while((b[58686+(f<<1)>>1]|0)!=r<<16>>16);e=f}g=b[59522+(e<<1)>>1]|0;if(!(g<<16>>16==131|(e|0)==0)){f=m;e=l;u=106;break}r=m;e=43036;f=c[10758]|0}if((u|0)==106){u=0;e=f+e|0;c[10501]=e;h=f;f=e;e=g<<16>>16;continue}r=e-f|0;k=h+(r+-1)|0;c[10501]=k;e=c[10496]|0;if((r|0)>1)j=h;else{f=k;continue}while(1){f=a[j>>0]|0;if(!(f<<24>>24))f=1;else f=c[42008+((f&255)<<2)>>2]|0;if(b[58144+(e<<1)>>1]|0){c[10758]=e;c[10759]=j}k:while(1){g=f&255;f=e;while(1){e=(b[58408+(f<<1)>>1]|0)+g|0;if((b[58686+(e<<1)>>1]|0)==(f|0))break k;r=b[59244+(f<<1)>>1]|0;e=r<<16>>16;if(r<<16>>16>131)break;else f=e}f=c[43040+(g<<2)>>2]|0}g=b[59522+(e<<1)>>1]|0;e=j+1|0;if(e>>>0>>0){j=e;e=g}else{f=k;e=g;continue b}}}if((u|0)==39){u=0;c[10496]=3;continue}else if((u|0)==40){u=0;c[10496]=1;continue}else if((u|0)==41){u=0;c[10855]=(c[10855]|0)+1;continue}else if((u|0)==42){u=0;r=(c[10855]|0)+-1|0;c[10855]=r;if(r)continue;c[10496]=1;continue}else if((u|0)==44){u=0;c[10855]=1;c[10496]=5;continue}else if((u|0)==85){u=0;L0(c[10491]|0,c[10487]|0,1,c[10489]|0)|0;continue}}switch(u|0){case 45:{u=263;i=v;return u|0}case 46:{u=270;i=v;return u|0}case 47:{u=271;i=v;return u|0}case 48:{u=264;i=v;return u|0}case 49:{u=265;i=v;return u|0}case 50:{u=268;i=v;return u|0}case 51:{u=269;i=v;return u|0}case 52:{u=272;i=v;return u|0}case 53:{u=280;i=v;return u|0}case 54:{u=281;i=v;return u|0}case 55:{u=282;i=v;return u|0}case 56:{u=283;i=v;return u|0}case 57:{u=287;i=v;return u|0}case 58:{u=288;i=v;return u|0}case 59:{u=289;i=v;return u|0}case 60:{u=284;i=v;return u|0}case 61:{u=285;i=v;return u|0}case 62:{u=286;i=v;return u|0}case 63:{c[10496]=7;u=266;i=v;return u|0}case 64:{u=274;i=v;return u|0}case 65:{c[10496]=1;u=267;i=v;return u|0}case 66:{e=c[10491]|0;f=f1(e)|0;if((f|0)>0)g=0;else{u=273;i=v;return u|0}do{u=g;g=g+1|0;a[e+u>>0]=a[e+g>>0]|0}while((g|0)!=(f|0));e=273;i=v;return e|0}case 68:{u=277;i=v;return u|0}case 69:{u=276;i=v;return u|0}case 70:{u=275;i=v;return u|0}case 71:{u=278;i=v;return u|0}case 72:{u=279;i=v;return u|0}case 73:{e=c[10491]|0;j=f1(e)|0;if((j|0)>=0){h=0;g=0;while(1){f=a[e+h>>0]|0;l:do if(f<<24>>24==92){f=h+1|0;switch(a[e+f>>0]|0){case 34:{f=h;break l}case 92:{a[e+g>>0]=92;g=g+1|0;break l}default:{a[e+g>>0]=92;f=h;g=g+1|0;break l}}}else{a[e+g>>0]=f;f=h;g=g+1|0}while(0);if((f|0)<(j|0))h=f+1|0;else break}e=c[10491]|0}f=f1(e)|0;if((f|0)>0){g=0;do{u=g;g=g+1|0;a[e+u>>0]=a[e+g>>0]|0}while((g|0)!=(f|0))}a[e+(f+-2)>>0]=0;u=290;i=v;return u|0}case 84:{c[t>>2]=c[10491];N0(77140,t)|0;u=291;i=v;return u|0}case 86:{u=0;i=v;return u|0}case 109:{zT(77166);break}case 120:{c[e>>2]=0;zT(77222);break}case 122:{zT(77222);break}case 131:{zT(77266);break}case 136:{zT(77266);break}case 147:{zT(77295);break}case 171:{zT(77341);break}case 172:{u=258;i=v;return u|0}case 173:{u=259;i=v;return u|0}case 174:{u=260;i=v;return u|0}case 175:{u=261;i=v;return u|0}case 176:{i=v;return e|0}}return 0}function tT(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0;i=w1(48)|0;if(!i)zT(77392);c[i+12>>2]=d;d=w1(d+2|0)|0;c[i+4>>2]=d;if(!d)zT(77392);c[i+20>>2]=1;h=M$()|0;g=c[h>>2]|0;c[i+16>>2]=0;a[d>>0]=0;a[d+1>>0]=0;c[i+8>>2]=d;c[i+28>>2]=1;c[i+44>>2]=0;d=c[10497]|0;e=(d|0)==0;if(e)f=0;else f=c[d+(c[10498]<<2)>>2]|0;if((f|0)==(i|0)){j=d+(c[10498]<<2)|0;f=c[j>>2]|0;c[10500]=c[f+16>>2];f=c[f+8>>2]|0;c[10501]=f;c[10491]=f;c[10488]=c[c[j>>2]>>2];a[77139]=a[f>>0]|0}c[i>>2]=b;c[i+40>>2]=1;if(e)d=0;else d=c[d+(c[10498]<<2)>>2]|0;if((d|0)==(i|0)){j=i+24|0;c[j>>2]=0;c[h>>2]=g;return i|0}c[i+32>>2]=1;c[i+36>>2]=0;j=i+24|0;c[j>>2]=0;c[h>>2]=g;return i|0}function uT(b){b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0;d=c[10497]|0;do if(!d){d=w1(4)|0;c[10497]=d;if(!d)zT(77085);else{c[d>>2]=0;c[10499]=1;c[10498]=0;j=10;break}}else{e=c[10498]|0;if(!(c[d+(e<<2)>>2]|0)){f=c[10499]|0;if(e>>>0>=(f+-1|0)>>>0){e=f+8|0;d=z1(d,e<<2)|0;c[10497]=d;if(!d)zT(77085);else{j=d+(c[10499]<<2)|0;c[j>>2]=0;c[j+4>>2]=0;c[j+8>>2]=0;c[j+12>>2]=0;c[j+16>>2]=0;c[j+20>>2]=0;c[j+24>>2]=0;c[j+28>>2]=0;c[10499]=e;j=10;break}}else j=10}else j=12}while(0);if((j|0)==10){d=tT(c[10488]|0,16384)|0;e=c[10498]|0;c[(c[10497]|0)+(e<<2)>>2]=d;d=c[10497]|0;if(!d){h=M$()|0;i=0;g=c[h>>2]|0}else j=12}if((j|0)==12){d=c[d+(e<<2)>>2]|0;h=M$()|0;g=c[h>>2]|0;if(d){c[d+16>>2]=0;e=d+4|0;a[c[e>>2]>>0]=0;a[(c[e>>2]|0)+1>>0]=0;c[d+8>>2]=c[e>>2];c[d+28>>2]=1;c[d+44>>2]=0;e=c[10497]|0;if(!e)f=0;else f=c[e+(c[10498]<<2)>>2]|0;if((f|0)==(d|0)){j=e+(c[10498]<<2)|0;i=c[j>>2]|0;c[10500]=c[i+16>>2];i=c[i+8>>2]|0;c[10501]=i;c[10491]=i;c[10488]=c[c[j>>2]>>2];a[77139]=a[i>>0]|0;i=d}else i=d}else i=0}c[i>>2]=b;c[i+40>>2]=1;d=c[10497]|0;if(!d)e=0;else e=c[d+(c[10498]<<2)>>2]|0;if((e|0)==(i|0)){j=i+24|0;c[j>>2]=0;c[h>>2]=g;j=c[10498]|0;j=d+(j<<2)|0;b=c[j>>2]|0;i=b+16|0;i=c[i>>2]|0;c[10500]=i;b=b+8|0;b=c[b>>2]|0;c[10501]=b;c[10491]=b;j=c[j>>2]|0;j=c[j>>2]|0;c[10488]=j;b=a[b>>0]|0;a[77139]=b;return}c[i+32>>2]=1;c[i+36>>2]=0;j=i+24|0;c[j>>2]=0;c[h>>2]=g;j=c[10498]|0;j=d+(j<<2)|0;b=c[j>>2]|0;i=b+16|0;i=c[i>>2]|0;c[10500]=i;b=b+8|0;b=c[b>>2]|0;c[10501]=b;c[10491]=b;j=c[j>>2]|0;j=c[j>>2]|0;c[10488]=j;b=a[b>>0]|0;a[77139]=b;return}function vT(b){b=b|0;var d=0,e=0,f=0,g=0;f=c[10497]|0;do if(!f){e=w1(4)|0;c[10497]=e;if(!e)zT(77085);else{c[e>>2]=0;c[10499]=1;c[10498]=0;d=e;break}}else{e=c[10499]|0;if((c[10498]|0)>>>0>=(e+-1|0)>>>0){g=e+8|0;e=z1(f,g<<2)|0;c[10497]=e;if(!e)zT(77085);else{d=e+(c[10499]<<2)|0;c[d>>2]=0;c[d+4>>2]=0;c[d+8>>2]=0;c[d+12>>2]=0;c[d+16>>2]=0;c[d+20>>2]=0;c[d+24>>2]=0;c[d+28>>2]=0;c[10499]=g;d=e;break}}else d=f}while(0);if((c[d+(c[10498]<<2)>>2]|0)==(b|0))return;if(c[d+(c[10498]<<2)>>2]|0){a[c[10501]>>0]=a[77139]|0;g=c[10498]|0;c[(c[(c[10497]|0)+(g<<2)>>2]|0)+8>>2]=c[10501];d=c[10497]|0;c[(c[d+(g<<2)>>2]|0)+16>>2]=c[10500]}g=c[10498]|0;c[d+(g<<2)>>2]=b;g=(c[10497]|0)+(g<<2)|0;b=c[g>>2]|0;c[10500]=c[b+16>>2];b=c[b+8>>2]|0;c[10501]=b;c[10491]=b;c[10488]=c[c[g>>2]>>2];a[77139]=a[b>>0]|0;return}function wT(b,d){b=b|0;d=d|0;var e=0;e=w1(d+2|0)|0;if(!e)zT(77488);if(d){Rba(e|0,b|0,d|0)|0;a[e+(d+1)>>0]=0;a[e+d>>0]=0;if(d>>>0>4294967293)zT(77534)}else{a[e+(d+1)>>0]=0;a[e+d>>0]=0}b=w1(48)|0;if(!b)zT(77441);else{c[b+12>>2]=d;c[b+4>>2]=e;c[b+8>>2]=e;e=b+20|0;c[e>>2]=0;c[b>>2]=0;c[b+16>>2]=d;c[b+24>>2]=0;c[b+28>>2]=1;c[b+40>>2]=0;c[b+44>>2]=0;vT(b);c[e>>2]=1;return b|0}return 0}function xT(){var e=0,f=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,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.0;ga=i;i=i+1248|0;fa=ga+848|0;f=ga+48|0;B=ga+36|0;C=ga+24|0;L=ga+12|0;P=ga;c[10494]=0;c[10492]=-2;A=0;j=fa;e=fa;m=200;l=0;p=f;a:while(1){b[e>>1]=l;if((j+(m+-1<<1)|0)>>>0<=e>>>0){o=e-j>>1;e=o+1|0;if(m>>>0>9999){ea=423;break}m=m<<1;m=m>>>0>1e4?1e4:m;f=w1(m*6|3)|0;if(!f){ea=423;break}Rba(f|0,j|0,e<<1|0)|0;n=f+((m>>>1&1073741823)<<2)|0;Rba(n|0,p|0,e<<2|0)|0;if((j|0)!=(fa|0))x1(j);if((m+-1|0)>(o|0)){j=f;e=f+(o<<1)|0;y=m;z=n;x=n+(o<<2)|0}else{h=1;$=f;break}}else{y=m;z=p;x=f}if((l|0)==10){h=0;e=j;ea=430;break}w=a[77569+l>>0]|0;n=w<<24>>24;do if(w<<24>>24!=-68){f=c[10492]|0;if((f|0)==-2){f=sT()|0;c[10492]=f}if((f|0)>=1)if(f>>>0<292)m=d[77681+f>>0]|0;else m=2;else{c[10492]=0;m=0}f=m+n|0;if(f>>>0<=107?(a[77973+f>>0]|0)==(m|0):0){l=d[78081+f>>0]|0;if((f+-105|0)>>>0<2){w=0-l|0;ea=23;break}else{c[10492]=-2;f=x+4|0;c[f>>2]=c[10493];m=(A|0)==0?0:A+-1|0;break}}else ea=22}else ea=22;while(0);if((ea|0)==22){f=a[78189+l>>0]|0;if(!(f<<24>>24)){h=A;ea=409;break}else{w=f&255;ea=23}}do if((ea|0)==23){ea=0;l=d[78301+w>>0]|0;u=1-l|0;v=x+(u<<2)|0;f=c[v>>2]|0;do switch(w|0){case 2:{m=c[x>>2]|0;if(m){n=c[m>>2]|0;if((n|0)!=0?(s=c[(c[n>>2]|0)+-12>>2]|0,V=n+s|0,s=n+(s+4)|0,t=(c[s>>2]|0)+-1|0,c[s>>2]=t,!((V|0)==0|(t|0)!=0)):0)oc[c[(c[V>>2]|0)+4>>2]&2047](V);P_(m)}break}case 3:{f=c[10486]|0;f=rc[c[(c[f>>2]|0)+12>>2]&127](f)|0;break}case 4:{m=c[10486]|0;m=rc[c[(c[m>>2]|0)+12>>2]&127](m)|0;f=m;m=c[m>>2]|0;if(!m){ea=31;break a}q=x+-4|0;pc[c[(c[m>>2]|0)+4>>2]&1023](m,c[q>>2]|0);q=c[q>>2]|0;if(q){m=c[q>>2]|0;if(m){p=q+4|0;n=c[p>>2]|0;if((n|0)!=(m|0)){do{n=n+-4|0;c[p>>2]=n;o=c[n>>2]|0;if((o|0)!=0?(s=c[(c[o>>2]|0)+-12>>2]|0,I=o+s|0,s=o+(s+4)|0,t=(c[s>>2]|0)+-1|0,c[s>>2]=t,!((I|0)==0|(t|0)!=0)):0){oc[c[(c[I>>2]|0)+4>>2]&2047](I);n=c[p>>2]|0}}while((n|0)!=(m|0));m=c[q>>2]|0}P_(m)}P_(q)}break}case 5:{m=c[10486]|0;m=rc[c[(c[m>>2]|0)+12>>2]&127](m)|0;f=m;m=c[m>>2]|0;if(!m){ea=43;break a}pc[c[c[m>>2]>>2]&1023](m,c[x>>2]|0);m=c[x>>2]|0;if(m){n=c[m>>2]|0;if((n|0)!=0?(s=c[(c[n>>2]|0)+-12>>2]|0,J=n+s|0,s=n+(s+4)|0,t=(c[s>>2]|0)+-1|0,c[s>>2]=t,!((J|0)==0|(t|0)!=0)):0)oc[c[(c[J>>2]|0)+4>>2]&2047](J);P_(m)}break}case 6:{m=O_(12)|0;c[m>>2]=0;c[m+4>>2]=0;c[m+8>>2]=0;f=m;he(m,c[x>>2]|0);m=c[x>>2]|0;if(m){n=c[m>>2]|0;if((n|0)!=0?(s=c[(c[n>>2]|0)+-12>>2]|0,K=n+s|0,s=n+(s+4)|0,t=(c[s>>2]|0)+-1|0,c[s>>2]=t,!((K|0)==0|(t|0)!=0)):0)oc[c[(c[K>>2]|0)+4>>2]&2047](K);P_(m)}break}case 7:{m=c[x+-8>>2]|0;f=m;n=c[x>>2]|0;o=m+4|0;p=c[o>>2]|0;if((p|0)==(c[m+8>>2]|0))he(m,n);else{m=c[n>>2]|0;c[p>>2]=m;if((m|0)!=0?(s=m+((c[(c[m>>2]|0)+-12>>2]|0)+4)|0,t=(c[s>>2]|0)+1|0,c[s>>2]=t,(t|0)==0):0){ea=57;break a}c[o>>2]=p+4}m=c[x>>2]|0;if(m){n=c[m>>2]|0;if((n|0)!=0?(s=c[(c[n>>2]|0)+-12>>2]|0,M=n+s|0,s=n+(s+4)|0,t=(c[s>>2]|0)+-1|0,c[s>>2]=t,!((M|0)==0|(t|0)!=0)):0)oc[c[(c[M>>2]|0)+4>>2]&2047](M);P_(m)}break}case 8:{m=c[10486]|0;m=rc[c[(c[m>>2]|0)+16>>2]&127](m)|0;f=m;m=c[m>>2]|0;if(!m){ea=66;break a}q=x+-4|0;pc[c[(c[m>>2]|0)+4>>2]&1023](m,c[q>>2]|0);q=c[q>>2]|0;if(q){m=c[q>>2]|0;if(m){p=q+4|0;n=c[p>>2]|0;if((n|0)!=(m|0)){do{n=n+-4|0;c[p>>2]=n;o=c[n>>2]|0;if((o|0)!=0?(s=c[(c[o>>2]|0)+-12>>2]|0,N=o+s|0,s=o+(s+4)|0,t=(c[s>>2]|0)+-1|0,c[s>>2]=t,!((N|0)==0|(t|0)!=0)):0){oc[c[(c[N>>2]|0)+4>>2]&2047](N);n=c[p>>2]|0}}while((n|0)!=(m|0));m=c[q>>2]|0}P_(m)}P_(q)}break}case 9:{f=O_(12)|0;c[f>>2]=0;c[f+4>>2]=0;c[f+8>>2]=0;break}case 10:{m=c[x+-4>>2]|0;f=m;n=c[x>>2]|0;o=m+4|0;p=c[o>>2]|0;if((p|0)==(c[m+8>>2]|0))he(m,n);else{m=c[n>>2]|0;c[p>>2]=m;if((m|0)!=0?(s=m+((c[(c[m>>2]|0)+-12>>2]|0)+4)|0,t=(c[s>>2]|0)+1|0,c[s>>2]=t,(t|0)==0):0){ea=81;break a}c[o>>2]=p+4}m=c[x>>2]|0;if(m){n=c[m>>2]|0;if((n|0)!=0?(s=c[(c[n>>2]|0)+-12>>2]|0,O=n+s|0,s=n+(s+4)|0,t=(c[s>>2]|0)+-1|0,c[s>>2]=t,!((O|0)==0|(t|0)!=0)):0)oc[c[(c[O>>2]|0)+4>>2]&2047](O);P_(m)}break}case 11:{m=c[x+-4>>2]|0;f=m;n=c[x>>2]|0;o=m+4|0;p=c[o>>2]|0;if((p|0)==(c[m+8>>2]|0))he(m,n);else{m=c[n>>2]|0;c[p>>2]=m;if((m|0)!=0?(s=m+((c[(c[m>>2]|0)+-12>>2]|0)+4)|0,t=(c[s>>2]|0)+1|0,c[s>>2]=t,(t|0)==0):0){ea=92;break a}c[o>>2]=p+4}m=c[x>>2]|0;if(m){n=c[m>>2]|0;if((n|0)!=0?(s=c[(c[n>>2]|0)+-12>>2]|0,Q=n+s|0,s=n+(s+4)|0,t=(c[s>>2]|0)+-1|0,c[s>>2]=t,!((Q|0)==0|(t|0)!=0)):0)oc[c[(c[Q>>2]|0)+4>>2]&2047](Q);P_(m)}break}case 12:{m=c[x+-4>>2]|0;f=m;n=c[x>>2]|0;o=m+4|0;p=c[o>>2]|0;if((p|0)==(c[m+8>>2]|0))he(m,n);else{m=c[n>>2]|0;c[p>>2]=m;if((m|0)!=0?(s=m+((c[(c[m>>2]|0)+-12>>2]|0)+4)|0,t=(c[s>>2]|0)+1|0,c[s>>2]=t,(t|0)==0):0){ea=103;break a}c[o>>2]=p+4}m=c[x>>2]|0;if(m){n=c[m>>2]|0;if((n|0)!=0?(s=c[(c[n>>2]|0)+-12>>2]|0,R=n+s|0,s=n+(s+4)|0,t=(c[s>>2]|0)+-1|0,c[s>>2]=t,!((R|0)==0|(t|0)!=0)):0)oc[c[(c[R>>2]|0)+4>>2]&2047](R);P_(m)}break}case 13:{f=c[x>>2]|0;break}case 14:{f=c[x>>2]|0;break}case 15:{f=c[x>>2]|0;break}case 16:{m=c[x+-12>>2]|0;f=m;m=c[m>>2]|0;if(!m){ea=115;break a}q=x+-4|0;hd(m,c[q>>2]|0)|0;q=c[q>>2]|0;if(q){m=c[q>>2]|0;if(m){p=q+4|0;n=c[p>>2]|0;if((n|0)!=(m|0)){do{n=n+-4|0;c[p>>2]=n;o=c[n>>2]|0;if((o|0)!=0?(s=o+4|0,t=(c[s>>2]|0)+-1|0,c[s>>2]=t,(t|0)==0):0){oc[c[(c[o>>2]|0)+4>>2]&2047](o);n=c[p>>2]|0}}while((n|0)!=(m|0));m=c[q>>2]|0}P_(m)}P_(q)}break}case 17:{m=c[x+-12>>2]|0;f=m;m=c[m>>2]|0;if(!m){ea=127;break a}q=x+-4|0;pc[c[(c[m>>2]|0)+4>>2]&1023](m,c[q>>2]|0);q=c[q>>2]|0;if(q){m=c[q>>2]|0;if(m){p=q+4|0;n=c[p>>2]|0;if((n|0)!=(m|0)){do{n=n+-4|0;c[p>>2]=n;o=c[n>>2]|0;if((o|0)!=0?(s=c[(c[o>>2]|0)+-12>>2]|0,S=o+s|0,s=o+(s+4)|0,t=(c[s>>2]|0)+-1|0,c[s>>2]=t,!((S|0)==0|(t|0)!=0)):0){oc[c[(c[S>>2]|0)+4>>2]&2047](S);n=c[p>>2]|0}}while((n|0)!=(m|0));m=c[q>>2]|0}P_(m)}P_(q)}break}case 18:{f=O_(12)|0;t=c[10491]|0;l2(f,t,f1(t)|0);break}case 19:{f=c[10486]|0;f=tc[c[(c[f>>2]|0)+32>>2]&63](f,c[x>>2]|0,0)|0;m=c[x>>2]|0;if(m){o2(m);P_(m)}if(!f){ea=142;break a}break}case 20:{f=c[10486]|0;m=x+-8|0;f=tc[c[(c[f>>2]|0)+32>>2]&63](f,c[m>>2]|0,a[x+-4>>0]|0)|0;m=c[m>>2]|0;if(m){o2(m);P_(m)}if(!f){ea=152;break a}break}case 21:{f=c[10486]|0;t=c[(c[f>>2]|0)+32>>2]|0;l2(B,78390,3);f=tc[t&63](f,B,0)|0;o2(B);break}case 22:{f=c[10486]|0;f=zc[c[(c[f>>2]|0)+36>>2]&255](f,c[x>>2]|0)|0;break}case 23:{f=c[10486]|0;f=yc[c[(c[f>>2]|0)+40>>2]&1](f,+g[x>>2])|0;break}case 24:{f=c[10486]|0;f=zc[c[(c[f>>2]|0)+36>>2]&255](f,c[x+-4>>2]|0)|0;m=c[f>>2]|0;if(!m){ea=163;break a}t=c[10491]|0;l2(C,t,f1(t)|0);Sc(m,C);o2(C);break}case 25:{f=c[10486]|0;f=yc[c[(c[f>>2]|0)+40>>2]&1](f,+g[x+-4>>2])|0;m=c[f>>2]|0;if(!m){ea=166;break a}t=c[10491]|0;l2(L,t,f1(t)|0);Sc(m,L);o2(L);break}case 26:{f=c[10486]|0;t=c[(c[f>>2]|0)+44>>2]|0;s=c[10491]|0;l2(P,s,f1(s)|0);f=tc[t&63](f,P,1)|0;o2(P);break}case 27:{f=c[10486]|0;f=tc[c[(c[f>>2]|0)+44>>2]&63](f,c[x>>2]|0,0)|0;m=c[x>>2]|0;if(m){o2(m);P_(m)}break}case 28:{f=c[x>>2]|0;break}case 29:{m=c[x>>2]|0;f=m;m=c[m>>2]|0;if(!m){ea=173;break a}t=x+-8|0;Rc(m,c[t>>2]|0);m=c[t>>2]|0;if(m){o2(m);P_(m)}break}case 30:{m=O_(12)|0;c[m>>2]=0;c[m+4>>2]=0;c[m+8>>2]=0;f=m;ae(m,c[x>>2]|0);m=c[x>>2]|0;if(m){n=c[m>>2]|0;if((n|0)!=0?(s=n+4|0,t=(c[s>>2]|0)+-1|0,c[s>>2]=t,(t|0)==0):0)oc[c[(c[n>>2]|0)+4>>2]&2047](n);P_(m)}break}case 31:{m=c[x+-8>>2]|0;f=m;n=c[x>>2]|0;o=m+4|0;p=c[o>>2]|0;if((p|0)==(c[m+8>>2]|0))ae(m,n);else{m=c[n>>2]|0;c[p>>2]=m;if((m|0)!=0?(s=m+4|0,t=(c[s>>2]|0)+1|0,c[s>>2]=t,(t|0)==0):0){ea=184;break a}c[o>>2]=p+4}m=c[x>>2]|0;if(m){n=c[m>>2]|0;if((n|0)!=0?(s=n+4|0,t=(c[s>>2]|0)+-1|0,c[s>>2]=t,(t|0)==0):0)oc[c[(c[n>>2]|0)+4>>2]&2047](n);P_(m)}break}case 32:{m=c[10486]|0;m=rc[c[(c[m>>2]|0)+20>>2]&127](m)|0;f=m;m=c[m>>2]|0;if(!m){ea=193;break a}q=x+-4|0;pc[c[(c[m>>2]|0)+4>>2]&1023](m,c[q>>2]|0);q=c[q>>2]|0;if(q){m=c[q>>2]|0;if(m){p=q+4|0;n=c[p>>2]|0;if((n|0)!=(m|0)){do{n=n+-4|0;c[p>>2]=n;o=c[n>>2]|0;if((o|0)!=0?(s=c[(c[o>>2]|0)+-12>>2]|0,T=o+s|0,s=o+(s+4)|0,t=(c[s>>2]|0)+-1|0,c[s>>2]=t,!((T|0)==0|(t|0)!=0)):0){oc[c[(c[T>>2]|0)+4>>2]&2047](T);n=c[p>>2]|0}}while((n|0)!=(m|0));m=c[q>>2]|0}P_(m)}P_(q)}break}case 33:{q=O_(12)|0;c[q>>2]=0;r=q+4|0;c[r>>2]=0;s=q+8|0;c[s>>2]=0;f=q;m=c[x>>2]|0;n=c[m>>2]|0;t=m+4|0;if((n|0)==(c[t>>2]|0))q=m;else{p=0;o=0;while(1){if((p|0)==(o|0))he(q,n);else{m=c[n>>2]|0;c[p>>2]=m;if((m|0)!=0?(m=m+((c[(c[m>>2]|0)+-12>>2]|0)+4)|0,o=(c[m>>2]|0)+1|0,c[m>>2]=o,(o|0)==0):0){ea=209;break a}c[r>>2]=p+4}m=n+4|0;if((m|0)==(c[t>>2]|0))break;p=c[r>>2]|0;o=c[s>>2]|0;n=m}q=c[x>>2]|0}if(q){m=c[q>>2]|0;if(m){p=q+4|0;n=c[p>>2]|0;if((n|0)!=(m|0)){do{n=n+-4|0;c[p>>2]=n;o=c[n>>2]|0;if((o|0)!=0?(s=c[(c[o>>2]|0)+-12>>2]|0,U=o+s|0,s=o+(s+4)|0,t=(c[s>>2]|0)+-1|0,c[s>>2]=t,!((U|0)==0|(t|0)!=0)):0){oc[c[(c[U>>2]|0)+4>>2]&2047](U);n=c[p>>2]|0}}while((n|0)!=(m|0));m=c[q>>2]|0}P_(m)}P_(q)}break}case 34:{r=c[x+-8>>2]|0;f=r;m=c[x>>2]|0;n=c[m>>2]|0;s=m+4|0;if((n|0)==(c[s>>2]|0))q=m;else{p=r+4|0;q=r+8|0;do{m=c[p>>2]|0;if((m|0)==(c[q>>2]|0))he(r,n);else{o=c[n>>2]|0;c[m>>2]=o;if((o|0)!=0?(o=o+((c[(c[o>>2]|0)+-12>>2]|0)+4)|0,t=(c[o>>2]|0)+1|0,c[o>>2]=t,(t|0)==0):0){ea=230;break a}c[p>>2]=m+4}n=n+4|0}while((n|0)!=(c[s>>2]|0));q=c[x>>2]|0}if(q){m=c[q>>2]|0;if(m){p=q+4|0;n=c[p>>2]|0;if((n|0)!=(m|0)){do{n=n+-4|0;c[p>>2]=n;o=c[n>>2]|0;if((o|0)!=0?(s=c[(c[o>>2]|0)+-12>>2]|0,W=o+s|0,s=o+(s+4)|0,t=(c[s>>2]|0)+-1|0,c[s>>2]=t,!((W|0)==0|(t|0)!=0)):0){oc[c[(c[W>>2]|0)+4>>2]&2047](W);n=c[p>>2]|0}}while((n|0)!=(m|0));m=c[q>>2]|0}P_(m)}P_(q)}break}case 35:{f=c[x>>2]|0;break}case 36:{r=c[x+-4>>2]|0;f=r;m=c[x>>2]|0;n=c[m>>2]|0;s=m+4|0;if((n|0)==(c[s>>2]|0))q=m;else{p=r+4|0;q=r+8|0;do{m=c[p>>2]|0;if((m|0)==(c[q>>2]|0))he(r,n);else{o=c[n>>2]|0;c[m>>2]=o;if((o|0)!=0?(o=o+((c[(c[o>>2]|0)+-12>>2]|0)+4)|0,t=(c[o>>2]|0)+1|0,c[o>>2]=t,(t|0)==0):0){ea=251;break a}c[p>>2]=m+4}n=n+4|0}while((n|0)!=(c[s>>2]|0));q=c[x>>2]|0}if(q){m=c[q>>2]|0;if(m){p=q+4|0;n=c[p>>2]|0;if((n|0)!=(m|0)){do{n=n+-4|0;c[p>>2]=n;o=c[n>>2]|0;if((o|0)!=0?(s=c[(c[o>>2]|0)+-12>>2]|0,X=o+s|0,s=o+(s+4)|0,t=(c[s>>2]|0)+-1|0,c[s>>2]=t,!((X|0)==0|(t|0)!=0)):0){oc[c[(c[X>>2]|0)+4>>2]&2047](X);n=c[p>>2]|0}}while((n|0)!=(m|0));m=c[q>>2]|0}P_(m)}P_(q)}break}case 37:{r=c[x+-4>>2]|0;f=r;m=c[x>>2]|0;n=c[m>>2]|0;s=m+4|0;if((n|0)==(c[s>>2]|0))q=m;else{p=r+4|0;q=r+8|0;do{m=c[p>>2]|0;if((m|0)==(c[q>>2]|0))he(r,n);else{o=c[n>>2]|0;c[m>>2]=o;if((o|0)!=0?(o=o+((c[(c[o>>2]|0)+-12>>2]|0)+4)|0,t=(c[o>>2]|0)+1|0,c[o>>2]=t,(t|0)==0):0){ea=271;break a}c[p>>2]=m+4}n=n+4|0}while((n|0)!=(c[s>>2]|0));q=c[x>>2]|0}if(q){m=c[q>>2]|0;if(m){p=q+4|0;n=c[p>>2]|0;if((n|0)!=(m|0)){do{n=n+-4|0;c[p>>2]=n;o=c[n>>2]|0;if((o|0)!=0?(s=c[(c[o>>2]|0)+-12>>2]|0,Y=o+s|0,s=o+(s+4)|0,t=(c[s>>2]|0)+-1|0,c[s>>2]=t,!((Y|0)==0|(t|0)!=0)):0){oc[c[(c[Y>>2]|0)+4>>2]&2047](Y);n=c[p>>2]|0}}while((n|0)!=(m|0));m=c[q>>2]|0}P_(m)}P_(q)}break}case 38:{t=c[x+-8>>2]|0;f=t;r=x+-4|0;m=c[r>>2]|0;n=c[m>>2]|0;s=m+4|0;if((n|0)==(c[s>>2]|0))q=m;else{p=t+4|0;q=t+8|0;do{m=c[p>>2]|0;if((m|0)==(c[q>>2]|0))he(t,n);else{o=c[n>>2]|0;c[m>>2]=o;if((o|0)!=0?(ha=o+((c[(c[o>>2]|0)+-12>>2]|0)+4)|0,o=(c[ha>>2]|0)+1|0,c[ha>>2]=o,(o|0)==0):0){ea=291;break a}c[p>>2]=m+4}n=n+4|0}while((n|0)!=(c[s>>2]|0));q=c[r>>2]|0}if(q){m=c[q>>2]|0;if(m){p=q+4|0;n=c[p>>2]|0;if((n|0)!=(m|0)){do{n=n+-4|0;c[p>>2]=n;o=c[n>>2]|0;if((o|0)!=0?(s=c[(c[o>>2]|0)+-12>>2]|0,Z=o+s|0,s=o+(s+4)|0,ha=(c[s>>2]|0)+-1|0,c[s>>2]=ha,!((Z|0)==0|(ha|0)!=0)):0){oc[c[(c[Z>>2]|0)+4>>2]&2047](Z);n=c[p>>2]|0}}while((n|0)!=(m|0));m=c[q>>2]|0}P_(m)}P_(q)}m=c[x>>2]|0;n=c[m>>2]|0;r=m+4|0;if((n|0)==(c[r>>2]|0))q=m;else{p=t+4|0;q=t+8|0;do{m=c[p>>2]|0;if((m|0)==(c[q>>2]|0))he(t,n);else{o=c[n>>2]|0;c[m>>2]=o;if((o|0)!=0?(s=o+((c[(c[o>>2]|0)+-12>>2]|0)+4)|0,ha=(c[s>>2]|0)+1|0,c[s>>2]=ha,(ha|0)==0):0){ea=311;break a}c[p>>2]=m+4}n=n+4|0}while((n|0)!=(c[r>>2]|0));q=c[x>>2]|0}if(q){m=c[q>>2]|0;if(m){p=q+4|0;n=c[p>>2]|0;if((n|0)!=(m|0)){do{n=n+-4|0;c[p>>2]=n;o=c[n>>2]|0;if((o|0)!=0?(t=c[(c[o>>2]|0)+-12>>2]|0,_=o+t|0,t=o+(t+4)|0,ha=(c[t>>2]|0)+-1|0,c[t>>2]=ha,!((_|0)==0|(ha|0)!=0)):0){oc[c[(c[_>>2]|0)+4>>2]&2047](_);n=c[p>>2]|0}}while((n|0)!=(m|0));m=c[q>>2]|0}P_(m)}P_(q)}break}case 39:{m=O_(12)|0;c[m>>2]=0;c[m+4>>2]=0;c[m+8>>2]=0;f=m;he(m,c[x>>2]|0);m=c[x>>2]|0;if(m){n=c[m>>2]|0;if((n|0)!=0?(t=c[(c[n>>2]|0)+-12>>2]|0,D=n+t|0,t=n+(t+4)|0,ha=(c[t>>2]|0)+-1|0,c[t>>2]=ha,!((D|0)==0|(ha|0)!=0)):0)oc[c[(c[D>>2]|0)+4>>2]&2047](D);P_(m)}break}case 40:{m=O_(12)|0;c[m>>2]=0;c[m+4>>2]=0;c[m+8>>2]=0;f=m;he(m,c[x>>2]|0);m=c[x>>2]|0;if(m){n=c[m>>2]|0;if((n|0)!=0?(t=c[(c[n>>2]|0)+-12>>2]|0,E=n+t|0,t=n+(t+4)|0,ha=(c[t>>2]|0)+-1|0,c[t>>2]=ha,!((E|0)==0|(ha|0)!=0)):0)oc[c[(c[E>>2]|0)+4>>2]&2047](E);P_(m)}break}case 41:{f=c[x+-12>>2]|0;q=f;f=c[f>>2]|0;if(!f){ea=337;break a}p=x+-4|0;pc[c[(c[f>>2]|0)+4>>2]&1023](f,c[p>>2]|0);p=c[p>>2]|0;if(!p)f=q;else{f=c[p>>2]|0;if(f){o=p+4|0;m=c[o>>2]|0;if((m|0)!=(f|0)){do{m=m+-4|0;c[o>>2]=m;n=c[m>>2]|0;if((n|0)!=0?(t=c[(c[n>>2]|0)+-12>>2]|0,F=n+t|0,t=n+(t+4)|0,ha=(c[t>>2]|0)+-1|0,c[t>>2]=ha,!((F|0)==0|(ha|0)!=0)):0){oc[c[(c[F>>2]|0)+4>>2]&2047](F);m=c[o>>2]|0}}while((m|0)!=(f|0));f=c[p>>2]|0}P_(f)}P_(p);f=q}break}case 42:{m=O_(12)|0;c[m>>2]=0;c[m+4>>2]=0;c[m+8>>2]=0;f=m;he(m,c[x>>2]|0);m=c[x>>2]|0;if(m){n=c[m>>2]|0;if((n|0)!=0?(t=c[(c[n>>2]|0)+-12>>2]|0,G=n+t|0,t=n+(t+4)|0,ha=(c[t>>2]|0)+-1|0,c[t>>2]=ha,!((G|0)==0|(ha|0)!=0)):0)oc[c[(c[G>>2]|0)+4>>2]&2047](G);P_(m)}break}case 43:{m=c[x+-4>>2]|0;f=m;n=c[x>>2]|0;o=m+4|0;p=c[o>>2]|0;if((p|0)==(c[m+8>>2]|0))he(m,n);else{m=c[n>>2]|0;c[p>>2]=m;if((m|0)!=0?(t=m+((c[(c[m>>2]|0)+-12>>2]|0)+4)|0,ha=(c[t>>2]|0)+1|0,c[t>>2]=ha,(ha|0)==0):0){ea=356;break a}c[o>>2]=p+4}m=c[x>>2]|0;if(m){n=c[m>>2]|0;if((n|0)!=0?(t=c[(c[n>>2]|0)+-12>>2]|0,H=n+t|0,t=n+(t+4)|0,ha=(c[t>>2]|0)+-1|0,c[t>>2]=ha,!((H|0)==0|(ha|0)!=0)):0)oc[c[(c[H>>2]|0)+4>>2]&2047](H);P_(m)}break}case 44:{f=c[x>>2]|0;break}case 45:{f=c[x>>2]|0;break}case 46:{f=c[10486]|0;m=x+-4|0;f=tc[c[(c[f>>2]|0)+24>>2]&63](f,c[m>>2]|0,c[x>>2]|0)|0;m=c[m>>2]|0;if(m)P_(m);break}case 47:{f=c[10486]|0;m=x+-4|0;f=tc[c[(c[f>>2]|0)+24>>2]&63](f,c[m>>2]|0,c[x>>2]|0)|0;m=c[m>>2]|0;if(m)P_(m);break}case 48:{f=c[10486]|0;n=x+-12|0;m=x+-4|0;f=qc[c[(c[f>>2]|0)+28>>2]&63](f,c[n>>2]|0,0,c[x+-8>>2]|0,c[m>>2]|0,c[x>>2]|0)|0;n=c[n>>2]|0;if(n){o2(n);P_(n)}m=c[m>>2]|0;if(m)P_(m);break}case 49:{f=c[10486]|0;n=x+-16|0;m=x+-4|0;f=qc[c[(c[f>>2]|0)+28>>2]&63](f,c[n>>2]|0,c[x+-12>>2]|0,c[x+-8>>2]|0,c[m>>2]|0,c[x>>2]|0)|0;n=c[n>>2]|0;if(n){o2(n);P_(n)}m=c[m>>2]|0;if(m)P_(m);break}case 50:{f=c[x>>2]|0;break}case 51:{f=c[x+-12>>2]|0;break}case 52:{f=O_(12)|0;ha=c[10491]|0;l2(f,ha,f1(ha)|0);break}case 53:{f=O_(12)|0;ha=c[10491]|0;l2(f,ha,f1(ha)|0);break}case 54:{f=O_(12)|0;ha=c[10491]|0;l2(f,ha,f1(ha)|0);break}case 55:{f=O_(12)|0;ha=c[10491]|0;l2(f,ha,f1(ha)|0);break}case 56:{f=c[x>>2]|0;break}case 57:{f=(c[x>>2]|0)+(c[x+-4>>2]|0)|0;break}case 58:{f=1;break}case 59:{f=-1;break}case 60:{f=-1e3;break}case 61:{f=c[x>>2]|0;break}case 62:{f=O_(8)|0;kM(f,-1,1);break}case 63:{f=O_(8)|0;kM(f,c[x+-8>>2]|0,c[x>>2]|0);break}case 64:{f=O_(8)|0;kM(f,c[x>>2]|0,1);break}case 65:{f=O_(8)|0;kM(f,1,c[x>>2]|0);break}case 66:{f=0;break}case 67:{f=1;break}case 68:{f=2;break}case 69:{f=O_(12)|0;ha=c[10491]|0;l2(f,ha,f1(ha)|0);break}case 70:{f=Y0(c[10491]|0)|0;break}case 71:{f=Y0(c[10491]|0)|0;break}case 72:{f=Y0(c[10491]|0)|0;break}case 73:{ia=+W0(c[10491]|0);f=(g[k>>2]=ia,c[k>>2]|0);break}case 74:{f=c[x>>2]|0;break}case 75:{f=c[x>>2]|0;break}case 76:{f=c[x>>2]|0;break}default:{}}while(0);e=e+(0-l<<1)|0;n=x+(u<<2)|0;c[v>>2]=f;f=(d[78394+w>>0]|0)+-37|0;ha=b[e>>1]|0;l=ha+(a[78471+f>>0]|0)|0;if(l>>>0<108?(a[77973+l>>0]|0)==(ha|0):0){m=A;l=d[78081+l>>0]|0;f=n;break}m=A;l=a[78507+f>>0]|0;f=n}while(0);A=m;e=e+2|0;m=y;p=z}b:switch(ea|0){case 31:{Ha(78999,79014,102,79043);break}case 43:{Ha(78999,79014,102,79043);break}case 57:{Ha(79054,79014,48,79068);break}case 66:{Ha(78999,79014,102,79043);break}case 81:{Ha(79054,79014,48,79068);break}case 92:{Ha(79054,79014,48,79068);break}case 103:{Ha(79054,79014,48,79068);break}case 115:{Ha(78999,79014,102,79043);break}case 127:{Ha(78999,79014,102,79043);break}case 142:{f=c[10497]|0;if((f|0)!=0?(ba=c[f+(c[10498]<<2)>>2]|0,(ba|0)!=0):0){c[ba+16>>2]=0;f=ba+4|0;a[c[f>>2]>>0]=0;a[(c[f>>2]|0)+1>>0]=0;c[ba+8>>2]=c[f>>2];c[ba+28>>2]=1;c[ba+44>>2]=0;f=c[10497]|0;if(!f)h=0;else h=c[f+(c[10498]<<2)>>2]|0;if((h|0)==(ba|0)){ea=f+(c[10498]<<2)|0;ha=c[ea>>2]|0;c[10500]=c[ha+16>>2];ha=c[ha+8>>2]|0;c[10501]=ha;c[10491]=ha;c[10488]=c[c[ea>>2]>>2];a[77139]=a[ha>>0]|0}}h=c[10486]|0;tc[c[(c[h>>2]|0)+48>>2]&63](h,78378,c[10490]|0)|0;h=l;f=j;ea=420;break}case 152:{f=c[10497]|0;if((f|0)!=0?(ca=c[f+(c[10498]<<2)>>2]|0,(ca|0)!=0):0){c[ca+16>>2]=0;f=ca+4|0;a[c[f>>2]>>0]=0;a[(c[f>>2]|0)+1>>0]=0;c[ca+8>>2]=c[f>>2];c[ca+28>>2]=1;c[ca+44>>2]=0;f=c[10497]|0;if(!f)h=0;else h=c[f+(c[10498]<<2)>>2]|0;if((h|0)==(ca|0)){ea=f+(c[10498]<<2)|0;ha=c[ea>>2]|0;c[10500]=c[ha+16>>2];ha=c[ha+8>>2]|0;c[10501]=ha;c[10491]=ha;c[10488]=c[c[ea>>2]>>2];a[77139]=a[ha>>0]|0}}h=c[10486]|0;tc[c[(c[h>>2]|0)+48>>2]&63](h,78378,c[10490]|0)|0;h=l;f=j;ea=420;break}case 163:{Ha(78999,79014,102,79043);break}case 166:{Ha(78999,79014,102,79043);break}case 173:{Ha(78999,79014,102,79043);break}case 184:{Ha(79054,79014,48,79068);break}case 193:{Ha(78999,79014,102,79043);break}case 209:{Ha(79054,79014,48,79068);break}case 230:{Ha(79054,79014,48,79068);break}case 251:{Ha(79054,79014,48,79068);break}case 271:{Ha(79054,79014,48,79068);break}case 291:{Ha(79054,79014,48,79068);break}case 311:{Ha(79054,79014,48,79068);break}case 337:{Ha(78999,79014,102,79043);break}case 356:{Ha(79054,79014,48,79068);break}case 409:{f=c[10492]|0;switch(h|0){case 0:break;case 3:if((f|0)<1)if(!f){h=1;e=j;ea=430;break b}else{f=j;ea=421;break b}else{c[10492]=-2;f=j;ea=421;break b}default:{f=j;ea=421;break b}}c[10494]=(c[10494]|0)+1;f=c[10497]|0;if((f|0)!=0?(da=c[f+(c[10498]<<2)>>2]|0,(da|0)!=0):0){c[da+16>>2]=0;f=da+4|0;a[c[f>>2]>>0]=0;a[(c[f>>2]|0)+1>>0]=0;c[da+8>>2]=c[f>>2];c[da+28>>2]=1;c[da+44>>2]=0;f=c[10497]|0;if(!f)h=0;else h=c[f+(c[10498]<<2)>>2]|0;if((h|0)==(da|0)){ea=f+(c[10498]<<2)|0;ha=c[ea>>2]|0;c[10500]=c[ha+16>>2];ha=c[ha+8>>2]|0;c[10501]=ha;c[10491]=ha;c[10488]=c[c[ea>>2]>>2];a[77139]=a[ha>>0]|0}}f=c[10486]|0;tc[c[(c[f>>2]|0)+48>>2]&63](f,78543,c[10490]|0)|0;f=j;ea=421;break}case 423:{e=c[10497]|0;if((e|0)!=0?(aa=c[e+(c[10498]<<2)>>2]|0,(aa|0)!=0):0){c[aa+16>>2]=0;e=aa+4|0;a[c[e>>2]>>0]=0;a[(c[e>>2]|0)+1>>0]=0;c[aa+8>>2]=c[e>>2];c[aa+28>>2]=1;c[aa+44>>2]=0;e=c[10497]|0;if(!e)f=0;else f=c[e+(c[10498]<<2)>>2]|0;if((f|0)==(aa|0)){ea=e+(c[10498]<<2)|0;ha=c[ea>>2]|0;c[10500]=c[ha+16>>2];ha=c[ha+8>>2]|0;c[10501]=ha;c[10491]=ha;c[10488]=c[c[ea>>2]>>2];a[77139]=a[ha>>0]|0}}h=c[10486]|0;tc[c[(c[h>>2]|0)+48>>2]&63](h,78556,c[10490]|0)|0;h=2;e=j;ea=430;break}}if((ea|0)==420){e=e+(0-h<<1)|0;ea=421}if((ea|0)==421)while(1)if((e|0)==(f|0)){h=1;e=f;ea=430;break}else e=e+-2|0;if((ea|0)==430)if((e|0)==(fa|0)){ha=h;i=ga;return ha|0}else $=e;x1($);ha=h;i=ga;return ha|0}function yT(b,d){b=b|0;d=d|0;var e=0,f=0;c[10486]=d;if(!(a[b>>0]|0)){f=0;return f|0}d=wT(b,f1(b)|0)|0;e=xT()|0;if(d){f=c[10497]|0;if(!f)b=0;else b=c[f+(c[10498]<<2)>>2]|0;if((b|0)==(d|0))c[f+(c[10498]<<2)>>2]=0;if(c[d+20>>2]|0)x1(c[d+4>>2]|0);x1(d)}c[10496]=1;f=(e|0)==0;return f|0}function zT(a){a=a|0;var b=0,d=0;b=i;i=i+16|0;d=c[11942]|0;c[b>>2]=a;H0(d,78573,b)|0;qb(2)}function AT(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0;o=i;i=i+16|0;k=o;g=c[d>>2]|0;if(!g){b=0;i=o;return b|0}d=b+(c[(c[b>>2]|0)+-16>>2]|0)|0;c[k>>2]=12880;c[k+4>>2]=d;a[k+8>>0]=0;pc[c[(c[g>>2]|0)+32>>2]&1023](g,d);d=c[g+4>>2]|0;h=g+8|0;a:do if((d|0)==(c[h>>2]|0))l=4;else{e=12880;while(1){f=rc[c[e+24>>2]&127](k)|0;e=c[k>>2]|0;if(f){j=e;break a}f=c[d>>2]|0;if(!f)break;pc[c[e+8>>2]&1023](k,f);d=d+4|0;if((d|0)==(c[h>>2]|0)){l=4;break a}e=c[k>>2]|0}Ha(78999,79014,95,78956)}while(0);if((l|0)==4)j=c[k>>2]|0;pc[c[j+16>>2]&1023](k,g);j=b+40|0;d=c[j>>2]|0;h=b+36|0;f=c[h>>2]|0;k=d+-1+f|0;e=b+24|0;g=c[e>>2]|0;k=c[(c[g+(k>>>10<<2)>>2]|0)+((k&1023)<<2)>>2]|0;do if(k){d=k+((c[(c[k>>2]|0)+-12>>2]|0)+4)|0;l=(c[d>>2]|0)+1|0;c[d>>2]=l;if(!l)Ha(79054,79014,48,79068);else{m=c[j>>2]|0;break}}else m=d;while(0);d=f+-1+m|0;d=c[(c[g+(d>>>10<<2)>>2]|0)+((d&1023)<<2)>>2]|0;if((d|0)!=0?(l=c[(c[d>>2]|0)+-12>>2]|0,n=d+l|0,l=d+(l+4)|0,m=(c[l>>2]|0)+-1|0,c[l>>2]=m,!((n|0)==0|(m|0)!=0)):0){oc[c[(c[n>>2]|0)+4>>2]&2047](n);g=c[e>>2]|0;f=c[h>>2]|0}n=c[j>>2]|0;c[j>>2]=n+-1;d=b+28|0;e=c[d>>2]|0;if((1-f-n+((e|0)==(g|0)?0:(e-g<<8)+-1|0)|0)>>>0<=2047){b=k;i=o;return b|0}P_(c[e+-4>>2]|0);c[d>>2]=(c[d>>2]|0)+-4;b=k;i=o;return b|0}function BT(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0;m=i;i=i+16|0;l=m+4|0;j=m;b=c[d>>2]|0;if(!b)Ha(78999,79014,102,79043);fd(l,b+32|0);b=c[l>>2]|0;k=l+4|0;do if((b|0)!=(c[k>>2]|0)){while(1){d=bd()|0;c[j>>2]=d;if(!d){b=6;break}h=c[b>>2]|0;if(!h){b=8;break}Rc(d,h+8|0);d=c[j>>2]|0;if(!d){b=10;break}h=c[b>>2]|0;if(!h){b=12;break}Tc(d,h+20|0,(a[h+44>>0]|0)!=0);d=c[j>>2]|0;if(!d){b=14;break}h=c[b>>2]|0;if(!h){b=16;break}Sc(d,h+32|0);d=c[e>>2]|0;if(!d){b=18;break}gd(d,j)|0;d=c[j>>2]|0;if((d|0)!=0?(n=d+4|0,h=(c[n>>2]|0)+-1|0,c[n>>2]=h,(h|0)==0):0)oc[c[(c[d>>2]|0)+4>>2]&2047](d);b=b+4|0;if((b|0)==(c[k>>2]|0)){g=b;b=23;break}}if((b|0)==6)Ha(78999,79014,102,79043);else if((b|0)==8)Ha(78999,79014,102,79043);else if((b|0)==10)Ha(78999,79014,102,79043);else if((b|0)==12)Ha(78999,79014,102,79043);else if((b|0)==14)Ha(78999,79014,102,79043);else if((b|0)==16)Ha(78999,79014,102,79043);else if((b|0)==18)Ha(78999,79014,102,79043);else if((b|0)==23){f=c[l>>2]|0;break}}else{f=b;g=b}while(0);if(!f){i=m;return}if((g|0)!=(f|0)){do{g=g+-4|0;c[k>>2]=g;b=c[g>>2]|0;if((b|0)!=0?(e=b+4|0,n=(c[e>>2]|0)+-1|0,c[e>>2]=n,(n|0)==0):0){oc[c[(c[b>>2]|0)+4>>2]&2047](b);g=c[k>>2]|0}}while((g|0)!=(f|0));f=c[l>>2]|0}P_(f);i=m;return}function CT(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0;f=c[e>>2]|0;if(!f){b=0;return b|0}g=c[d>>2]|0;if(!g)Ha(78999,79014,102,79043);ad(f,g+20|0);f=c[e>>2]|0;if(!f)Ha(78999,79014,102,79043);g=c[d>>2]|0;if(!g)Ha(78999,79014,102,79043);a[f+44>>0]=a[g+44>>0]|0;Dc[c[(c[b>>2]|0)+64>>2]&63](b,d,e);f=c[e>>2]|0;if(!f){b=0;return b|0}d=f+((c[(c[f>>2]|0)+-12>>2]|0)+4)|0;b=(c[d>>2]|0)+1|0;c[d>>2]=b;if(!b)Ha(79054,79014,48,79068);else{b=f;return b|0}return 0}function DT(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,j=0,k=0,l=0;l=i;i=i+16|0;j=l+4|0;g=l;if((a[8952]|0)==0?(Ga(8952)|0)!=0:0){$e(39720);Ta(52,39720,n|0)|0;$a(8952)}e=c[d>>2]|0;if(!e)Ha(78999,79014,102,79043);k=Ze(39720,e+20|0)|0;if(!k){i=l;return k|0}e=c[d>>2]|0;if(!e)Ha(78999,79014,102,79043);c[k+48>>2]=c[e+48>>2];c[k+52>>2]=c[e+52>>2];c[k+56>>2]=c[e+56>>2];GE(k,e+60|0)|0;e=c[d>>2]|0;c[j>>2]=e;if((e|0)!=0?(e=e+((c[(c[e>>2]|0)+-12>>2]|0)+4)|0,d=(c[e>>2]|0)+1|0,c[e>>2]=d,(d|0)==0):0)Ha(79054,79014,48,79068);c[g>>2]=k;e=k+((c[(c[k>>2]|0)+-12>>2]|0)+4)|0;d=(c[e>>2]|0)+1|0;c[e>>2]=d;if(!d)Ha(79054,79014,48,79068);e=tc[c[(c[b>>2]|0)+68>>2]&63](b,j,g)|0;if((e|0)!=0?(d=c[(c[e>>2]|0)+-12>>2]|0,f=e+d|0,d=e+(d+4)|0,b=(c[d>>2]|0)+-1|0,c[d>>2]=b,!((f|0)==0|(b|0)!=0)):0)oc[c[(c[f>>2]|0)+4>>2]&2047](f);e=c[g>>2]|0;if((e|0)!=0?(f=c[(c[e>>2]|0)+-12>>2]|0,h=e+f|0,f=e+(f+4)|0,g=(c[f>>2]|0)+-1|0,c[f>>2]=g,!((h|0)==0|(g|0)!=0)):0)oc[c[(c[h>>2]|0)+4>>2]&2047](h);e=c[j>>2]|0;if(!e){i=l;return k|0}h=c[(c[e>>2]|0)+-12>>2]|0;d=e+h|0;h=e+(h+4)|0;j=(c[h>>2]|0)+-1|0;c[h>>2]=j;if((d|0)==0|(j|0)!=0){i=l;return k|0}oc[c[(c[d>>2]|0)+4>>2]&2047](d);i=l;return k|0}function ET(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0;f=i;i=i+16|0;e=f;b=c[b>>2]|0;c[e>>2]=b;if((b|0)!=0?(g=b+((c[(c[b>>2]|0)+-12>>2]|0)+4)|0,b=(c[g>>2]|0)+1|0,c[g>>2]=b,(b|0)==0):0)Ha(79054,79014,48,79068);Dc[c[(c[a>>2]|0)+60>>2]&63](a,e,d);b=c[e>>2]|0;if(!b){i=f;return}a=c[(c[b>>2]|0)+-12>>2]|0;e=b+a|0;a=b+(a+4)|0;g=(c[a>>2]|0)+-1|0;c[a>>2]=g;if((e|0)==0|(g|0)!=0){i=f;return}oc[c[(c[e>>2]|0)+4>>2]&2047](e);i=f;return}function FT(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0;k=a+20|0;l=a+40|0;e=c[l>>2]|0;do if(e){e=e+-1+(c[a+36>>2]|0)|0;e=c[(c[(c[a+24>>2]|0)+(e>>>10<<2)>>2]|0)+((e&1023)<<2)>>2]|0;if(!e)Ha(78999,79014,102,79043);else{pc[c[c[e>>2]>>2]&1023](e,b);break}}else{i=c[a+28>>2]|0;h=a+24|0;f=c[h>>2]|0;e=a+36|0;g=c[e>>2]|0;if((((i|0)==(f|0)?0:(i-f<<8)+-1|0)|0)==(g|0)){VT(k);i=c[l>>2]|0;g=c[e>>2]|0;f=c[h>>2]|0}else i=0;h=i+g|0;e=c[b>>2]|0;c[(c[f+(h>>>10<<2)>>2]|0)+((h&1023)<<2)>>2]=e;do if(e){h=e+((c[(c[e>>2]|0)+-12>>2]|0)+4)|0;i=(c[h>>2]|0)+1|0;c[h>>2]=i;if(!i)Ha(79054,79014,48,79068);else{j=c[l>>2]|0;break}}else j=i;while(0);c[l>>2]=j+1}while(0);if(!d)return;d=c[a+28>>2]|0;i=a+24|0;f=c[i>>2]|0;h=a+36|0;e=c[h>>2]|0;g=c[l>>2]|0;if((((d|0)==(f|0)?0:(d-f<<8)+-1|0)|0)==(g+e|0)){VT(k);g=c[l>>2]|0;e=c[h>>2]|0;f=c[i>>2]|0}k=g+e|0;e=c[b>>2]|0;c[(c[f+(k>>>10<<2)>>2]|0)+((k&1023)<<2)>>2]=e;do if(e){k=e+((c[(c[e>>2]|0)+-12>>2]|0)+4)|0;b=(c[k>>2]|0)+1|0;c[k>>2]=b;if(!b)Ha(79054,79014,48,79068);else{m=c[l>>2]|0;break}}else m=g;while(0);c[l>>2]=m+1;return}function GT(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0;if((a[8952]|0)==0?(Ga(8952)|0)!=0:0){$e(39720);Ta(52,39720,n|0)|0;$a(8952)}k=We(39720)|0;j=(k|0)==0;if(!j?(h=k+((c[(c[k>>2]|0)+-12>>2]|0)+4)|0,i=(c[h>>2]|0)+1|0,c[h>>2]=i,(i|0)==0):0)Ha(79054,79014,48,79068);l=c[b+28>>2]|0;h=b+24|0;d=c[h>>2]|0;g=b+36|0;e=c[g>>2]|0;i=b+40|0;f=c[i>>2]|0;if((((l|0)==(d|0)?0:(l-d<<8)+-1|0)|0)==(f+e|0)){VT(b+20|0);f=c[i>>2]|0;e=c[g>>2]|0;d=c[h>>2]|0}l=f+e|0;c[(c[d+(l>>>10<<2)>>2]|0)+((l&1023)<<2)>>2]=k;if(j){c[i>>2]=f+1;return}j=k+((c[(c[k>>2]|0)+-12>>2]|0)+4)|0;l=(c[j>>2]|0)+1|0;c[j>>2]=l;if(!l)Ha(79054,79014,48,79068);c[i>>2]=(c[i>>2]|0)+1;j=c[(c[k>>2]|0)+-12>>2]|0;d=k+j|0;j=k+(j+4)|0;l=(c[j>>2]|0)+-1|0;c[j>>2]=l;if(!((d|0)==0|(l|0)!=0))oc[c[(c[d>>2]|0)+4>>2]&2047](d);l=c[(c[k>>2]|0)+-12>>2]|0;d=k+l|0;k=k+(l+4)|0;l=(c[k>>2]|0)+-1|0;c[k>>2]=l;if((d|0)==0|(l|0)!=0)return;oc[c[(c[d>>2]|0)+4>>2]&2047](d);return}function HT(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,j=0,k=0,l=0,m=0,o=0;o=i;i=i+16|0;m=o+8|0;h=o+4|0;j=o;if(!(rc[c[(c[b>>2]|0)+52>>2]&127](b)|0)){i=o;return}if((a[8952]|0)==0?(Ga(8952)|0)!=0:0){$e(39720);Ta(52,39720,n|0)|0;$a(8952)}e=Xe(39720)|0;c[m>>2]=e;if(e){f=e+((c[(c[e>>2]|0)+-12>>2]|0)+4)|0;g=(c[f>>2]|0)+1|0;c[f>>2]=g;if(!g)Ha(79054,79014,48,79068);g=c[(c[e>>2]|0)+-12>>2]|0;f=e+g|0;e=e+(g+4)|0;g=(c[e>>2]|0)+-1|0;c[e>>2]=g;if(!((f|0)==0|(g|0)!=0))oc[c[(c[f>>2]|0)+4>>2]&2047](f)}g=c[b>>2]|0;f=c[g+60>>2]|0;g=c[g+68>>2]|0;e=c[d>>2]|0;c[j>>2]=e;if((e|0)!=0?(e=e+((c[(c[e>>2]|0)+-12>>2]|0)+4)|0,d=(c[e>>2]|0)+1|0,c[e>>2]=d,(d|0)==0):0)Ha(79054,79014,48,79068);c[h>>2]=tc[g&63](b,j,m)|0;Dc[f&63](b,h,1);e=c[h>>2]|0;if((e|0)!=0?(h=c[(c[e>>2]|0)+-12>>2]|0,k=e+h|0,h=e+(h+4)|0,b=(c[h>>2]|0)+-1|0,c[h>>2]=b,!((k|0)==0|(b|0)!=0)):0)oc[c[(c[k>>2]|0)+4>>2]&2047](k);e=c[j>>2]|0;if((e|0)!=0?(j=c[(c[e>>2]|0)+-12>>2]|0,l=e+j|0,j=e+(j+4)|0,k=(c[j>>2]|0)+-1|0,c[j>>2]=k,!((l|0)==0|(k|0)!=0)):0)oc[c[(c[l>>2]|0)+4>>2]&2047](l);e=c[m>>2]|0;if(!e){i=o;return}l=c[(c[e>>2]|0)+-12>>2]|0;f=e+l|0;l=e+(l+4)|0;m=(c[l>>2]|0)+-1|0;c[l>>2]=m;if((f|0)==0|(m|0)!=0){i=o;return}oc[c[(c[f>>2]|0)+4>>2]&2047](f);i=o;return}function IT(a,b){a=a|0;b=b|0;HT(a+-4|0,b);return}function JT(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,j=0,k=0,l=0,m=0,o=0;o=i;i=i+16|0;m=o+8|0;h=o+4|0;j=o;if(!(rc[c[(c[b>>2]|0)+52>>2]&127](b)|0)){i=o;return}if((a[8952]|0)==0?(Ga(8952)|0)!=0:0){$e(39720);Ta(52,39720,n|0)|0;$a(8952)}e=Ye(39720)|0;c[m>>2]=e;if(e){f=e+((c[(c[e>>2]|0)+-12>>2]|0)+4)|0;g=(c[f>>2]|0)+1|0;c[f>>2]=g;if(!g)Ha(79054,79014,48,79068);g=c[(c[e>>2]|0)+-12>>2]|0;f=e+g|0;e=e+(g+4)|0;g=(c[e>>2]|0)+-1|0;c[e>>2]=g;if(!((f|0)==0|(g|0)!=0))oc[c[(c[f>>2]|0)+4>>2]&2047](f)}g=c[b>>2]|0;f=c[g+60>>2]|0;g=c[g+68>>2]|0;e=c[d>>2]|0;c[j>>2]=e;if((e|0)!=0?(e=e+((c[(c[e>>2]|0)+-12>>2]|0)+4)|0,d=(c[e>>2]|0)+1|0,c[e>>2]=d,(d|0)==0):0)Ha(79054,79014,48,79068);c[h>>2]=tc[g&63](b,j,m)|0;Dc[f&63](b,h,1);e=c[h>>2]|0;if((e|0)!=0?(h=c[(c[e>>2]|0)+-12>>2]|0,k=e+h|0,h=e+(h+4)|0,b=(c[h>>2]|0)+-1|0,c[h>>2]=b,!((k|0)==0|(b|0)!=0)):0)oc[c[(c[k>>2]|0)+4>>2]&2047](k);e=c[j>>2]|0;if((e|0)!=0?(j=c[(c[e>>2]|0)+-12>>2]|0,l=e+j|0,j=e+(j+4)|0,k=(c[j>>2]|0)+-1|0,c[j>>2]=k,!((l|0)==0|(k|0)!=0)):0)oc[c[(c[l>>2]|0)+4>>2]&2047](l);e=c[m>>2]|0;if(!e){i=o;return}l=c[(c[e>>2]|0)+-12>>2]|0;f=e+l|0;l=e+(l+4)|0;m=(c[l>>2]|0)+-1|0;c[l>>2]=m;if((f|0)==0|(m|0)!=0){i=o;return}oc[c[(c[f>>2]|0)+4>>2]&2047](f);i=o;return}function KT(a,b){a=a|0;b=b|0;JT(a+-8|0,b);return}function LT(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;e=i;i=i+16|0;d=e;if(!(rc[c[(c[a>>2]|0)+52>>2]&127](a)|0)){i=e;return}g=c[a>>2]|0;f=c[g+56>>2]|0;c[d>>2]=zc[c[g+72>>2]&255](a,b)|0;Dc[f&63](a,d,0);d=c[d>>2]|0;if(!d){i=e;return}f=c[(c[d>>2]|0)+-12>>2]|0;b=d+f|0;f=d+(f+4)|0;g=(c[f>>2]|0)+-1|0;c[f>>2]=g;if((b|0)==0|(g|0)!=0){i=e;return}oc[c[(c[b>>2]|0)+4>>2]&2047](b);i=e;return}function MT(a,b){a=a|0;b=b|0;LT(a+-12|0,b);return}function NT(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,j=0,k=0,l=0,m=0,o=0,p=0;o=i;i=i+16|0;m=o+8|0;h=o+4|0;j=o;if(!(rc[c[(c[b>>2]|0)+52>>2]&127](b)|0)){i=o;return}if((a[8952]|0)==0?(Ga(8952)|0)!=0:0){$e(39720);Ta(52,39720,n|0)|0;$a(8952)}e=c[d>>2]|0;if(!e)Ha(78999,79014,102,79043);e=_e(39720,e+20|0,c[e+48>>2]|0)|0;c[m>>2]=e;if(e){f=e+((c[(c[e>>2]|0)+-12>>2]|0)+4)|0;g=(c[f>>2]|0)+1|0;c[f>>2]=g;if(!g)Ha(79054,79014,48,79068);g=c[(c[e>>2]|0)+-12>>2]|0;f=e+g|0;e=e+(g+4)|0;g=(c[e>>2]|0)+-1|0;c[e>>2]=g;if(!((f|0)==0|(g|0)!=0))oc[c[(c[f>>2]|0)+4>>2]&2047](f)}e=c[b>>2]|0;g=c[e+60>>2]|0;e=c[e+68>>2]|0;f=c[d>>2]|0;c[j>>2]=f;if((f|0)!=0?(p=f+((c[(c[f>>2]|0)+-12>>2]|0)+4)|0,f=(c[p>>2]|0)+1|0,c[p>>2]=f,(f|0)==0):0)Ha(79054,79014,48,79068);c[h>>2]=tc[e&63](b,j,m)|0;e=c[d>>2]|0;if(!e)Ha(78999,79014,102,79043);e=(rc[c[(c[e>>2]|0)+8>>2]&127](e)|0)!=0;Dc[g&63](b,h,e);e=c[h>>2]|0;if((e|0)!=0?(b=c[(c[e>>2]|0)+-12>>2]|0,k=e+b|0,b=e+(b+4)|0,p=(c[b>>2]|0)+-1|0,c[b>>2]=p,!((k|0)==0|(p|0)!=0)):0)oc[c[(c[k>>2]|0)+4>>2]&2047](k);e=c[j>>2]|0;if((e|0)!=0?(k=c[(c[e>>2]|0)+-12>>2]|0,l=e+k|0,k=e+(k+4)|0,p=(c[k>>2]|0)+-1|0,c[k>>2]=p,!((l|0)==0|(p|0)!=0)):0)oc[c[(c[l>>2]|0)+4>>2]&2047](l);e=c[m>>2]|0;if(!e){i=o;return}m=c[(c[e>>2]|0)+-12>>2]|0;f=e+m|0;m=e+(m+4)|0;p=(c[m>>2]|0)+-1|0;c[m>>2]=p;if((f|0)==0|(p|0)!=0){i=o;return}oc[c[(c[f>>2]|0)+4>>2]&2047](f);i=o;return}function OT(a,b){a=a|0;b=b|0;NT(a+-16|0,b);return}function PT(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0;if(!(rc[c[(c[a>>2]|0)+52>>2]&127](a)|0))return;i=a+40|0;h=a+36|0;e=c[h>>2]|0;f=(c[i>>2]|0)+-1+e|0;b=a+24|0;d=c[b>>2]|0;f=c[(c[d+(f>>>10<<2)>>2]|0)+((f&1023)<<2)>>2]|0;if((f|0)!=0?(j=c[(c[f>>2]|0)+-12>>2]|0,g=f+j|0,j=f+(j+4)|0,f=(c[j>>2]|0)+-1|0,c[j>>2]=f,!((g|0)==0|(f|0)!=0)):0){oc[c[(c[g>>2]|0)+4>>2]&2047](g);f=c[b>>2]|0;e=c[h>>2]|0}else f=d;j=c[i>>2]|0;c[i>>2]=j+-1;b=a+28|0;d=c[b>>2]|0;if((1-e-j+((d|0)==(f|0)?0:(d-f<<8)+-1|0)|0)>>>0<=2047)return;P_(c[d+-4>>2]|0);c[b>>2]=(c[b>>2]|0)+-4;return}function QT(a,b){a=a|0;b=b|0;PT(a+-4|0,0);return}function RT(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0;if(!(rc[c[(c[a>>2]|0)+52>>2]&127](a)|0))return;i=a+40|0;h=a+36|0;e=c[h>>2]|0;f=(c[i>>2]|0)+-1+e|0;b=a+24|0;d=c[b>>2]|0;f=c[(c[d+(f>>>10<<2)>>2]|0)+((f&1023)<<2)>>2]|0;if((f|0)!=0?(j=c[(c[f>>2]|0)+-12>>2]|0,g=f+j|0,j=f+(j+4)|0,f=(c[j>>2]|0)+-1|0,c[j>>2]=f,!((g|0)==0|(f|0)!=0)):0){oc[c[(c[g>>2]|0)+4>>2]&2047](g);f=c[b>>2]|0;e=c[h>>2]|0}else f=d;j=c[i>>2]|0;c[i>>2]=j+-1;b=a+28|0;d=c[b>>2]|0;if((1-e-j+((d|0)==(f|0)?0:(d-f<<8)+-1|0)|0)>>>0<=2047)return;P_(c[d+-4>>2]|0);c[b>>2]=(c[b>>2]|0)+-4;return}function ST(a,b){a=a|0;b=b|0;RT(a+-8|0,0);return}function TT(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0;if(!(rc[c[(c[a>>2]|0)+52>>2]&127](a)|0))return;b=c[b>>2]|0;if(!b)Ha(78999,79014,102,79043);if(!(rc[c[(c[b>>2]|0)+8>>2]&127](b)|0))return;h=a+40|0;g=a+36|0;e=c[g>>2]|0;f=(c[h>>2]|0)+-1+e|0;b=a+24|0;d=c[b>>2]|0;f=c[(c[d+(f>>>10<<2)>>2]|0)+((f&1023)<<2)>>2]|0;if((f|0)!=0?(j=c[(c[f>>2]|0)+-12>>2]|0,i=f+j|0,j=f+(j+4)|0,f=(c[j>>2]|0)+-1|0,c[j>>2]=f,!((i|0)==0|(f|0)!=0)):0){oc[c[(c[i>>2]|0)+4>>2]&2047](i);f=c[b>>2]|0;e=c[g>>2]|0}else f=d;j=c[h>>2]|0;c[h>>2]=j+-1;b=a+28|0;d=c[b>>2]|0;if((1-e-j+((d|0)==(f|0)?0:(d-f<<8)+-1|0)|0)>>>0<=2047)return;P_(c[d+-4>>2]|0);c[b>>2]=(c[b>>2]|0)+-4;return}function UT(a,b){a=a|0;b=b|0;TT(a+-16|0,b);return}function VT(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0;q=i;i=i+16|0;f=q;b=a+16|0;d=c[b>>2]|0;if(d>>>0>1023){c[b>>2]=d+-1024;m=a+4|0;e=c[m>>2]|0;n=c[e>>2]|0;f=e+4|0;c[m>>2]=f;o=a+8|0;b=c[o>>2]|0;l=a+12|0;d=b;do if((b|0)==(c[l>>2]|0)){p=c[a>>2]|0;g=p;if(f>>>0>p>>>0){b=f;a=((b-g>>2)+1|0)/-2|0;b=d-b|0;Sba(e+(a+1<<2)|0,f|0,b|0)|0;b=e+((b>>2)+1+a<<2)|0;c[o>>2]=b;c[m>>2]=(c[m>>2]|0)+(a<<2);break}k=d-g>>1;k=(k|0)==0?1:k;p=O_(k<<2)|0;h=p;d=p+(k>>>2<<2)|0;j=d;k=p+(k<<2)|0;if((f|0)==(b|0)){e=a;b=j;d=g}else{e=j;do{c[d>>2]=c[f>>2];d=e+4|0;e=d;f=f+4|0}while((f|0)!=(b|0));b=e;e=a;d=c[a>>2]|0}c[e>>2]=h;c[m>>2]=j;c[o>>2]=b;c[l>>2]=k;if(d){P_(d);b=c[o>>2]|0}}while(0);c[b>>2]=n;c[o>>2]=(c[o>>2]|0)+4;i=q;return}p=a+8|0;d=c[p>>2]|0;n=a+4|0;g=d-(c[n>>2]|0)|0;j=g>>2;o=a+12|0;e=c[o>>2]|0;b=e-(c[a>>2]|0)|0;if(j>>>0>2>>>0){b=O_(4096)|0;if((e|0)!=(d|0)){c[d>>2]=b;c[p>>2]=(c[p>>2]|0)+4;i=q;return}c[f>>2]=b;WT(a,f);b=c[n>>2]|0;l=c[b>>2]|0;f=b+4|0;c[n>>2]=f;g=c[p>>2]|0;e=g;do if((g|0)==(c[o>>2]|0)){m=c[a>>2]|0;d=m;if(f>>>0>m>>>0){o=f;a=((o-d>>2)+1|0)/-2|0;o=e-o|0;Sba(b+(a+1<<2)|0,f|0,o|0)|0;b=b+((o>>2)+1+a<<2)|0;c[p>>2]=b;c[n>>2]=(c[n>>2]|0)+(a<<2);break}k=e-d>>1;k=(k|0)==0?1:k;m=O_(k<<2)|0;h=m;b=m+(k>>>2<<2)|0;j=b;k=m+(k<<2)|0;if((f|0)==(g|0)){e=a;b=j}else{e=b;d=f;b=j;do{c[e>>2]=c[d>>2];e=b+4|0;b=e;d=d+4|0}while((d|0)!=(g|0));e=a;d=c[a>>2]|0}c[e>>2]=h;c[n>>2]=j;c[p>>2]=b;c[o>>2]=k;if(d){P_(d);b=c[p>>2]|0}}else b=g;while(0);c[b>>2]=l;c[p>>2]=(c[p>>2]|0)+4;i=q;return}m=b>>1;m=(m|0)==0?1:m;b=O_(m<<2)|0;e=b;f=b+(m<<2)|0;d=b+(j<<2)|0;h=O_(4096)|0;do if((j|0)==(m|0))if((g|0)>0){d=b+(((j+1|0)/-2|0)+j<<2)|0;g=e;break}else{f=g>>1;f=(f|0)==0?1:f;m=O_(f<<2)|0;P_(b);d=m+(f>>>2<<2)|0;g=m;f=m+(f<<2)|0;break}else g=e;while(0);b=d;c[d>>2]=h;e=d+4|0;d=c[p>>2]|0;if((d|0)!=(c[n>>2]|0))do{d=d+-4|0;h=b;do if((h|0)==(g|0)){m=e;if(m>>>0>>0){l=((f-e>>2)+1|0)/2|0;h=e-b|0;e=m+(l-(h>>2)<<2)|0;Sba(e|0,b|0,h|0)|0;h=e;b=e;e=m+(l<<2)|0;break}f=f-b>>1;f=(f|0)==0?1:f;j=O_(f<<2)|0;l=j;k=j+((f+3|0)>>>2<<2)|0;b=k;f=j+(f<<2)|0;if((h|0)==(m|0))e=b;else{j=k;e=b;do{c[j>>2]=c[h>>2];j=e+4|0;e=j;h=h+4|0}while((h|0)!=(m|0))}if(!g){h=k;g=l}else{P_(g);h=k;g=l}}while(0);c[h+-4>>2]=c[d>>2];b=b+-4|0}while((d|0)!=(c[n>>2]|0));d=c[a>>2]|0;c[a>>2]=g;c[n>>2]=b;c[p>>2]=e;c[o>>2]=f;if(!d){i=q;return}P_(d);i=q;return}function WT(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0;o=a+4|0;d=c[o>>2]|0;n=c[a>>2]|0;g=n;do if((d|0)==(n|0)){m=a+8|0;h=c[m>>2]|0;n=a+12|0;l=c[n>>2]|0;e=l;if(h>>>0>>0){l=h;a=((e-l>>2)+1|0)/2|0;l=l-d|0;n=h+(a-(l>>2)<<2)|0;Sba(n|0,d|0,l|0)|0;c[o>>2]=n;c[m>>2]=(c[m>>2]|0)+(a<<2);d=n;break}l=e-d>>1;l=(l|0)==0?1:l;f=O_(l<<2)|0;i=f;j=f+((l+3|0)>>>2<<2)|0;k=j;l=f+(l<<2)|0;if((d|0)==(h|0)){f=a;d=k;e=g}else{f=j;e=k;do{c[f>>2]=c[d>>2];f=e+4|0;e=f;d=d+4|0}while((d|0)!=(h|0));d=e;f=a;e=c[a>>2]|0}c[f>>2]=i;c[o>>2]=k;c[m>>2]=d;c[n>>2]=l;if(!e)d=j;else{P_(e);d=c[o>>2]|0}}while(0);c[d+-4>>2]=c[b>>2];c[o>>2]=(c[o>>2]|0)+-4;return}function XT(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0;a[b+20>>0]=0;i=b+24|0;c[i>>2]=0;h=c[d>>2]|0;if(!h){k=0;return k|0}g=b+8|0;pc[c[(c[g>>2]|0)+12>>2]&1023](g,h);d=c[h+4>>2]|0;f=h+8|0;a:do if((d|0)==(c[f>>2]|0))k=4;else{while(1){e=rc[c[(c[g>>2]|0)+24>>2]&127](g)|0;b=c[g>>2]|0;if(e){j=b;break a}e=c[d>>2]|0;if(!e)break;pc[c[b+8>>2]&1023](g,e);d=d+4|0;if((d|0)==(c[f>>2]|0)){k=4;break a}}Ha(78999,79014,95,78956)}while(0);if((k|0)==4)j=c[g>>2]|0;pc[c[j+16>>2]&1023](g,h);k=c[i>>2]|0;return k|0}function YT(b,d){b=b|0;d=d|0;if(a[b+20>>0]|0)return;b=b+24|0;c[b>>2]=(c[b>>2]|0)+1;return}function ZT(b,d){b=b|0;d=d|0;d=b+-4|0;if(a[d+20>>0]|0)return;b=d+24|0;c[b>>2]=(c[b>>2]|0)+1;return}function _T(b,c){b=b|0;c=c|0;a[b+20>>0]=1;return}function $T(b,d){b=b|0;d=d|0;a[b+20>>0]=0;b=b+24|0;c[b>>2]=(c[b>>2]|0)+1;return}function aU(a){a=a|0;return}function bU(a){a=a|0;P_(a);return}function cU(b){b=b|0;c[b+24>>2]=0;a[b+20>>0]=0;return}function dU(a){a=a|0;return}function eU(a){a=a|0;P_(a+-4|0);return}function fU(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,j=0,k=0,l=0,m=0;m=i;i=i+16|0;h=m;j=b+40|0;kM(h,0,1);rM(j,h)|0;oc[c[(c[b>>2]|0)+20>>2]&2047](b);h=c[d>>2]|0;if(!h){lM(a,j);i=m;return}g=b+52|0;pc[c[(c[g>>2]|0)+12>>2]&1023](g,h);d=c[h+4>>2]|0;f=h+8|0;a:do if((d|0)==(c[f>>2]|0))l=4;else{while(1){e=rc[c[(c[g>>2]|0)+24>>2]&127](g)|0;b=c[g>>2]|0;if(e){k=b;break a}e=c[d>>2]|0;if(!e)break;pc[c[b+8>>2]&1023](g,e);d=d+4|0;if((d|0)==(c[f>>2]|0)){l=4;break a}}Ha(78999,79014,95,78956)}while(0);if((l|0)==4)k=c[g>>2]|0;pc[c[k+16>>2]&1023](g,h);lM(a,j);i=m;return}function gU(b){b=b|0;var d=0,e=0,f=0;d=i;i=i+16|0;f=d+8|0;e=d;a[b+48>>0]=0;kM(f,0,1);rM(b+20|0,rM(b+12|0,f)|0)|0;kM(e,1,4);rM(b+28|0,e)|0;c[b+36>>2]=0;i=d;return}function hU(a,b){a=a|0;b=b|0;oc[c[(c[a>>2]|0)+20>>2]&2047](a);return}function iU(b,c){b=b|0;c=c|0;var d=0;c=i;i=i+16|0;d=c;kM(d,0,1);rM(b+20|0,d)|0;a[b+48>>0]=1;i=c;return}function jU(b,c){b=b|0;c=c|0;var d=0;c=i;i=i+16|0;d=c;b=b+-4|0;kM(d,0,1);rM(b+20|0,d)|0;a[b+48>>0]=1;i=c;return}function kU(b,d){b=b|0;d=d|0;var e=0,f=0;f=i;i=i+16|0;e=f;d=c[d>>2]|0;if(!d)Ha(78999,79014,102,79043);FE(e,d,b+28|0,b+36|0);if(!(a[b+48>>0]|0)){b=b+12|0;qM(b,e)|0;vM(b)|0;i=f;return}d=b+20|0;if(!(sM(e,d)|0)){i=f;return}rM(d,e)|0;i=f;return}function lU(a,b){a=a|0;b=b|0;kU(a+-8|0,b);return}function mU(a,b){a=a|0;b=b|0;var c=0;c=a+12|0;b=a+40|0;if(!(sM(c,b)|0))return;rM(b,c)|0;return}function nU(b,c){b=b|0;c=c|0;qM(b+12|0,b+20|0)|0;a[b+48>>0]=0;return}function oU(b,c){b=b|0;c=c|0;b=b+-4|0;qM(b+12|0,b+20|0)|0;a[b+48>>0]=0;return}function pU(a){a=a|0;return}function qU(a){a=a|0;P_(a);return}function rU(a,b){a=a|0;b=b|0;lM(a,b+12|0);return}function sU(a,b){a=a|0;b=b|0;lM(a,b+28|0);return}function tU(a){a=a|0;return c[a+36>>2]|0}function uU(b,c){b=b|0;c=c|0;a[b+60>>0]=c&1;return}function vU(a){a=a|0;return}function wU(a){a=a|0;P_(a+-4|0);return}function xU(a){a=a|0;return}function yU(a){a=a|0;P_(a+-8|0);return}function zU(b,d,e,f,g){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0;p=i;i=i+16|0;m=p;c[d+76>>2]=g;c[d+64>>2]=-1;c[d+68>>2]=1;c[d+72>>2]=f;c[d+80>>2]=0;k=d+84|0;a[k>>0]=0;gU(d);c[d+112>>2]=0;a[d+108>>0]=0;l=d+52|0;h=c[e>>2]|0;if(!h)Ha(78999,79014,95,78956);pc[c[(c[l>>2]|0)+12>>2]&1023](l,h);f=c[h+4>>2]|0;j=h+8|0;a:do if((f|0)==(c[j>>2]|0))o=5;else{while(1){e=rc[c[(c[l>>2]|0)+24>>2]&127](l)|0;g=c[l>>2]|0;if(e){n=g;break a}e=c[f>>2]|0;if(!e)break;pc[c[g+8>>2]&1023](l,e);f=f+4|0;if((f|0)==(c[j>>2]|0)){o=5;break a}}Ha(78999,79014,95,78956)}while(0);if((o|0)==5)n=c[l>>2]|0;pc[c[n+16>>2]&1023](l,h);if(!(a[k>>0]|0)){kM(b,-1,1);i=p;return}else{pc[c[(c[d>>2]|0)+36>>2]&1023](m,d);lM(b,vM(m)|0);i=p;return}}function AU(b,d){b=b|0;d=d|0;if((c[b+80>>2]|0)==(c[b+76>>2]|0)){hU(b,d);return}else{a[b+60>>0]=1;return}}function BU(b,d){b=b|0;d=d|0;var e=0,f=0;f=b+80|0;e=c[f>>2]|0;if((e|0)==(c[b+76>>2]|0)){mU(b,d);e=c[f>>2]|0}a[b+60>>0]=0;c[f>>2]=e+1;return}function CU(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0;h=i;i=i+16|0;e=h;f=b+84|0;a[f>>0]=0;g=c[b+72>>2]|0;if((g|0)>-1){g=(c[b+112>>2]|0)==(g|0);a[f>>0]=g&1;if(g)f=5;else{e=b;f=6}}else{pc[c[(c[b>>2]|0)+36>>2]&1023](e,b);g=sM(e,b+64|0)|0;a[f>>0]=g&1;if(g)f=5;else{e=b;f=6}}if((f|0)==5){a[b+60>>0]=1;i=h;return}else if((f|0)==6){iU(e,d);_T(b+88|0,d);i=h;return}}function DU(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0;h=i;i=i+16|0;f=h;g=b+-4|0;b=g+84|0;a[b>>0]=0;e=c[g+72>>2]|0;if((e|0)>-1){f=(c[g+112>>2]|0)==(e|0);a[b>>0]=f&1;if(f)e=5;else{b=g;e=6}}else{pc[c[(c[g>>2]|0)+36>>2]&1023](f,g);f=sM(f,g+64|0)|0;a[b>>0]=f&1;if(f)e=5;else{b=g;e=6}}if((e|0)==5){a[g+60>>0]=1;i=h;return}else if((e|0)==6){iU(b,d);_T(g+88|0,d);i=h;return}}function EU(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0;h=i;i=i+16|0;e=h;do if(!(a[b+48>>0]|0)){f=b+84|0;a[f>>0]=0;g=c[b+72>>2]|0;if((g|0)>-1){g=(c[b+112>>2]|0)==(g|0);a[f>>0]=g&1;if(!g)break}else{pc[c[(c[b>>2]|0)+36>>2]&1023](e,b);g=sM(e,b+64|0)|0;a[f>>0]=g&1;if(!g)break}a[b+60>>0]=1;i=h;return}while(0);kU(b,d);YT(b+88|0,d);i=h;return}function FU(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0;h=i;i=i+16|0;g=h;b=b+-8|0;do if(!(a[b+48>>0]|0)){e=b+84|0;a[e>>0]=0;f=c[b+72>>2]|0;if((f|0)>-1){g=(c[b+112>>2]|0)==(f|0);a[e>>0]=g&1;if(!g)break}else{pc[c[(c[b>>2]|0)+36>>2]&1023](g,b);g=sM(g,b+64|0)|0;a[e>>0]=g&1;if(!g)break}a[b+60>>0]=1;i=h;return}while(0);kU(b,d);YT(b+88|0,d);i=h;return}function GU(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0;h=i;i=i+16|0;e=h;f=b+84|0;a[f>>0]=0;g=c[b+72>>2]|0;if((g|0)>-1){g=(c[b+112>>2]|0)==(g|0);a[f>>0]=g&1;if(g)f=5;else{e=b;f=6}}else{pc[c[(c[b>>2]|0)+36>>2]&1023](e,b);g=sM(e,b+64|0)|0;a[f>>0]=g&1;if(g)f=5;else{e=b;f=6}}if((f|0)==5){a[b+60>>0]=1;i=h;return}else if((f|0)==6){nU(e,d);$T(b+88|0,d);i=h;return}}function HU(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0;h=i;i=i+16|0;f=h;g=b+-4|0;b=g+84|0;a[b>>0]=0;e=c[g+72>>2]|0;if((e|0)>-1){f=(c[g+112>>2]|0)==(e|0);a[b>>0]=f&1;if(f)e=5;else{b=g;e=6}}else{pc[c[(c[g>>2]|0)+36>>2]&1023](f,g);f=sM(f,g+64|0)|0;a[b>>0]=f&1;if(f)e=5;else{b=g;e=6}}if((e|0)==5){a[g+60>>0]=1;i=h;return}else if((e|0)==6){nU(b,d);$T(g+88|0,d);i=h;return}}function IU(a){a=a|0;return}function JU(a){a=a|0;P_(a);return}function KU(a){a=a|0;return}function LU(a){a=a|0;P_(a+-4|0);return}function MU(a){a=a|0;return}function NU(a){a=a|0;P_(a+-8|0);return}function OU(b,d){b=b|0;d=d|0;var e=0;a[b+29>>0]=0;a[b+28>>0]=0;e=b+20|0;c[e>>2]=9999;c[b+24>>2]=1;d=c[d>>2]|0;if(!d)Ha(78999,79014,95,78956);pc[c[(c[b>>2]|0)+8>>2]&1023](b,d);if(!(rc[c[(c[b>>2]|0)+24>>2]&127](b)|0)){b=-1;return b|0}b=c[e>>2]|0;return b|0}function PU(b,c){b=b|0;c=c|0;a[b+28>>0]=1;return}function QU(b,c){b=b|0;c=c|0;a[b+-12+28>>0]=1;return}function RU(b,c){b=b|0;c=c|0;a[b+28>>0]=0;a[b+29>>0]=1;return}function SU(b,c){b=b|0;c=c|0;b=b+-12|0;a[b+28>>0]=0;a[b+29>>0]=1;return}function TU(b,d){b=b|0;d=d|0;var e=0;d=c[d>>2]|0;if(!d)Ha(78999,79014,102,79043);e=c[d+48>>2]|0;if((e|0)!=-999)c[b+24>>2]=e;d=DE(d,b+24|0)|0;if((d|0)<=-1)return;e=b+20|0;if((d|0)<(c[e>>2]|0))c[e>>2]=d;if(a[b+28>>0]|0)return;a[b+29>>0]=1;return}function UU(b,d){b=b|0;d=d|0;var e=0,f=0;f=b+-16|0;d=c[d>>2]|0;if(!d)Ha(78999,79014,102,79043);e=c[d+48>>2]|0;b=f+24|0;if((e|0)!=-999)c[b>>2]=e;b=DE(d,b)|0;if((b|0)<=-1)return;d=f+20|0;if((b|0)<(c[d>>2]|0))c[d>>2]=b;if(a[f+28>>0]|0)return;a[f+29>>0]=1;return}function VU(a){a=a|0;return}function WU(a){a=a|0;P_(a);return}function XU(b){b=b|0;return (a[b+29>>0]|0)!=0|0}function YU(a){a=a|0;return}function ZU(a){a=a|0;P_(a+-12|0);return}function _U(a){a=a|0;return}function $U(a){a=a|0;P_(a+-16|0);return}function aV(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0;h=i;i=i+16|0;e=h;f=c[d>>2]|0;if(!f)Ha(78999,79014,102,79043);if((a[f+44>>0]|0)!=0?(a[b+68>>0]|0)==0:0){i=h;return}g=b+32|0;IF(e,f);wV(g,e)|0;o2(e);xM(g);e=c[d>>2]|0;if(!e)Ha(78999,79014,102,79043);if((rc[c[(c[e>>2]|0)+8>>2]&127](e)|0)>0?(zM(g,40)|0,(c[b+56>>2]|0)>1):0){b=b+64|0;c[b>>2]=(c[b>>2]|0)+1}zM(g,32)|0;i=h;return}function bV(b,d){b=b|0;d=d|0;var e=0,f=0;d=c[d>>2]|0;if(!d)Ha(78999,79014,102,79043);if((a[d+44>>0]|0)!=0?(a[b+68>>0]|0)==0:0)return;if((rc[c[(c[d>>2]|0)+8>>2]&127](d)|0)<=0)return;f=b+32|0;xV(f,78732)|0;xM(f);d=b+64|0;e=c[d>>2]|0;if((e|0)!=0?(e=e+-1|0,c[d>>2]=e,(e|0)!=0):0)return;d=b+56|0;if((c[d>>2]|0)<=1)return;xV(f,78735)|0;c[d>>2]=(c[d>>2]|0)+-1;return}function cV(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0;h=i;i=i+16|0;f=h;e=c[d>>2]|0;if(!e)Ha(78999,79014,102,79043);if((a[e+44>>0]|0)!=0?(a[b+68>>0]|0)==0:0){i=h;return}if((rc[c[(c[e>>2]|0)+8>>2]&127](e)|0)!=0?(a[b+68>>0]|0)!=0:0){i=h;return}g=b+32|0;e=c[d>>2]|0;if(!e)Ha(78999,79014,95,78956);ME(f,e);wV(g,f)|0;o2(f);e=b+56|0;d=c[e>>2]|0;if((d|0)>1?(c[b+64>>2]|0)==0:0){c[e>>2]=d+-1;xV(g,78735)|0}zM(g,32)|0;xM(g);i=h;return}function dV(a,b){a=a|0;b=b|0;cV(a+-16|0,b);return}function eV(b,d){b=b|0;d=d|0;var e=0,f=0;e=c[d>>2]|0;if(!e)Ha(78999,79014,102,79043);f=e+((c[(c[e>>2]|0)+-12>>2]|0)+4)|0;d=(c[f>>2]|0)+1|0;c[f>>2]=d;if(!d)Ha(79054,79014,48,79068);if(!((a[e+44>>0]|0)!=0?(a[b+68>>0]|0)==0:0))xV(b+32|0,78738)|0;b=c[(c[e>>2]|0)+-12>>2]|0;d=e+b|0;b=e+(b+4)|0;f=(c[b>>2]|0)+-1|0;c[b>>2]=f;if((d|0)==0|(f|0)!=0)return;oc[c[(c[d>>2]|0)+4>>2]&2047](d);return}function fV(a,b){a=a|0;b=b|0;eV(a+-4|0,b);return}function gV(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;f=i;i=i+16|0;e=f;d=xV(a+32|0,78742)|0;a=c[b>>2]|0;if(!a)Ha(78999,79014,95,78956);else{IF(e,a);xV(wV(d,e)|0,78745)|0;o2(e);i=f;return}}function hV(a,b){a=a|0;b=b|0;gV(a+-8|0,b);return}function iV(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;f=i;i=i+16|0;e=f;d=xV(a+32|0,78742)|0;a=c[b>>2]|0;if(!a)Ha(78999,79014,95,78956);else{IF(e,a);xV(wV(d,e)|0,78745)|0;o2(e);i=f;return}}function jV(a,b){a=a|0;b=b|0;iV(a+-12|0,b);return}function kV(a,b){a=a|0;b=b|0;var d=0;b=c[b>>2]|0;if(!b)Ha(78999,79014,102,79043);d=a+60|0;c[d>>2]=rc[c[(c[b>>2]|0)+8>>2]&127](b)|0;b=a+32|0;xV(b,78747)|0;if((c[d>>2]|0)<=0)return;d=a+48|0;c[d>>2]=(c[d>>2]|0)+(c[a+52>>2]|0);xV(b,78749)|0;return}function lV(a,b){a=a|0;b=b|0;var d=0;d=a+-20|0;a=c[b>>2]|0;if(!a)Ha(78999,79014,102,79043);b=d+60|0;c[b>>2]=rc[c[(c[a>>2]|0)+8>>2]&127](a)|0;a=d+32|0;xV(a,78747)|0;if((c[b>>2]|0)<=0)return;b=d+48|0;c[b>>2]=(c[b>>2]|0)+(c[d+52>>2]|0);xV(a,78749)|0;return}function mV(a,b){a=a|0;b=b|0;var d=0;b=c[b>>2]|0;if(!b)Ha(78999,79014,102,79043);if((rc[c[(c[b>>2]|0)+8>>2]&127](b)|0)<=0){a=a+32|0;xV(a,78751)|0;return}b=a+48|0;d=(c[b>>2]|0)-(c[a+52>>2]|0)|0;c[b>>2]=(d|0)<0?0:d;a=a+32|0;xV(a,78751)|0;return}function nV(a,b){a=a|0;b=b|0;var d=0;d=a+-20|0;a=c[b>>2]|0;if(!a)Ha(78999,79014,102,79043);if((rc[c[(c[a>>2]|0)+8>>2]&127](a)|0)<=0){b=d+32|0;xV(b,78751)|0;return}b=d+48|0;a=(c[b>>2]|0)-(c[d+52>>2]|0)|0;c[b>>2]=(a|0)<0?0:a;b=d+32|0;xV(b,78751)|0;return}function oV(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0;m=i;i=i+80|0;j=m+36|0;k=m;e=c[d>>2]|0;if(!e)Ha(78999,79014,102,79043);if((a[e+44>>0]|0)!=0?(a[b+68>>0]|0)==0:0){i=m;return}yV(j,e);e=c[d>>2]|0;if(!e)Ha(78999,79014,102,79043);zV(k,e);a:do if(!(AV(j,k)|0)){h=j+32|0;e=0;while(1){d=c[c[h>>2]>>2]|0;if(!d){e=15;break}f=d+((c[(c[d>>2]|0)+-12>>2]|0)+4)|0;g=(c[f>>2]|0)+1|0;c[f>>2]=g;if(!g){e=11;break}g=(o$(d,1576,8168,0)|0)!=0;o=c[(c[d>>2]|0)+-12>>2]|0;f=d+o|0;o=d+(o+4)|0;n=(c[o>>2]|0)+-1|0;c[o>>2]=n;if(!((f|0)==0|(n|0)!=0)){oc[c[(c[f>>2]|0)+4>>2]&2047](f);d=c[c[h>>2]>>2]|0;if(!d){e=15;break}else f=g&1}else f=g&1;e=f+e|0;if(!(rc[c[(c[d>>2]|0)+8>>2]&127](d)|0))CV(j);else BV(j,c[h>>2]|0);if(AV(j,k)|0){l=e;break a}}if((e|0)==11)Ha(79054,79014,48,79068);else if((e|0)==15)Ha(78999,79014,102,79043)}else l=0;while(0);c[b+56>>2]=l;DV(k);DV(j);xV(b+32|0,78753)|0;i=m;return}function pV(a,b){a=a|0;b=b|0;oV(a+-24|0,b);return}function qV(b,d){b=b|0;d=d|0;d=c[d>>2]|0;if(!d)Ha(78999,79014,102,79043);if((a[d+44>>0]|0)!=0?(a[b+68>>0]|0)==0:0)return;c[b+56>>2]=0;b=b+32|0;xV(b,78756)|0;xM(b);return}function rV(b,d){b=b|0;d=d|0;var e=0;e=b+-24|0;b=c[d>>2]|0;if(!b)Ha(78999,79014,102,79043);if((a[b+44>>0]|0)!=0?(a[e+68>>0]|0)==0:0)return;c[e+56>>2]=0;d=e+32|0;xV(d,78756)|0;xM(d);return}function sV(a,b){a=a|0;b=b|0;var d=0;d=a+32|0;xV(d,78759)|0;b=c[b>>2]|0;if(!b)Ha(78999,79014,102,79043);if((rc[c[(c[b>>2]|0)+8>>2]&127](b)|0)<=10)return;b=a+48|0;c[b>>2]=(c[b>>2]|0)+(c[a+52>>2]|0);zM(d,10)|0;return}function tV(a,b){a=a|0;b=b|0;var d=0,e=0;d=a+-28|0;e=d+32|0;xV(e,78759)|0;a=c[b>>2]|0;if(!a)Ha(78999,79014,102,79043);if((rc[c[(c[a>>2]|0)+8>>2]&127](a)|0)<=10)return;b=d+48|0;c[b>>2]=(c[b>>2]|0)+(c[d+52>>2]|0);zM(e,10)|0;return}function uV(a,b){a=a|0;b=b|0;var d=0,e=0;b=c[b>>2]|0;if(!b)Ha(78999,79014,102,79043);d=a+32|0;if((rc[c[(c[b>>2]|0)+8>>2]&127](b)|0)>10){b=a+48|0;e=(c[b>>2]|0)-(c[a+52>>2]|0)|0;c[b>>2]=(e|0)<0?0:e;zM(d,10)|0}zM(d,93)|0;b=a+60|0;e=(c[b>>2]|0)+-1|0;c[b>>2]=e;if(!e){e=a+48|0;a=(c[e>>2]|0)-(c[a+52>>2]|0)|0;c[e>>2]=(a|0)<0?0:a;xV(d,78749)|0;return}else{xV(d,78761)|0;return}}function vV(a,b){a=a|0;b=b|0;uV(a+-28|0,b);return}function wV(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,j=0,k=0,l=0;e=i;i=i+176|0;k=e+160|0;g=e+16|0;h=e;f=g+64|0;l=g+8|0;c[l>>2]=12564;j=g+12|0;c[g>>2]=12704;c[f>>2]=12724;c[g+4>>2]=0;T2(g+64|0,j);c[g+136>>2]=0;c[g+140>>2]=-1;c[g>>2]=12544;c[g+64>>2]=12584;c[l>>2]=12564;W2(j);c[j>>2]=12740;l=g+44|0;c[l>>2]=0;c[l+4>>2]=0;c[l+8>>2]=0;c[l+12>>2]=0;c[g+60>>2]=24;c[k>>2]=0;c[k+4>>2]=0;c[k+8>>2]=0;$d(j,k);o2(k);k=a[d>>0]|0;l=(k&1)==0;df(g+8|0,l?d+1|0:c[d+8>>2]|0,l?(k&255)>>>1:c[d+4>>2]|0)|0;RE(h,j);yM(b,h);o2(h);Ld(g,12592);O2(f);i=e;return b|0}function xV(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,j=0,k=0;d=i;i=i+176|0;j=d+160|0;f=d+16|0;g=d;e=f+64|0;k=f+8|0;c[k>>2]=12564;h=f+12|0;c[f>>2]=12704;c[e>>2]=12724;c[f+4>>2]=0;T2(f+64|0,h);c[f+136>>2]=0;c[f+140>>2]=-1;c[f>>2]=12544;c[f+64>>2]=12584;c[k>>2]=12564;W2(h);c[h>>2]=12740;k=f+44|0;c[k>>2]=0;c[k+4>>2]=0;c[k+8>>2]=0;c[k+12>>2]=0;c[f+60>>2]=24;c[j>>2]=0;c[j+4>>2]=0;c[j+8>>2]=0;$d(h,j);o2(j);df(f+8|0,b,f1(b)|0)|0;RE(g,h);yM(a,g);o2(g);Ld(f,12592);O2(e);i=d;return a|0}function yV(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;f=i;i=i+16|0;e=f;if(b){b=o$(b,1544,1576,0)|0;c[e>>2]=b;if((b|0)!=0?(g=b+((c[(c[b>>2]|0)+-12>>2]|0)+4)|0,b=(c[g>>2]|0)+1|0,c[g>>2]=b,(b|0)==0):0)Ha(79054,79014,48,79068);else d=e}else{c[e>>2]=0;d=e}rW(a,e,0);b=c[d>>2]|0;if(!b){i=f;return}e=c[(c[b>>2]|0)+-12>>2]|0;d=b+e|0;e=b+(e+4)|0;g=(c[e>>2]|0)+-1|0;c[e>>2]=g;if((d|0)==0|(g|0)!=0){i=f;return}oc[c[(c[d>>2]|0)+4>>2]&2047](d);i=f;return}function zV(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;f=i;i=i+16|0;e=f;if(b){b=o$(b,1544,1576,0)|0;c[e>>2]=b;if((b|0)!=0?(g=b+((c[(c[b>>2]|0)+-12>>2]|0)+4)|0,b=(c[g>>2]|0)+1|0,c[g>>2]=b,(b|0)==0):0)Ha(79054,79014,48,79068);else d=e}else{c[e>>2]=0;d=e}rW(a,e,1);b=c[d>>2]|0;if(!b){i=f;return}e=c[(c[b>>2]|0)+-12>>2]|0;d=b+e|0;e=b+(e+4)|0;g=(c[e>>2]|0)+-1|0;c[e>>2]=g;if((d|0)==0|(g|0)!=0){i=f;return}oc[c[(c[d>>2]|0)+4>>2]&2047](d);i=f;return}function AV(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0;d=c[a+24>>2]|0;if(!d)d=a+28|0;else{d=d+-1+(c[a+20>>2]|0)|0;d=(c[(c[a+8>>2]|0)+(d>>>9<<2)>>2]|0)+((d&511)<<3)+4|0}g=c[d>>2]|0;f=(g|0)==0;if(!f?(d=g+((c[(c[g>>2]|0)+-12>>2]|0)+4)|0,e=(c[d>>2]|0)+1|0,c[d>>2]=e,(e|0)==0):0)Ha(79054,79014,48,79068);d=c[b+24>>2]|0;if(!d)d=b+28|0;else{d=d+-1+(c[b+20>>2]|0)|0;d=(c[(c[b+8>>2]|0)+(d>>>9<<2)>>2]|0)+((d&511)<<3)+4|0}d=c[d>>2]|0;e=(d|0)==0;if(!e?(j=d+((c[(c[d>>2]|0)+-12>>2]|0)+4)|0,i=(c[j>>2]|0)+1|0,c[j>>2]=i,(i|0)==0):0)Ha(79054,79014,48,79068);if((g|0)==(d|0))b=(c[a+32>>2]|0)==(c[b+32>>2]|0);else b=0;if(!e?(i=c[(c[d>>2]|0)+-12>>2]|0,h=d+i|0,i=d+(i+4)|0,j=(c[i>>2]|0)+-1|0,c[i>>2]=j,!((h|0)==0|(j|0)!=0)):0)oc[c[(c[h>>2]|0)+4>>2]&2047](h);if(f)return b|0;i=c[(c[g>>2]|0)+-12>>2]|0;d=g+i|0;i=g+(i+4)|0;j=(c[i>>2]|0)+-1|0;c[i>>2]=j;if((d|0)==0|(j|0)!=0)return b|0;oc[c[(c[d>>2]|0)+4>>2]&2047](d);return b|0}function BV(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0;f=i;i=i+16|0;e=f;d=c[b>>2]|0;if(!d)Ha(78999,79014,102,79043);d=c[d+4>>2]|0;c[a+32>>2]=d;b=c[b>>2]|0;if(!b)Ha(78999,79014,102,79043);if((d|0)==(c[b+8>>2]|0)){i=f;return}h=b+((c[(c[b>>2]|0)+-12>>2]|0)+4)|0;g=(c[h>>2]|0)+1|0;c[h>>2]=g;if(!g)Ha(79054,79014,48,79068);c[e>>2]=d+4;c[e+4>>2]=b;g=b+((c[(c[b>>2]|0)+-12>>2]|0)+4)|0;h=(c[g>>2]|0)+1|0;c[g>>2]=h;if(!h)Ha(79054,79014,48,79068);oW(a+4|0,e);g=c[(c[b>>2]|0)+-12>>2]|0;d=b+g|0;g=b+(g+4)|0;h=(c[g>>2]|0)+-1|0;c[g>>2]=h;if(!((d|0)==0|(h|0)!=0))oc[c[(c[d>>2]|0)+4>>2]&2047](d);g=c[(c[b>>2]|0)+-12>>2]|0;d=b+g|0;g=b+(g+4)|0;h=(c[g>>2]|0)+-1|0;c[g>>2]=h;if((d|0)==0|(h|0)!=0){i=f;return}oc[c[(c[d>>2]|0)+4>>2]&2047](d);i=f;return}function CV(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0;q=i;i=i+16|0;p=q;h=a+24|0;b=c[h>>2]|0;if(!b){i=q;return}j=a+20|0;l=a+8|0;m=a+12|0;n=a+32|0;while(1){d=c[j>>2]|0;o=b+-1+d|0;f=c[l>>2]|0;g=c[f+(o>>>9<<2)>>2]|0;o=o&511;e=g+(o<<3)|0;o=c[g+(o<<3)+4>>2]|0;g=(o|0)==0;if(!g){r=o+((c[(c[o>>2]|0)+-12>>2]|0)+4)|0;b=(c[r>>2]|0)+1|0;c[r>>2]=b;if(!b){b=6;break}b=c[h>>2]|0}e=c[e>>2]|0;b=b+-1+d|0;b=c[(c[f+(b>>>9<<2)>>2]|0)+((b&511)<<3)+4>>2]|0;if((b|0)!=0?(r=c[(c[b>>2]|0)+-12>>2]|0,k=b+r|0,b=b+(r+4)|0,r=(c[b>>2]|0)+-1|0,c[b>>2]=r,!((k|0)==0|(r|0)!=0)):0){oc[c[(c[k>>2]|0)+4>>2]&2047](k);f=c[l>>2]|0;d=c[j>>2]|0}r=c[h>>2]|0;c[h>>2]=r+-1;b=c[m>>2]|0;if((1-d-r+((b|0)==(f|0)?0:(b-f<<7)+-1|0)|0)>>>0>1023){P_(c[b+-4>>2]|0);c[m>>2]=(c[m>>2]|0)+-4}c[n>>2]=e;if(g){b=13;break}d=c[(c[o>>2]|0)+-12>>2]|0;if((e|0)!=(c[o+8>>2]|0)){h=o;f=o;g=o;b=15;break}b=o+d|0;o=o+(d+4)|0;r=(c[o>>2]|0)+-1|0;c[o>>2]=r;if(!((b|0)==0|(r|0)!=0))oc[c[(c[b>>2]|0)+4>>2]&2047](b);b=c[h>>2]|0;if(!b){b=28;break}}if((b|0)==6)Ha(79054,79014,48,79068);else if((b|0)==13)Ha(78999,79014,102,79043);else if((b|0)==15){o=g+(d+4)|0;r=(c[o>>2]|0)+1|0;c[o>>2]=r;if(!r)Ha(79054,79014,48,79068);c[p>>2]=e+4;c[p+4>>2]=f;o=g+((c[(c[h>>2]|0)+-12>>2]|0)+4)|0;r=(c[o>>2]|0)+1|0;c[o>>2]=r;if(!r)Ha(79054,79014,48,79068);oW(a+4|0,p);a=c[(c[h>>2]|0)+-12>>2]|0;b=g+a|0;a=g+(a+4)|0;r=(c[a>>2]|0)+-1|0;c[a>>2]=r;if(!((b|0)==0|(r|0)!=0))oc[c[(c[b>>2]|0)+4>>2]&2047](b);a=c[(c[h>>2]|0)+-12>>2]|0;b=g+a|0;a=g+(a+4)|0;r=(c[a>>2]|0)+-1|0;c[a>>2]=r;if(!((b|0)==0|(r|0)!=0))oc[c[(c[b>>2]|0)+4>>2]&2047](b);a=c[(c[h>>2]|0)+-12>>2]|0;b=g+a|0;a=g+(a+4)|0;r=(c[a>>2]|0)+-1|0;c[a>>2]=r;if((b|0)==0|(r|0)!=0){i=q;return}oc[c[(c[b>>2]|0)+4>>2]&2047](b);i=q;return}else if((b|0)==28){i=q;return}}function DV(a){a=a|0;var b=0,d=0,e=0,f=0;c[a>>2]=45092;b=c[a+28>>2]|0;if((b|0)!=0?(e=c[(c[b>>2]|0)+-12>>2]|0,d=b+e|0,e=b+(e+4)|0,f=(c[e>>2]|0)+-1|0,c[e>>2]=f,!((d|0)==0|(f|0)!=0)):0)oc[c[(c[d>>2]|0)+4>>2]&2047](d);f=a+4|0;mW(f);e=a+8|0;b=c[e>>2]|0;a=a+12|0;d=c[a>>2]|0;if((b|0)!=(d|0)){do{P_(c[b>>2]|0);b=b+4|0}while((b|0)!=(d|0));b=c[e>>2]|0;d=c[a>>2]|0;if((d|0)!=(b|0))c[a>>2]=d+(~((d+-4-b|0)>>>2)<<2)}b=c[f>>2]|0;if(!b)return;P_(b);return}function EV(a){a=a|0;return}function FV(a){a=a|0;P_(a);return}function GV(a){a=a|0;return}function HV(a){a=a|0;P_(a+-4|0);return}function IV(a,b){a=a|0;b=b|0;return}function JV(a){a=a|0;return}function KV(a){a=a|0;P_(a+-8|0);return}function LV(a,b){a=a|0;b=b|0;return}function MV(a){a=a|0;return}function NV(a){a=a|0;P_(a+-12|0);return}function OV(a,b){a=a|0;b=b|0;return}function PV(a){a=a|0;return}function QV(a){a=a|0;P_(a+-16|0);return}function RV(a){a=a|0;return}function SV(a){a=a|0;P_(a+-20|0);return}function TV(a){a=a|0;return}function UV(a){a=a|0;P_(a+-24|0);return}function VV(a){a=a|0;return}function WV(a){a=a|0;P_(a+-28|0);return}function XV(a){a=a|0;return}function YV(a){a=a|0;P_(a);return}function ZV(a,b){a=a|0;b=b|0;return}function _V(a){a=a|0;return}function $V(a){a=a|0;P_(a+(c[(c[a>>2]|0)+-12>>2]|0)|0);return}function aW(a){a=a|0;return}function bW(a){a=a|0;P_(a);return}function cW(a,b){a=a|0;b=b|0;return}function dW(a){a=a|0;return}function eW(a){a=a|0;P_(a+(c[(c[a>>2]|0)+-12>>2]|0)|0);return}function fW(a){a=a|0;return}function gW(a){a=a|0;P_(a);return}function hW(a,b){a=a|0;b=b|0;return}function iW(a){a=a|0;return}function jW(a){a=a|0;P_(a+(c[(c[a>>2]|0)+-12>>2]|0)|0);return}function kW(a){a=a|0;return}function lW(a){a=a|0;P_(a+(c[(c[a>>2]|0)+-12>>2]|0)|0);return}function mW(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0;i=a+4|0;b=c[i>>2]|0;k=a+16|0;d=c[k>>2]|0;e=b+(d>>>9<<2)|0;j=a+8|0;if((c[j>>2]|0)==(b|0)){g=0;f=a+20|0;b=0}else{f=a+20|0;g=d+(c[f>>2]|0)|0;g=(c[b+(g>>>9<<2)>>2]|0)+((g&511)<<3)|0;b=(c[e>>2]|0)+((d&511)<<3)|0}d=e;a:while(1){do{if((b|0)==(g|0))break a;a=c[b+4>>2]|0;if((a|0)!=0?(e=c[(c[a>>2]|0)+-12>>2]|0,h=a+e|0,a=a+(e+4)|0,e=(c[a>>2]|0)+-1|0,c[a>>2]=e,!((h|0)==0|(e|0)!=0)):0)oc[c[(c[h>>2]|0)+4>>2]&2047](h);b=b+8|0}while((b-(c[d>>2]|0)|0)!=4096);e=d+4|0;b=c[e>>2]|0;d=e}c[f>>2]=0;a=c[i>>2]|0;b=(c[j>>2]|0)-a>>2;if(b>>>0>2)do{P_(c[a>>2]|0);a=(c[i>>2]|0)+4|0;c[i>>2]=a;b=(c[j>>2]|0)-a>>2}while(b>>>0>2);switch(b|0){case 1:{c[k>>2]=256;return}case 2:{c[k>>2]=512;return}default:return}}function nW(a){a=a|0;DV(a);P_(a);return}function oW(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;i=a+8|0;f=c[i>>2]|0;j=a+4|0;e=c[j>>2]|0;d=a+16|0;g=c[d>>2]|0;k=a+20|0;h=c[k>>2]|0;if((((f|0)==(e|0)?0:(f-e<<7)+-1|0)|0)==(h+g|0)){pW(a);g=c[d>>2]|0;d=c[k>>2]|0;f=c[i>>2]|0;e=c[j>>2]|0}else d=h;d=g+d|0;if((f|0)==(e|0))d=0;else d=(c[e+(d>>>9<<2)>>2]|0)+((d&511)<<3)|0;c[d>>2]=c[b>>2];e=c[b+4>>2]|0;c[d+4>>2]=e;if(!e){b=c[b>>2]|0;c[d>>2]=b;b=c[k>>2]|0;b=b+1|0;c[k>>2]=b;return}i=e+((c[(c[e>>2]|0)+-12>>2]|0)+4)|0;j=(c[i>>2]|0)+1|0;c[i>>2]=j;if(!j)Ha(79054,79014,48,79068);else{b=c[b>>2]|0;c[d>>2]=b;b=c[k>>2]|0;b=b+1|0;c[k>>2]=b;return}}function pW(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0;q=i;i=i+16|0;f=q;b=a+16|0;d=c[b>>2]|0;if(d>>>0>511){c[b>>2]=d+-512;m=a+4|0;e=c[m>>2]|0;n=c[e>>2]|0;f=e+4|0;c[m>>2]=f;o=a+8|0;b=c[o>>2]|0;l=a+12|0;d=b;do if((b|0)==(c[l>>2]|0)){p=c[a>>2]|0;g=p;if(f>>>0>p>>>0){b=f;a=((b-g>>2)+1|0)/-2|0;b=d-b|0;Sba(e+(a+1<<2)|0,f|0,b|0)|0;b=e+((b>>2)+1+a<<2)|0;c[o>>2]=b;c[m>>2]=(c[m>>2]|0)+(a<<2);break}k=d-g>>1;k=(k|0)==0?1:k;p=O_(k<<2)|0;h=p;d=p+(k>>>2<<2)|0;j=d;k=p+(k<<2)|0;if((f|0)==(b|0)){e=a;b=j;d=g}else{e=j;do{c[d>>2]=c[f>>2];d=e+4|0;e=d;f=f+4|0}while((f|0)!=(b|0));b=e;e=a;d=c[a>>2]|0}c[e>>2]=h;c[m>>2]=j;c[o>>2]=b;c[l>>2]=k;if(d){P_(d);b=c[o>>2]|0}}while(0);c[b>>2]=n;c[o>>2]=(c[o>>2]|0)+4;i=q;return}p=a+8|0;d=c[p>>2]|0;n=a+4|0;g=d-(c[n>>2]|0)|0;j=g>>2;o=a+12|0;e=c[o>>2]|0;b=e-(c[a>>2]|0)|0;if(j>>>0>2>>>0){b=O_(4096)|0;if((e|0)!=(d|0)){c[d>>2]=b;c[p>>2]=(c[p>>2]|0)+4;i=q;return}c[f>>2]=b;qW(a,f);b=c[n>>2]|0;l=c[b>>2]|0;f=b+4|0;c[n>>2]=f;g=c[p>>2]|0;e=g;do if((g|0)==(c[o>>2]|0)){m=c[a>>2]|0;d=m;if(f>>>0>m>>>0){o=f;a=((o-d>>2)+1|0)/-2|0;o=e-o|0;Sba(b+(a+1<<2)|0,f|0,o|0)|0;b=b+((o>>2)+1+a<<2)|0;c[p>>2]=b;c[n>>2]=(c[n>>2]|0)+(a<<2);break}k=e-d>>1;k=(k|0)==0?1:k;m=O_(k<<2)|0;h=m;b=m+(k>>>2<<2)|0;j=b;k=m+(k<<2)|0;if((f|0)==(g|0)){e=a;b=j}else{e=b;d=f;b=j;do{c[e>>2]=c[d>>2];e=b+4|0;b=e;d=d+4|0}while((d|0)!=(g|0));e=a;d=c[a>>2]|0}c[e>>2]=h;c[n>>2]=j;c[p>>2]=b;c[o>>2]=k;if(d){P_(d);b=c[p>>2]|0}}else b=g;while(0);c[b>>2]=l;c[p>>2]=(c[p>>2]|0)+4;i=q;return}m=b>>1;m=(m|0)==0?1:m;b=O_(m<<2)|0;e=b;f=b+(m<<2)|0;d=b+(j<<2)|0;h=O_(4096)|0;do if((j|0)==(m|0))if((g|0)>0){d=b+(((j+1|0)/-2|0)+j<<2)|0;g=e;break}else{f=g>>1;f=(f|0)==0?1:f;m=O_(f<<2)|0;P_(b);d=m+(f>>>2<<2)|0;g=m;f=m+(f<<2)|0;break}else g=e;while(0);b=d;c[d>>2]=h;e=d+4|0;d=c[p>>2]|0;if((d|0)!=(c[n>>2]|0))do{d=d+-4|0;h=b;do if((h|0)==(g|0)){m=e;if(m>>>0>>0){l=((f-e>>2)+1|0)/2|0;h=e-b|0;e=m+(l-(h>>2)<<2)|0;Sba(e|0,b|0,h|0)|0;h=e;b=e;e=m+(l<<2)|0;break}f=f-b>>1;f=(f|0)==0?1:f;j=O_(f<<2)|0;l=j;k=j+((f+3|0)>>>2<<2)|0;b=k;f=j+(f<<2)|0;if((h|0)==(m|0))e=b;else{j=k;e=b;do{c[j>>2]=c[h>>2];j=e+4|0;e=j;h=h+4|0}while((h|0)!=(m|0))}if(!g){h=k;g=l}else{P_(g);h=k;g=l}}while(0);c[h+-4>>2]=c[d>>2];b=b+-4|0}while((d|0)!=(c[n>>2]|0));d=c[a>>2]|0;c[a>>2]=g;c[n>>2]=b;c[p>>2]=e;c[o>>2]=f;if(!d){i=q;return}P_(d);i=q;return}function qW(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0;o=a+4|0;d=c[o>>2]|0;n=c[a>>2]|0;g=n;do if((d|0)==(n|0)){m=a+8|0;h=c[m>>2]|0;n=a+12|0;l=c[n>>2]|0;e=l;if(h>>>0>>0){l=h;a=((e-l>>2)+1|0)/2|0;l=l-d|0;n=h+(a-(l>>2)<<2)|0;Sba(n|0,d|0,l|0)|0;c[o>>2]=n;c[m>>2]=(c[m>>2]|0)+(a<<2);d=n;break}l=e-d>>1;l=(l|0)==0?1:l;f=O_(l<<2)|0;i=f;j=f+((l+3|0)>>>2<<2)|0;k=j;l=f+(l<<2)|0;if((d|0)==(h|0)){f=a;d=k;e=g}else{f=j;e=k;do{c[f>>2]=c[d>>2];f=e+4|0;e=f;d=d+4|0}while((d|0)!=(h|0));d=e;f=a;e=c[a>>2]|0}c[f>>2]=i;c[o>>2]=k;c[m>>2]=d;c[n>>2]=l;if(!e)d=j;else{P_(e);d=c[o>>2]|0}}while(0);c[d+-4>>2]=c[b>>2];c[o>>2]=(c[o>>2]|0)+-4;return}function rW(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0;c[a>>2]=45092;f=a+4|0;e=a+28|0;c[f>>2]=0;c[f+4>>2]=0;c[f+8>>2]=0;c[f+12>>2]=0;c[f+16>>2]=0;c[f+20>>2]=0;c[f+24>>2]=0;f=c[b>>2]|0;do if(f){h=f+((c[(c[f>>2]|0)+-12>>2]|0)+4)|0;g=(c[h>>2]|0)+1|0;c[h>>2]=g;if(!g)Ha(79054,79014,48,79068);else{c[e>>2]=f;break}}while(0);if(!d){BV(a,b);return}e=c[b>>2]|0;if(!e)Ha(78999,79014,102,79043);c[a+32>>2]=c[e+8>>2];return}function sW(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,j=0,k=0;k=i;i=i+16|0;j=k;d=a+4|0;e=c[d>>2]|0;do if(e){g=c[b>>2]|0;while(1){d=c[e+16>>2]|0;if(g>>>0>>0){d=c[e>>2]|0;if(!d){d=e;h=5;break}}else{if(d>>>0>=g>>>0){d=e;h=10;break}f=e+4|0;d=c[f>>2]|0;if(!d){d=f;h=9;break}}e=d}if((h|0)==5){c[j>>2]=e;g=d;break}else if((h|0)==9){c[j>>2]=e;g=d;break}else if((h|0)==10){c[j>>2]=d;f=j;e=d;h=12;break}}else{c[j>>2]=d;f=d;h=12}while(0);if((h|0)==12)if(!e){g=f;e=d}else{a=e;a=a+20|0;i=k;return a|0}f=O_(24)|0;d=c[b>>2]|0;c[f+16>>2]=d;if((d|0)!=0?(j=d+((c[(c[d>>2]|0)+-12>>2]|0)+4)|0,b=(c[j>>2]|0)+1|0,c[j>>2]=b,(b|0)==0):0)Ha(79054,79014,48,79068);c[f+20>>2]=0;c[f>>2]=0;c[f+4>>2]=0;c[f+8>>2]=e;c[g>>2]=f;d=c[c[a>>2]>>2]|0;if(!d)d=f;else{c[a>>2]=d;d=c[g>>2]|0}kE(c[a+4>>2]|0,d);a=a+8|0;c[a>>2]=(c[a>>2]|0)+1;a=f;a=a+20|0;i=k;return a|0}function tW(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0;a[b+44>>0]=0;c[b+12>>2]=e;c[b+16>>2]=0;c[b+52>>2]=1;c[b+20>>2]=f;h=c[d>>2]|0;if(!h)return;g=b+60|0;pc[c[(c[g>>2]|0)+12>>2]&1023](g,h);f=c[h+4>>2]|0;b=h+8|0;a:do if((f|0)==(c[b>>2]|0))j=4;else{while(1){e=rc[c[(c[g>>2]|0)+24>>2]&127](g)|0;d=c[g>>2]|0;if(e){i=d;break a}e=c[f>>2]|0;if(!e)break;pc[c[d+8>>2]&1023](g,e);f=f+4|0;if((f|0)==(c[b>>2]|0)){j=4;break a}}Ha(78999,79014,95,78956)}while(0);if((j|0)==4)i=c[g>>2]|0;pc[c[i+16>>2]&1023](g,h);return}function uW(b,d){b=b|0;d=d|0;pc[c[(c[b>>2]|0)+36>>2]&1023](b,(c[b+16>>2]|0)!=(c[b+12>>2]|0));c[b+52>>2]=1;a[b+44>>0]=0;return}function vW(a,b){a=a|0;b=b|0;var d=0;d=a+16|0;b=c[d>>2]|0;c[d>>2]=b+1;pc[c[(c[a>>2]|0)+36>>2]&1023](a,(b|0)>=(c[a+12>>2]|0));return}function wW(b,d){b=b|0;d=d|0;a[b+44>>0]=1;q2(b+24|0,88927)|0;c[b+36>>2]=-999;c[b+40>>2]=0;c[b+56>>2]=(c[b+48>>2]|0)==1?-1:999;return}function xW(b,d){b=b|0;d=d|0;b=b+-4|0;a[b+44>>0]=1;q2(b+24|0,88927)|0;c[b+36>>2]=-999;c[b+40>>2]=0;c[b+56>>2]=(c[b+48>>2]|0)==1?-1:999;return}function yW(b,d){b=b|0;d=d|0;var e=0,f=0,g=0;a[b+44>>0]=0;d=c[b+20>>2]|0;e=b+24|0;f=d+4|0;g=c[f>>2]|0;if((g|0)==(c[d+8>>2]|0)){EW(d,e);return}else{k2(g,e);d=b+36|0;e=c[d+4>>2]|0;b=g+12|0;c[b>>2]=c[d>>2];c[b+4>>2]=e;c[f>>2]=(c[f>>2]|0)+20;return}}function zW(b,d){b=b|0;d=d|0;var e=0,f=0,g=0;d=b+-4|0;a[d+44>>0]=0;b=c[d+20>>2]|0;e=d+24|0;f=b+4|0;g=c[f>>2]|0;if((g|0)==(c[b+8>>2]|0)){EW(b,e);return}else{k2(g,e);b=d+36|0;e=c[b+4>>2]|0;g=g+12|0;c[g>>2]=c[b>>2];c[g+4>>2]=e;c[f>>2]=(c[f>>2]|0)+20;return}}function AW(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;e=c[b>>2]|0;if(!e)Ha(78999,79014,102,79043);p2(d,e+20|0)|0;f=c[b>>2]|0;if(!f)Ha(78999,79014,102,79043);e=c[f+48>>2]|0;b=a+52|0;if((e|0)==-999)e=c[b>>2]|0;else c[b>>2]=e;c[d+12>>2]=e;c[d+16>>2]=c[f+52>>2];return}function BW(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0;g=i;i=i+32|0;e=g;if(!(a[b+44>>0]|0)){c[e>>2]=0;c[e+4>>2]=0;c[e+8>>2]=0;Dc[c[(c[b>>2]|0)+20>>2]&63](b,d,e);f=c[b+20>>2]|0;d=f+4|0;b=c[d>>2]|0;if((b|0)==(c[f+8>>2]|0))EW(f,e);else{k2(b,e);h=e+12|0;f=c[h+4>>2]|0;b=b+12|0;c[b>>2]=c[h>>2];c[b+4>>2]=f;c[d>>2]=(c[d>>2]|0)+20}o2(e);i=g;return}e=c[d>>2]|0;if(!e)Ha(78999,79014,102,79043);f=DE(e,b+52|0)|0;switch(c[b+48>>2]|0){case 1:{e=b+56|0;if((f|0)<=(c[e>>2]|0)){i=g;return}Dc[c[(c[b>>2]|0)+20>>2]&63](b,d,b+24|0);c[e>>2]=f;i=g;return}case 0:{e=b+56|0;if((f|0)>=(c[e>>2]|0)){i=g;return}Dc[c[(c[b>>2]|0)+20>>2]&63](b,d,b+24|0);c[e>>2]=f;i=g;return}default:{i=g;return}}}function CW(a,b){a=a|0;b=b|0;BW(a+-8|0,b);return}function DW(a){a=a|0;var b=0,d=0,e=0,f=0;e=i;i=i+16|0;b=e;d=NE()|0;if(!d){d=-1;i=e;return d|0}f=c[a+12>>2]|0;c[b>>2]=f;ad(d,a);c[d+48>>2]=f;c[d+52>>2]=c[a+16>>2];a=DE(d,b)|0;f=c[(c[d>>2]|0)+-12>>2]|0;b=d+f|0;f=d+(f+4)|0;d=(c[f>>2]|0)+-1|0;c[f>>2]=d;if((b|0)==0|(d|0)!=0){f=a;i=e;return f|0}oc[c[(c[b>>2]|0)+4>>2]&2047](b);f=a;i=e;return f|0}function EW(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0;k=a+4|0;d=c[a>>2]|0;f=(((c[k>>2]|0)-d|0)/20|0)+1|0;if(f>>>0>214748364){M_(a);d=c[a>>2]|0}l=a+8|0;e=((c[l>>2]|0)-d|0)/20|0;if(e>>>0<107374182){e=e<<1;e=e>>>0>>0?f:e;d=((c[k>>2]|0)-d|0)/20|0;if(!e){g=0;h=0}else i=6}else{e=214748364;d=((c[k>>2]|0)-d|0)/20|0;i=6}if((i|0)==6){g=e;h=O_(e*20|0)|0}f=h+(d*20|0)|0;e=f;j=h+(g*20|0)|0;k2(f,b);g=b+12|0;i=c[g+4>>2]|0;b=h+(d*20|0)+12|0;c[b>>2]=c[g>>2];c[b+4>>2]=i;b=h+((d+1|0)*20|0)|0;i=c[a>>2]|0;d=c[k>>2]|0;if((d|0)==(i|0)){g=a;h=k;f=i}else{do{m=d;d=d+-20|0;k2(f+-20|0,d);m=m+-8|0;g=c[m+4>>2]|0;h=f+-8|0;c[h>>2]=c[m>>2];c[h+4>>2]=g;f=e+-20|0;e=f}while((d|0)!=(i|0));d=e;g=a;h=k;e=d;f=c[a>>2]|0;d=c[k>>2]|0}c[g>>2]=e;c[h>>2]=b;c[l>>2]=j;e=f;while(1){if((d|0)==(e|0))break;d=d+-20|0;o2(d)}if(!f)return;P_(f);return}function FW(a){a=a|0;c[a>>2]=45116;c[a+4>>2]=45172;c[a+8>>2]=45204;o2(a+24|0);return}function GW(a){a=a|0;c[a>>2]=45116;c[a+4>>2]=45172;c[a+8>>2]=45204;o2(a+24|0);P_(a);return}function HW(b,c){b=b|0;c=c|0;a[b+68>>0]=c&1;return}function IW(a){a=a|0;a=a+-4|0;c[a>>2]=45116;c[a+4>>2]=45172;c[a+8>>2]=45204;o2(a+24|0);return}function JW(a){a=a|0;a=a+-4|0;c[a>>2]=45116;c[a+4>>2]=45172;c[a+8>>2]=45204;o2(a+24|0);P_(a);return}function KW(a){a=a|0;a=a+-8|0;c[a>>2]=45116;c[a+4>>2]=45172;c[a+8>>2]=45204;o2(a+24|0);return}function LW(a){a=a|0;a=a+-8|0;c[a>>2]=45116;c[a+4>>2]=45172;c[a+8>>2]=45204;o2(a+24|0);P_(a);return}function MW(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,j=0,k=0,l=0;l=i;i=i+16|0;h=l;a[b+24>>0]=0;c[b+12>>2]=e;c[b+16>>2]=0;c[b+20>>2]=f;kM(h,1,4);rM(b+28|0,h)|0;c[b+36>>2]=0;h=c[d>>2]|0;if(!h){i=l;return}g=b+40|0;pc[c[(c[g>>2]|0)+12>>2]&1023](g,h);f=c[h+4>>2]|0;b=h+8|0;a:do if((f|0)==(c[b>>2]|0))k=4;else{while(1){e=rc[c[(c[g>>2]|0)+24>>2]&127](g)|0;d=c[g>>2]|0;if(e){j=d;break a}e=c[f>>2]|0;if(!e)break;pc[c[d+8>>2]&1023](g,e);f=f+4|0;if((f|0)==(c[b>>2]|0)){k=4;break a}}Ha(78999,79014,95,78956)}while(0);if((k|0)==4)j=c[g>>2]|0;pc[c[j+16>>2]&1023](g,h);i=l;return}function NW(b,d){b=b|0;d=d|0;var e=0;d=i;i=i+16|0;e=d;pc[c[(c[b>>2]|0)+32>>2]&1023](b,(c[b+16>>2]|0)!=(c[b+12>>2]|0));a[b+24>>0]=0;kM(e,1,4);rM(b+28|0,e)|0;c[b+36>>2]=0;i=d;return}function OW(a,b){a=a|0;b=b|0;var d=0;d=a+16|0;b=c[d>>2]|0;c[d>>2]=b+1;pc[c[(c[a>>2]|0)+32>>2]&1023](a,(b|0)>=(c[a+12>>2]|0));return}function PW(b,c){b=b|0;c=c|0;a[b+24>>0]=1;return}function QW(b,c){b=b|0;c=c|0;a[b+-4+24>>0]=1;return}function RW(b,d){b=b|0;d=d|0;d=c[(c[b>>2]|0)+32>>2]|0;a[b+24>>0]=0;pc[d&1023](b,0);return}function SW(b,d){b=b|0;d=d|0;b=b+-4|0;d=c[(c[b>>2]|0)+32>>2]|0;a[b+24>>0]=0;pc[d&1023](b,0);return}function TW(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0;h=i;i=i+16|0;g=h;d=c[d>>2]|0;if(!d)Ha(78999,79014,102,79043);FE(g,d,b+28|0,b+36|0);d=c[b+20>>2]|0;e=d+4|0;f=c[e>>2]|0;if((f|0)==(c[d+8>>2]|0))Se(d,g);else{lM(f,g);c[e>>2]=(c[e>>2]|0)+8}if(!(a[b+24>>0]|0)){i=h;return}pc[c[(c[b>>2]|0)+32>>2]&1023](b,1);i=h;return}function UW(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0;h=i;i=i+16|0;g=h;f=b+-8|0;b=c[d>>2]|0;if(!b)Ha(78999,79014,102,79043);FE(g,b,f+28|0,f+36|0);b=c[f+20>>2]|0;d=b+4|0;e=c[d>>2]|0;if((e|0)==(c[b+8>>2]|0))Se(b,g);else{lM(e,g);c[d>>2]=(c[d>>2]|0)+8}if(!(a[f+24>>0]|0)){i=h;return}pc[c[(c[f>>2]|0)+32>>2]&1023](f,1);i=h;return}function VW(a){a=a|0;return}function WW(a){a=a|0;P_(a);return}function XW(b,c){b=b|0;c=c|0;a[b+48>>0]=c&1;return}function YW(a){a=a|0;return}function ZW(a){a=a|0;P_(a+-4|0);return}function _W(a){a=a|0;return}function $W(a){a=a|0;P_(a+-8|0);return}function aX(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0;e=i;i=i+16|0;f=e;c[b>>2]=45564;c[b+4>>2]=45664;c[b+8>>2]=45696;c[b+12>>2]=45728;c[b+16>>2]=45760;c[b+20>>2]=45792;c[b+24>>2]=45824;c[b+28>>2]=45856;c[b+32>>2]=45888;c[b+36>>2]=45920;c[b+40>>2]=45952;c[b+44>>2]=45984;c[b+48>>2]=46016;c[b+52>>2]=46048;c[b+56>>2]=46080;c[b+60>>2]=46112;c[b+64>>2]=46144;m=b+68|0;c[b+72>>2]=0;n=b+76|0;c[n>>2]=0;l=b+72|0;c[m>>2]=l;j=b+80|0;c[b+84>>2]=0;k=b+88|0;c[k>>2]=0;h=b+84|0;c[j>>2]=h;g=b+96|0;kM(g,0,1);c[b+112>>2]=d;oG(m,c[l>>2]|0);c[n>>2]=0;c[m>>2]=l;c[l>>2]=0;oG(j,c[h>>2]|0);c[k>>2]=0;c[j>>2]=h;c[h>>2]=0;a[b+92>>0]=1;kM(f,1,4);rM(g,f)|0;c[b+104>>2]=0;c[b+108>>2]=1;i=e;return}function bX(a,b){a=a|0;b=b|0;b=c[b>>2]|0;if(!b)Ha(78999,79014,102,79043);else{pc[c[(c[b>>2]|0)+32>>2]&1023](b,c[a+112>>2]|0);return}}function cX(a,b){a=a|0;b=b|0;b=c[b>>2]|0;if(!b)Ha(78999,79014,102,79043);else{pc[c[(c[b>>2]|0)+36>>2]&1023](b,c[a+112>>2]|0);return}}function dX(a,b){a=a|0;b=b|0;b=c[b>>2]|0;if(!b)Ha(78999,79014,102,79043);else{pc[c[(c[b>>2]|0)+32>>2]&1023](b,a+(c[(c[a>>2]|0)+-12>>2]|0)|0);return}}function eX(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;pc[c[(c[a>>2]|0)+76>>2]&1023](a,b);d=c[b>>2]|0;if(!d)Ha(78999,79014,102,79043);f=c[d+4>>2]|0;e=d;while(1){d=c[a>>2]|0;if((f|0)==(c[e+8>>2]|0)){e=7;break}pc[c[d+8>>2]&1023](a,f);e=c[b>>2]|0;if(!e){e=4;break}else f=f+4|0}if((e|0)==4)Ha(78999,79014,102,79043);else if((e|0)==7){pc[c[d+80>>2]&1023](a,b);return}}function fX(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;f=a+-64|0;pc[c[(c[f>>2]|0)+76>>2]&1023](f,b);a=c[b>>2]|0;if(!a)Ha(78999,79014,102,79043);e=c[a+4>>2]|0;d=a;while(1){a=c[f>>2]|0;if((e|0)==(c[d+8>>2]|0)){d=7;break}pc[c[a+8>>2]&1023](f,e);d=c[b>>2]|0;if(!d){d=4;break}else e=e+4|0}if((d|0)==4)Ha(78999,79014,102,79043);else if((d|0)==7){pc[c[a+80>>2]&1023](f,b);return}}function gX(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0;h=i;i=i+16|0;g=h;e=c[d>>2]|0;if(!e)Ha(78999,79014,102,79043);f=c[e+48>>2]|0;if((f|0)!=-999)c[b+108>>2]=f;lM(g,e+60|0);if((c[g>>2]|0)!=-999999){rM(b+96|0,g)|0;c[b+104>>2]=0}e=c[d>>2]|0;if(!e)Ha(78999,79014,102,79043);g=e+56|0;f=c[g>>2]|0;if(f)c[b+104>>2]=f;f=b+92|0;if(a[f>>0]|0){c[e+48>>2]=c[b+108>>2];c[g>>2]=c[b+104>>2];GE(e,b+96|0)|0;a[f>>0]=0;e=c[d>>2]|0}if(!e)Ha(78999,79014,102,79043);else{pc[c[(c[e>>2]|0)+32>>2]&1023](e,c[b+112>>2]|0);i=h;return}}function hX(a,b){a=a|0;b=b|0;gX(a+-60|0,b);return}function iX(b,d){b=b|0;d=d|0;c[b+144>>2]=b+120;a[b+92>>0]=1;return}function jX(b,d){b=b|0;d=d|0;b=b+-4|0;c[b+144>>2]=b+120;a[b+92>>0]=1;return}function kX(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,j=0,k=0,l=0;j=i;i=i+16|0;d=j+4|0;g=j;h=a+68|0;f=c[b>>2]|0;c[d>>2]=f;if((f|0)!=0?(l=f+((c[(c[f>>2]|0)+-12>>2]|0)+4)|0,k=(c[l>>2]|0)+1|0,c[l>>2]=k,(k|0)==0):0)Ha(79054,79014,48,79068);d=(c[(sW(h,d)|0)>>2]|0)==0;if((f|0)!=0?(k=c[(c[f>>2]|0)+-12>>2]|0,e=f+k|0,k=f+(k+4)|0,l=(c[k>>2]|0)+-1|0,c[k>>2]=l,!((e|0)==0|(l|0)!=0)):0)oc[c[(c[e>>2]|0)+4>>2]&2047](e);if(!d){i=j;return}c[a+128>>2]=c[a+120>>2];e=c[b>>2]|0;c[g>>2]=e;if((e|0)!=0?(k=e+((c[(c[e>>2]|0)+-12>>2]|0)+4)|0,l=(c[k>>2]|0)+1|0,c[k>>2]=l,(l|0)==0):0)Ha(79054,79014,48,79068);c[(sW(h,g)|0)>>2]=1;if(!e){i=j;return}k=c[(c[e>>2]|0)+-12>>2]|0;d=e+k|0;k=e+(k+4)|0;l=(c[k>>2]|0)+-1|0;c[k>>2]=l;if((d|0)==0|(l|0)!=0){i=j;return}oc[c[(c[d>>2]|0)+4>>2]&2047](d);i=j;return}function lX(a,b){a=a|0;b=b|0;kX(a+-8|0,b);return}function mX(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,j=0;g=i;i=i+16|0;d=g;e=c[a+116>>2]|0;f=c[b>>2]|0;c[d>>2]=f;if((f|0)!=0?(h=f+((c[(c[f>>2]|0)+-12>>2]|0)+4)|0,b=(c[h>>2]|0)+1|0,c[h>>2]=b,(b|0)==0):0)Ha(79054,79014,48,79068);b=a+80|0;if(!(c[(sW(b,d)|0)>>2]|0)){j=a+68|0;h=a+72|0;oG(j,c[h>>2]|0);c[a+76>>2]=0;c[j>>2]=h;c[h>>2]=0;c[a+128>>2]=e;c[(sW(b,d)|0)>>2]=1}if(!f){i=g;return}h=c[(c[f>>2]|0)+-12>>2]|0;b=f+h|0;h=f+(h+4)|0;j=(c[h>>2]|0)+-1|0;c[h>>2]=j;if((b|0)==0|(j|0)!=0){i=g;return}oc[c[(c[b>>2]|0)+4>>2]&2047](b);i=g;return}function nX(a,b){a=a|0;b=b|0;mX(a+-12|0,b);return}function oX(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,j=0;g=i;i=i+16|0;d=g;f=c[a+136>>2]|0;e=f;if((f|0)==(c[a+124>>2]|0)){i=g;return}f=c[b>>2]|0;c[d>>2]=f;if((f|0)!=0?(h=f+((c[(c[f>>2]|0)+-12>>2]|0)+4)|0,b=(c[h>>2]|0)+1|0,c[h>>2]=b,(b|0)==0):0)Ha(79054,79014,48,79068);b=a+80|0;if(!(c[(sW(b,d)|0)>>2]|0)){j=a+68|0;h=a+72|0;oG(j,c[h>>2]|0);c[a+76>>2]=0;c[j>>2]=h;c[h>>2]=0;c[a+128>>2]=e;c[(sW(b,d)|0)>>2]=1}if(!f){i=g;return}h=c[(c[f>>2]|0)+-12>>2]|0;b=f+h|0;h=f+(h+4)|0;j=(c[h>>2]|0)+-1|0;c[h>>2]=j;if((b|0)==0|(j|0)!=0){i=g;return}oc[c[(c[b>>2]|0)+4>>2]&2047](b);i=g;return}function pX(a,b){a=a|0;b=b|0;oX(a+-20|0,b);return}function qX(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,j=0;g=i;i=i+16|0;d=g;f=c[a+132>>2]|0;e=f;if((f|0)==(c[a+124>>2]|0)){i=g;return}f=c[b>>2]|0;c[d>>2]=f;if((f|0)!=0?(h=f+((c[(c[f>>2]|0)+-12>>2]|0)+4)|0,b=(c[h>>2]|0)+1|0,c[h>>2]=b,(b|0)==0):0)Ha(79054,79014,48,79068);b=a+80|0;if(!(c[(sW(b,d)|0)>>2]|0)){j=a+68|0;h=a+72|0;oG(j,c[h>>2]|0);c[a+76>>2]=0;c[j>>2]=h;c[h>>2]=0;c[a+128>>2]=e;c[(sW(b,d)|0)>>2]=1}if(!f){i=g;return}h=c[(c[f>>2]|0)+-12>>2]|0;b=f+h|0;h=f+(h+4)|0;j=(c[h>>2]|0)+-1|0;c[h>>2]=j;if((b|0)==0|(j|0)!=0){i=g;return}oc[c[(c[b>>2]|0)+4>>2]&2047](b);i=g;return}function rX(a,b){a=a|0;b=b|0;qX(a+-24|0,b);return}function sX(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,j=0,k=0,l=0,m=0;k=i;i=i+16|0;d=k;g=a+124|0;f=c[a+132>>2]|0;e=f;if((f|0)==(c[g>>2]|0)){i=k;return}f=c[b>>2]|0;c[d>>2]=f;if((f|0)!=0?(l=f+((c[(c[f>>2]|0)+-12>>2]|0)+4)|0,b=(c[l>>2]|0)+1|0,c[l>>2]=b,(b|0)==0):0)Ha(79054,79014,48,79068);b=a+80|0;if(!(c[(sW(b,d)|0)>>2]|0)){m=a+68|0;l=a+72|0;oG(m,c[l>>2]|0);c[a+76>>2]=0;c[m>>2]=l;c[l>>2]=0;c[a+128>>2]=e;c[(sW(b,d)|0)>>2]=1;b=1}else b=0;if((f|0)!=0?(l=c[(c[f>>2]|0)+-12>>2]|0,h=f+l|0,l=f+(l+4)|0,m=(c[l>>2]|0)+-1|0,c[l>>2]=m,!((h|0)==0|(m|0)!=0)):0){oc[c[(c[h>>2]|0)+4>>2]&2047](h);if(!b){i=k;return}}else j=10;if((j|0)==10?!b:0){i=k;return}c[g>>2]=c[a+140>>2];i=k;return}function tX(a,b){a=a|0;b=b|0;sX(a+-28|0,b);return}function uX(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,j=0,k=0;h=i;i=i+16|0;d=h;e=c[a+116>>2]|0;f=c[b>>2]|0;c[d>>2]=f;if((f|0)!=0?(j=f+((c[(c[f>>2]|0)+-12>>2]|0)+4)|0,b=(c[j>>2]|0)+1|0,c[j>>2]=b,(b|0)==0):0)Ha(79054,79014,48,79068);b=a+80|0;if(!(c[(sW(b,d)|0)>>2]|0)){k=a+68|0;j=a+72|0;oG(k,c[j>>2]|0);c[a+76>>2]=0;c[k>>2]=j;c[j>>2]=0;c[a+128>>2]=e;c[(sW(b,d)|0)>>2]=1;b=1}else b=0;if((f|0)!=0?(j=c[(c[f>>2]|0)+-12>>2]|0,g=f+j|0,j=f+(j+4)|0,k=(c[j>>2]|0)+-1|0,c[j>>2]=k,!((g|0)==0|(k|0)!=0)):0)oc[c[(c[g>>2]|0)+4>>2]&2047](g);if(!b){i=h;return}c[a+124>>2]=c[a+140>>2];i=h;return}function vX(a,b){a=a|0;b=b|0;uX(a+-16|0,b);return}function wX(b,d){b=b|0;d=d|0;c[b+144>>2]=b+132;a[b+92>>0]=1;return}function xX(b,d){b=b|0;d=d|0;b=b+-32|0;c[b+144>>2]=b+132;a[b+92>>0]=1;return}function yX(b,d){b=b|0;d=d|0;c[b+144>>2]=b+136;a[b+92>>0]=1;return}function zX(b,d){b=b|0;d=d|0;b=b+-36|0;c[b+144>>2]=b+136;a[b+92>>0]=1;return}function AX(a,b){a=a|0;b=b|0;c[a+144>>2]=a+140;return}function BX(a,b){a=a|0;b=b|0;a=a+-40|0;c[a+144>>2]=a+140;return}function CX(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0;m=i;i=i+16|0;g=m+8|0;l=m;k=b+124|0;e=c[d>>2]|0;if(!e)Ha(78999,79014,102,79043);e=c[e+8>>2]|0;c[b+140>>2]=e;c[k>>2]=e;c[b+136>>2]=e;c[b+132>>2]=e;e=c[d>>2]|0;if(!e)Ha(78999,79014,102,79043);h=c[e+4>>2]|0;f=h;c[b+120>>2]=f;c[b+116>>2]=f;j=b+144|0;c[j>>2]=0;e=b+68|0;n=b+72|0;oG(e,c[n>>2]|0);c[b+76>>2]=0;c[e>>2]=n;c[n>>2]=0;n=b+80|0;e=b+84|0;oG(n,c[e>>2]|0);c[b+88>>2]=0;c[n>>2]=e;c[e>>2]=0;a[b+92>>0]=1;kM(g,1,4);rM(b+96|0,g)|0;c[b+104>>2]=0;c[b+108>>2]=1;e=c[d>>2]|0;c[l>>2]=e;if((e|0)!=0?(g=e+((c[(c[e>>2]|0)+-12>>2]|0)+4)|0,n=(c[g>>2]|0)+1|0,c[g>>2]=n,(n|0)==0):0)Ha(79054,79014,48,79068);pc[c[(c[b>>2]|0)+76>>2]&1023](b,l);a:do if((h|0)!=(c[k>>2]|0)){g=b+128|0;while(1){e=c[d>>2]|0;if(!e)break;if((h|0)==(c[e+8>>2]|0))break a;c[g>>2]=f+4;pc[c[(c[b>>2]|0)+8>>2]&1023](b,h);e=c[j>>2]|0;if(e){c[e>>2]=h+4;c[j>>2]=0}f=c[g>>2]|0;h=f;if((h|0)==(c[k>>2]|0))break a}Ha(78999,79014,102,79043)}while(0);pc[c[(c[b>>2]|0)+80>>2]&1023](b,l);e=c[l>>2]|0;if(!e){i=m;return}b=c[(c[e>>2]|0)+-12>>2]|0;f=e+b|0;b=e+(b+4)|0;n=(c[b>>2]|0)+-1|0;c[b>>2]=n;if((f|0)==0|(n|0)!=0){i=m;return}oc[c[(c[f>>2]|0)+4>>2]&2047](f);i=m;return}function DX(a,b){a=a|0;b=b|0;CX(a+-56|0,b);return}function EX(a){a=a|0;c[a>>2]=45564;c[a+4>>2]=45664;c[a+8>>2]=45696;c[a+12>>2]=45728;c[a+16>>2]=45760;c[a+20>>2]=45792;c[a+24>>2]=45824;c[a+28>>2]=45856;c[a+32>>2]=45888;c[a+36>>2]=45920;c[a+40>>2]=45952;c[a+44>>2]=45984;c[a+48>>2]=46016;c[a+52>>2]=46048;c[a+56>>2]=46080;c[a+60>>2]=46112;c[a+64>>2]=46144;oG(a+80|0,c[a+84>>2]|0);oG(a+68|0,c[a+72>>2]|0);return} +function w1(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0;do if(a>>>0<245){o=a>>>0<11?16:a+11&-8;a=o>>>3;i=c[12840]|0;d=i>>>a;if(d&3){a=(d&1^1)+a|0;e=a<<1;d=51400+(e<<2)|0;e=51400+(e+2<<2)|0;f=c[e>>2]|0;g=f+8|0;h=c[g>>2]|0;do if((d|0)!=(h|0)){if(h>>>0<(c[12844]|0)>>>0)Ib();b=h+12|0;if((c[b>>2]|0)==(f|0)){c[b>>2]=d;c[e>>2]=h;break}else Ib()}else c[12840]=i&~(1<>2]=M|3;M=f+(M|4)|0;c[M>>2]=c[M>>2]|1;M=g;return M|0}h=c[12842]|0;if(o>>>0>h>>>0){if(d){e=2<>>12&16;e=e>>>j;f=e>>>5&8;e=e>>>f;g=e>>>2&4;e=e>>>g;d=e>>>1&2;e=e>>>d;a=e>>>1&1;a=(f|j|g|d|a)+(e>>>a)|0;e=a<<1;d=51400+(e<<2)|0;e=51400+(e+2<<2)|0;g=c[e>>2]|0;j=g+8|0;f=c[j>>2]|0;do if((d|0)!=(f|0)){if(f>>>0<(c[12844]|0)>>>0)Ib();b=f+12|0;if((c[b>>2]|0)==(g|0)){c[b>>2]=d;c[e>>2]=f;k=c[12842]|0;break}else Ib()}else{c[12840]=i&~(1<>2]=o|3;i=g+o|0;c[g+(o|4)>>2]=h|1;c[g+M>>2]=h;if(k){f=c[12845]|0;d=k>>>3;b=d<<1;e=51400+(b<<2)|0;a=c[12840]|0;d=1<>2]|0;if(b>>>0<(c[12844]|0)>>>0)Ib();else{l=a;m=b}}else{c[12840]=a|d;l=51400+(b+2<<2)|0;m=e}c[l>>2]=f;c[m+12>>2]=f;c[f+8>>2]=m;c[f+12>>2]=e}c[12842]=h;c[12845]=i;M=j;return M|0}a=c[12841]|0;if(a){d=(a&0-a)+-1|0;L=d>>>12&16;d=d>>>L;K=d>>>5&8;d=d>>>K;M=d>>>2&4;d=d>>>M;a=d>>>1&2;d=d>>>a;e=d>>>1&1;e=c[51664+((K|L|M|a|e)+(d>>>e)<<2)>>2]|0;d=(c[e+4>>2]&-8)-o|0;a=e;while(1){b=c[a+16>>2]|0;if(!b){b=c[a+20>>2]|0;if(!b){j=d;break}}a=(c[b+4>>2]&-8)-o|0;M=a>>>0>>0;d=M?a:d;a=b;e=M?b:e}g=c[12844]|0;if(e>>>0>>0)Ib();i=e+o|0;if(e>>>0>=i>>>0)Ib();h=c[e+24>>2]|0;d=c[e+12>>2]|0;do if((d|0)==(e|0)){a=e+20|0;b=c[a>>2]|0;if(!b){a=e+16|0;b=c[a>>2]|0;if(!b){n=0;break}}while(1){d=b+20|0;f=c[d>>2]|0;if(f){b=f;a=d;continue}d=b+16|0;f=c[d>>2]|0;if(!f)break;else{b=f;a=d}}if(a>>>0>>0)Ib();else{c[a>>2]=0;n=b;break}}else{f=c[e+8>>2]|0;if(f>>>0>>0)Ib();b=f+12|0;if((c[b>>2]|0)!=(e|0))Ib();a=d+8|0;if((c[a>>2]|0)==(e|0)){c[b>>2]=d;c[a>>2]=f;n=d;break}else Ib()}while(0);do if(h){b=c[e+28>>2]|0;a=51664+(b<<2)|0;if((e|0)==(c[a>>2]|0)){c[a>>2]=n;if(!n){c[12841]=c[12841]&~(1<>>0<(c[12844]|0)>>>0)Ib();b=h+16|0;if((c[b>>2]|0)==(e|0))c[b>>2]=n;else c[h+20>>2]=n;if(!n)break}a=c[12844]|0;if(n>>>0>>0)Ib();c[n+24>>2]=h;b=c[e+16>>2]|0;do if(b)if(b>>>0>>0)Ib();else{c[n+16>>2]=b;c[b+24>>2]=n;break}while(0);b=c[e+20>>2]|0;if(b)if(b>>>0<(c[12844]|0)>>>0)Ib();else{c[n+20>>2]=b;c[b+24>>2]=n;break}}while(0);if(j>>>0<16){M=j+o|0;c[e+4>>2]=M|3;M=e+(M+4)|0;c[M>>2]=c[M>>2]|1}else{c[e+4>>2]=o|3;c[e+(o|4)>>2]=j|1;c[e+(j+o)>>2]=j;b=c[12842]|0;if(b){g=c[12845]|0;d=b>>>3;b=d<<1;f=51400+(b<<2)|0;a=c[12840]|0;d=1<>2]|0;if(a>>>0<(c[12844]|0)>>>0)Ib();else{p=b;q=a}}else{c[12840]=a|d;p=51400+(b+2<<2)|0;q=f}c[p>>2]=g;c[q+12>>2]=g;c[g+8>>2]=q;c[g+12>>2]=f}c[12842]=j;c[12845]=i}M=e+8|0;return M|0}else q=o}else q=o}else if(a>>>0<=4294967231){a=a+11|0;m=a&-8;l=c[12841]|0;if(l){d=0-m|0;a=a>>>8;if(a)if(m>>>0>16777215)k=31;else{q=(a+1048320|0)>>>16&8;v=a<>>16&4;v=v<>>16&2;k=14-(p|q|k)+(v<>>15)|0;k=m>>>(k+7|0)&1|k<<1}else k=0;a=c[51664+(k<<2)>>2]|0;a:do if(!a){f=0;a=0;v=86}else{h=d;f=0;i=m<<((k|0)==31?0:25-(k>>>1)|0);j=a;a=0;while(1){g=c[j+4>>2]&-8;d=g-m|0;if(d>>>0>>0)if((g|0)==(m|0)){g=j;a=j;v=90;break a}else a=j;else d=h;v=c[j+20>>2]|0;j=c[j+16+(i>>>31<<2)>>2]|0;f=(v|0)==0|(v|0)==(j|0)?f:v;if(!j){v=86;break}else{h=d;i=i<<1}}}while(0);if((v|0)==86){if((f|0)==0&(a|0)==0){a=2<>>12&16;a=a>>>n;l=a>>>5&8;a=a>>>l;p=a>>>2&4;a=a>>>p;q=a>>>1&2;a=a>>>q;f=a>>>1&1;f=c[51664+((l|n|p|q|f)+(a>>>f)<<2)>>2]|0;a=0}if(!f){i=d;j=a}else{g=f;v=90}}if((v|0)==90)while(1){v=0;q=(c[g+4>>2]&-8)-m|0;f=q>>>0>>0;d=f?q:d;a=f?g:a;f=c[g+16>>2]|0;if(f){g=f;v=90;continue}g=c[g+20>>2]|0;if(!g){i=d;j=a;break}else v=90}if((j|0)!=0?i>>>0<((c[12842]|0)-m|0)>>>0:0){f=c[12844]|0;if(j>>>0>>0)Ib();h=j+m|0;if(j>>>0>=h>>>0)Ib();g=c[j+24>>2]|0;d=c[j+12>>2]|0;do if((d|0)==(j|0)){a=j+20|0;b=c[a>>2]|0;if(!b){a=j+16|0;b=c[a>>2]|0;if(!b){o=0;break}}while(1){d=b+20|0;e=c[d>>2]|0;if(e){b=e;a=d;continue}d=b+16|0;e=c[d>>2]|0;if(!e)break;else{b=e;a=d}}if(a>>>0>>0)Ib();else{c[a>>2]=0;o=b;break}}else{e=c[j+8>>2]|0;if(e>>>0>>0)Ib();b=e+12|0;if((c[b>>2]|0)!=(j|0))Ib();a=d+8|0;if((c[a>>2]|0)==(j|0)){c[b>>2]=d;c[a>>2]=e;o=d;break}else Ib()}while(0);do if(g){b=c[j+28>>2]|0;a=51664+(b<<2)|0;if((j|0)==(c[a>>2]|0)){c[a>>2]=o;if(!o){c[12841]=c[12841]&~(1<>>0<(c[12844]|0)>>>0)Ib();b=g+16|0;if((c[b>>2]|0)==(j|0))c[b>>2]=o;else c[g+20>>2]=o;if(!o)break}a=c[12844]|0;if(o>>>0>>0)Ib();c[o+24>>2]=g;b=c[j+16>>2]|0;do if(b)if(b>>>0>>0)Ib();else{c[o+16>>2]=b;c[b+24>>2]=o;break}while(0);b=c[j+20>>2]|0;if(b)if(b>>>0<(c[12844]|0)>>>0)Ib();else{c[o+20>>2]=b;c[b+24>>2]=o;break}}while(0);b:do if(i>>>0>=16){c[j+4>>2]=m|3;c[j+(m|4)>>2]=i|1;c[j+(i+m)>>2]=i;b=i>>>3;if(i>>>0<256){a=b<<1;e=51400+(a<<2)|0;d=c[12840]|0;b=1<>2]|0;if(a>>>0<(c[12844]|0)>>>0)Ib();else{s=b;t=a}}else{c[12840]=d|b;s=51400+(a+2<<2)|0;t=e}c[s>>2]=h;c[t+12>>2]=h;c[j+(m+8)>>2]=t;c[j+(m+12)>>2]=e;break}b=i>>>8;if(b)if(i>>>0>16777215)e=31;else{L=(b+1048320|0)>>>16&8;M=b<>>16&4;M=M<>>16&2;e=14-(K|L|e)+(M<>>15)|0;e=i>>>(e+7|0)&1|e<<1}else e=0;b=51664+(e<<2)|0;c[j+(m+28)>>2]=e;c[j+(m+20)>>2]=0;c[j+(m+16)>>2]=0;a=c[12841]|0;d=1<>2]=h;c[j+(m+24)>>2]=b;c[j+(m+12)>>2]=h;c[j+(m+8)>>2]=h;break}b=c[b>>2]|0;c:do if((c[b+4>>2]&-8|0)!=(i|0)){e=i<<((e|0)==31?0:25-(e>>>1)|0);while(1){a=b+16+(e>>>31<<2)|0;d=c[a>>2]|0;if(!d)break;if((c[d+4>>2]&-8|0)==(i|0)){y=d;break c}else{e=e<<1;b=d}}if(a>>>0<(c[12844]|0)>>>0)Ib();else{c[a>>2]=h;c[j+(m+24)>>2]=b;c[j+(m+12)>>2]=h;c[j+(m+8)>>2]=h;break b}}else y=b;while(0);b=y+8|0;a=c[b>>2]|0;M=c[12844]|0;if(a>>>0>=M>>>0&y>>>0>=M>>>0){c[a+12>>2]=h;c[b>>2]=h;c[j+(m+8)>>2]=a;c[j+(m+12)>>2]=y;c[j+(m+24)>>2]=0;break}else Ib()}else{M=i+m|0;c[j+4>>2]=M|3;M=j+(M+4)|0;c[M>>2]=c[M>>2]|1}while(0);M=j+8|0;return M|0}else q=m}else q=m}else q=-1;while(0);d=c[12842]|0;if(d>>>0>=q>>>0){b=d-q|0;a=c[12845]|0;if(b>>>0>15){c[12845]=a+q;c[12842]=b;c[a+(q+4)>>2]=b|1;c[a+d>>2]=b;c[a+4>>2]=q|3}else{c[12842]=0;c[12845]=0;c[a+4>>2]=d|3;M=a+(d+4)|0;c[M>>2]=c[M>>2]|1}M=a+8|0;return M|0}a=c[12843]|0;if(a>>>0>q>>>0){L=a-q|0;c[12843]=L;M=c[12846]|0;c[12846]=M+q;c[M+(q+4)>>2]=L|1;c[M+4>>2]=q|3;M=M+8|0;return M|0}do if(!(c[12958]|0)){a=Pa(30)|0;if(!(a+-1&a)){c[12960]=a;c[12959]=a;c[12961]=-1;c[12962]=-1;c[12963]=0;c[12951]=0;c[12958]=(nb(0)|0)&-16^1431655768;break}else Ib()}while(0);j=q+48|0;i=c[12960]|0;k=q+47|0;h=i+k|0;i=0-i|0;l=h&i;if(l>>>0<=q>>>0){M=0;return M|0}a=c[12950]|0;if((a|0)!=0?(t=c[12948]|0,y=t+l|0,y>>>0<=t>>>0|y>>>0>a>>>0):0){M=0;return M|0}d:do if(!(c[12951]&4)){a=c[12846]|0;e:do if(a){f=51808;while(1){d=c[f>>2]|0;if(d>>>0<=a>>>0?(r=f+4|0,(d+(c[r>>2]|0)|0)>>>0>a>>>0):0){g=f;a=r;break}f=c[f+8>>2]|0;if(!f){v=174;break e}}d=h-(c[12843]|0)&i;if(d>>>0<2147483647){f=Ma(d|0)|0;y=(f|0)==((c[g>>2]|0)+(c[a>>2]|0)|0);a=y?d:0;if(y){if((f|0)!=(-1|0)){w=f;p=a;v=194;break d}}else v=184}else a=0}else v=174;while(0);do if((v|0)==174){g=Ma(0)|0;if((g|0)!=(-1|0)){a=g;d=c[12959]|0;f=d+-1|0;if(!(f&a))d=l;else d=l-a+(f+a&0-d)|0;a=c[12948]|0;f=a+d|0;if(d>>>0>q>>>0&d>>>0<2147483647){y=c[12950]|0;if((y|0)!=0?f>>>0<=a>>>0|f>>>0>y>>>0:0){a=0;break}f=Ma(d|0)|0;y=(f|0)==(g|0);a=y?d:0;if(y){w=g;p=a;v=194;break d}else v=184}else a=0}else a=0}while(0);f:do if((v|0)==184){g=0-d|0;do if(j>>>0>d>>>0&(d>>>0<2147483647&(f|0)!=(-1|0))?(u=c[12960]|0,u=k-d+u&0-u,u>>>0<2147483647):0)if((Ma(u|0)|0)==(-1|0)){Ma(g|0)|0;break f}else{d=u+d|0;break}while(0);if((f|0)!=(-1|0)){w=f;p=d;v=194;break d}}while(0);c[12951]=c[12951]|4;v=191}else{a=0;v=191}while(0);if((((v|0)==191?l>>>0<2147483647:0)?(w=Ma(l|0)|0,x=Ma(0)|0,w>>>0>>0&((w|0)!=(-1|0)&(x|0)!=(-1|0))):0)?(z=x-w|0,A=z>>>0>(q+40|0)>>>0,A):0){p=A?z:a;v=194}if((v|0)==194){a=(c[12948]|0)+p|0;c[12948]=a;if(a>>>0>(c[12949]|0)>>>0)c[12949]=a;h=c[12846]|0;g:do if(h){g=51808;do{a=c[g>>2]|0;d=g+4|0;f=c[d>>2]|0;if((w|0)==(a+f|0)){B=a;C=d;D=f;E=g;v=204;break}g=c[g+8>>2]|0}while((g|0)!=0);if(((v|0)==204?(c[E+12>>2]&8|0)==0:0)?h>>>0>>0&h>>>0>=B>>>0:0){c[C>>2]=D+p;M=(c[12843]|0)+p|0;L=h+8|0;L=(L&7|0)==0?0:0-L&7;K=M-L|0;c[12846]=h+L;c[12843]=K;c[h+(L+4)>>2]=K|1;c[h+(M+4)>>2]=40;c[12847]=c[12962];break}a=c[12844]|0;if(w>>>0>>0){c[12844]=w;a=w}d=w+p|0;g=51808;while(1){if((c[g>>2]|0)==(d|0)){f=g;d=g;v=212;break}g=c[g+8>>2]|0;if(!g){d=51808;break}}if((v|0)==212)if(!(c[d+12>>2]&8)){c[f>>2]=w;n=d+4|0;c[n>>2]=(c[n>>2]|0)+p;n=w+8|0;n=(n&7|0)==0?0:0-n&7;k=w+(p+8)|0;k=(k&7|0)==0?0:0-k&7;b=w+(k+p)|0;m=n+q|0;o=w+m|0;l=b-(w+n)-q|0;c[w+(n+4)>>2]=q|3;h:do if((b|0)!=(h|0)){if((b|0)==(c[12845]|0)){M=(c[12842]|0)+l|0;c[12842]=M;c[12845]=o;c[w+(m+4)>>2]=M|1;c[w+(M+m)>>2]=M;break}i=p+4|0;d=c[w+(i+k)>>2]|0;if((d&3|0)==1){j=d&-8;g=d>>>3;i:do if(d>>>0>=256){h=c[w+((k|24)+p)>>2]|0;e=c[w+(p+12+k)>>2]|0;do if((e|0)==(b|0)){f=k|16;e=w+(i+f)|0;d=c[e>>2]|0;if(!d){e=w+(f+p)|0;d=c[e>>2]|0;if(!d){J=0;break}}while(1){f=d+20|0;g=c[f>>2]|0;if(g){d=g;e=f;continue}f=d+16|0;g=c[f>>2]|0;if(!g)break;else{d=g;e=f}}if(e>>>0>>0)Ib();else{c[e>>2]=0;J=d;break}}else{f=c[w+((k|8)+p)>>2]|0;if(f>>>0>>0)Ib();a=f+12|0;if((c[a>>2]|0)!=(b|0))Ib();d=e+8|0;if((c[d>>2]|0)==(b|0)){c[a>>2]=e;c[d>>2]=f;J=e;break}else Ib()}while(0);if(!h)break;a=c[w+(p+28+k)>>2]|0;d=51664+(a<<2)|0;do if((b|0)!=(c[d>>2]|0)){if(h>>>0<(c[12844]|0)>>>0)Ib();a=h+16|0;if((c[a>>2]|0)==(b|0))c[a>>2]=J;else c[h+20>>2]=J;if(!J)break i}else{c[d>>2]=J;if(J)break;c[12841]=c[12841]&~(1<>>0>>0)Ib();c[J+24>>2]=h;b=k|16;a=c[w+(b+p)>>2]|0;do if(a)if(a>>>0>>0)Ib();else{c[J+16>>2]=a;c[a+24>>2]=J;break}while(0);b=c[w+(i+b)>>2]|0;if(!b)break;if(b>>>0<(c[12844]|0)>>>0)Ib();else{c[J+20>>2]=b;c[b+24>>2]=J;break}}else{e=c[w+((k|8)+p)>>2]|0;f=c[w+(p+12+k)>>2]|0;d=51400+(g<<1<<2)|0;do if((e|0)!=(d|0)){if(e>>>0>>0)Ib();if((c[e+12>>2]|0)==(b|0))break;Ib()}while(0);if((f|0)==(e|0)){c[12840]=c[12840]&~(1<>>0>>0)Ib();a=f+8|0;if((c[a>>2]|0)==(b|0)){F=a;break}Ib()}while(0);c[e+12>>2]=f;c[F>>2]=e}while(0);b=w+((j|k)+p)|0;f=j+l|0}else f=l;b=b+4|0;c[b>>2]=c[b>>2]&-2;c[w+(m+4)>>2]=f|1;c[w+(f+m)>>2]=f;b=f>>>3;if(f>>>0<256){a=b<<1;e=51400+(a<<2)|0;d=c[12840]|0;b=1<>2]|0;if(a>>>0>=(c[12844]|0)>>>0){K=b;L=a;break}Ib()}while(0);c[K>>2]=o;c[L+12>>2]=o;c[w+(m+8)>>2]=L;c[w+(m+12)>>2]=e;break}b=f>>>8;do if(!b)e=0;else{if(f>>>0>16777215){e=31;break}K=(b+1048320|0)>>>16&8;L=b<>>16&4;L=L<>>16&2;e=14-(J|K|e)+(L<>>15)|0;e=f>>>(e+7|0)&1|e<<1}while(0);b=51664+(e<<2)|0;c[w+(m+28)>>2]=e;c[w+(m+20)>>2]=0;c[w+(m+16)>>2]=0;a=c[12841]|0;d=1<>2]=o;c[w+(m+24)>>2]=b;c[w+(m+12)>>2]=o;c[w+(m+8)>>2]=o;break}b=c[b>>2]|0;j:do if((c[b+4>>2]&-8|0)!=(f|0)){e=f<<((e|0)==31?0:25-(e>>>1)|0);while(1){a=b+16+(e>>>31<<2)|0;d=c[a>>2]|0;if(!d)break;if((c[d+4>>2]&-8|0)==(f|0)){M=d;break j}else{e=e<<1;b=d}}if(a>>>0<(c[12844]|0)>>>0)Ib();else{c[a>>2]=o;c[w+(m+24)>>2]=b;c[w+(m+12)>>2]=o;c[w+(m+8)>>2]=o;break h}}else M=b;while(0);b=M+8|0;a=c[b>>2]|0;L=c[12844]|0;if(a>>>0>=L>>>0&M>>>0>=L>>>0){c[a+12>>2]=o;c[b>>2]=o;c[w+(m+8)>>2]=a;c[w+(m+12)>>2]=M;c[w+(m+24)>>2]=0;break}else Ib()}else{M=(c[12843]|0)+l|0;c[12843]=M;c[12846]=o;c[w+(m+4)>>2]=M|1}while(0);M=w+(n|8)|0;return M|0}else d=51808;while(1){a=c[d>>2]|0;if(a>>>0<=h>>>0?(b=c[d+4>>2]|0,e=a+b|0,e>>>0>h>>>0):0)break;d=c[d+8>>2]|0}f=a+(b+-39)|0;a=a+(b+-47+((f&7|0)==0?0:0-f&7))|0;f=h+16|0;a=a>>>0>>0?h:a;b=a+8|0;d=w+8|0;d=(d&7|0)==0?0:0-d&7;M=p+-40-d|0;c[12846]=w+d;c[12843]=M;c[w+(d+4)>>2]=M|1;c[w+(p+-36)>>2]=40;c[12847]=c[12962];d=a+4|0;c[d>>2]=27;c[b>>2]=c[12952];c[b+4>>2]=c[12953];c[b+8>>2]=c[12954];c[b+12>>2]=c[12955];c[12952]=w;c[12953]=p;c[12955]=0;c[12954]=b;b=a+28|0;c[b>>2]=7;if((a+32|0)>>>0>>0)do{M=b;b=b+4|0;c[b>>2]=7}while((M+8|0)>>>0>>0);if((a|0)!=(h|0)){g=a-h|0;c[d>>2]=c[d>>2]&-2;c[h+4>>2]=g|1;c[a>>2]=g;b=g>>>3;if(g>>>0<256){a=b<<1;e=51400+(a<<2)|0;d=c[12840]|0;b=1<>2]|0;if(a>>>0<(c[12844]|0)>>>0)Ib();else{G=b;H=a}}else{c[12840]=d|b;G=51400+(a+2<<2)|0;H=e}c[G>>2]=h;c[H+12>>2]=h;c[h+8>>2]=H;c[h+12>>2]=e;break}b=g>>>8;if(b)if(g>>>0>16777215)e=31;else{L=(b+1048320|0)>>>16&8;M=b<>>16&4;M=M<>>16&2;e=14-(K|L|e)+(M<>>15)|0;e=g>>>(e+7|0)&1|e<<1}else e=0;d=51664+(e<<2)|0;c[h+28>>2]=e;c[h+20>>2]=0;c[f>>2]=0;b=c[12841]|0;a=1<>2]=h;c[h+24>>2]=d;c[h+12>>2]=h;c[h+8>>2]=h;break}b=c[d>>2]|0;k:do if((c[b+4>>2]&-8|0)!=(g|0)){e=g<<((e|0)==31?0:25-(e>>>1)|0);while(1){a=b+16+(e>>>31<<2)|0;d=c[a>>2]|0;if(!d)break;if((c[d+4>>2]&-8|0)==(g|0)){I=d;break k}else{e=e<<1;b=d}}if(a>>>0<(c[12844]|0)>>>0)Ib();else{c[a>>2]=h;c[h+24>>2]=b;c[h+12>>2]=h;c[h+8>>2]=h;break g}}else I=b;while(0);b=I+8|0;a=c[b>>2]|0;M=c[12844]|0;if(a>>>0>=M>>>0&I>>>0>=M>>>0){c[a+12>>2]=h;c[b>>2]=h;c[h+8>>2]=a;c[h+12>>2]=I;c[h+24>>2]=0;break}else Ib()}}else{M=c[12844]|0;if((M|0)==0|w>>>0>>0)c[12844]=w;c[12952]=w;c[12953]=p;c[12955]=0;c[12849]=c[12958];c[12848]=-1;b=0;do{M=b<<1;L=51400+(M<<2)|0;c[51400+(M+3<<2)>>2]=L;c[51400+(M+2<<2)>>2]=L;b=b+1|0}while((b|0)!=32);M=w+8|0;M=(M&7|0)==0?0:0-M&7;L=p+-40-M|0;c[12846]=w+M;c[12843]=L;c[w+(M+4)>>2]=L|1;c[w+(p+-36)>>2]=40;c[12847]=c[12962]}while(0);b=c[12843]|0;if(b>>>0>q>>>0){L=b-q|0;c[12843]=L;M=c[12846]|0;c[12846]=M+q;c[M+(q+4)>>2]=L|1;c[M+4>>2]=q|3;M=M+8|0;return M|0}}c[(M$()|0)>>2]=12;M=0;return M|0}function x1(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0;if(!a)return;b=a+-8|0;i=c[12844]|0;if(b>>>0>>0)Ib();d=c[a+-4>>2]|0;e=d&3;if((e|0)==1)Ib();o=d&-8;q=a+(o+-8)|0;do if(!(d&1)){b=c[b>>2]|0;if(!e)return;j=-8-b|0;l=a+j|0;m=b+o|0;if(l>>>0>>0)Ib();if((l|0)==(c[12845]|0)){b=a+(o+-4)|0;d=c[b>>2]|0;if((d&3|0)!=3){u=l;g=m;break}c[12842]=m;c[b>>2]=d&-2;c[a+(j+4)>>2]=m|1;c[q>>2]=m;return}f=b>>>3;if(b>>>0<256){e=c[a+(j+8)>>2]|0;d=c[a+(j+12)>>2]|0;b=51400+(f<<1<<2)|0;if((e|0)!=(b|0)){if(e>>>0>>0)Ib();if((c[e+12>>2]|0)!=(l|0))Ib()}if((d|0)==(e|0)){c[12840]=c[12840]&~(1<>>0>>0)Ib();b=d+8|0;if((c[b>>2]|0)==(l|0))h=b;else Ib()}else h=d+8|0;c[e+12>>2]=d;c[h>>2]=e;u=l;g=m;break}h=c[a+(j+24)>>2]|0;e=c[a+(j+12)>>2]|0;do if((e|0)==(l|0)){d=a+(j+20)|0;b=c[d>>2]|0;if(!b){d=a+(j+16)|0;b=c[d>>2]|0;if(!b){k=0;break}}while(1){e=b+20|0;f=c[e>>2]|0;if(f){b=f;d=e;continue}e=b+16|0;f=c[e>>2]|0;if(!f)break;else{b=f;d=e}}if(d>>>0>>0)Ib();else{c[d>>2]=0;k=b;break}}else{f=c[a+(j+8)>>2]|0;if(f>>>0>>0)Ib();b=f+12|0;if((c[b>>2]|0)!=(l|0))Ib();d=e+8|0;if((c[d>>2]|0)==(l|0)){c[b>>2]=e;c[d>>2]=f;k=e;break}else Ib()}while(0);if(h){b=c[a+(j+28)>>2]|0;d=51664+(b<<2)|0;if((l|0)==(c[d>>2]|0)){c[d>>2]=k;if(!k){c[12841]=c[12841]&~(1<>>0<(c[12844]|0)>>>0)Ib();b=h+16|0;if((c[b>>2]|0)==(l|0))c[b>>2]=k;else c[h+20>>2]=k;if(!k){u=l;g=m;break}}d=c[12844]|0;if(k>>>0>>0)Ib();c[k+24>>2]=h;b=c[a+(j+16)>>2]|0;do if(b)if(b>>>0>>0)Ib();else{c[k+16>>2]=b;c[b+24>>2]=k;break}while(0);b=c[a+(j+20)>>2]|0;if(b)if(b>>>0<(c[12844]|0)>>>0)Ib();else{c[k+20>>2]=b;c[b+24>>2]=k;u=l;g=m;break}else{u=l;g=m}}else{u=l;g=m}}else{u=b;g=o}while(0);if(u>>>0>=q>>>0)Ib();b=a+(o+-4)|0;d=c[b>>2]|0;if(!(d&1))Ib();if(!(d&2)){if((q|0)==(c[12846]|0)){t=(c[12843]|0)+g|0;c[12843]=t;c[12846]=u;c[u+4>>2]=t|1;if((u|0)!=(c[12845]|0))return;c[12845]=0;c[12842]=0;return}if((q|0)==(c[12845]|0)){t=(c[12842]|0)+g|0;c[12842]=t;c[12845]=u;c[u+4>>2]=t|1;c[u+t>>2]=t;return}g=(d&-8)+g|0;f=d>>>3;do if(d>>>0>=256){h=c[a+(o+16)>>2]|0;b=c[a+(o|4)>>2]|0;do if((b|0)==(q|0)){d=a+(o+12)|0;b=c[d>>2]|0;if(!b){d=a+(o+8)|0;b=c[d>>2]|0;if(!b){p=0;break}}while(1){e=b+20|0;f=c[e>>2]|0;if(f){b=f;d=e;continue}e=b+16|0;f=c[e>>2]|0;if(!f)break;else{b=f;d=e}}if(d>>>0<(c[12844]|0)>>>0)Ib();else{c[d>>2]=0;p=b;break}}else{d=c[a+o>>2]|0;if(d>>>0<(c[12844]|0)>>>0)Ib();e=d+12|0;if((c[e>>2]|0)!=(q|0))Ib();f=b+8|0;if((c[f>>2]|0)==(q|0)){c[e>>2]=b;c[f>>2]=d;p=b;break}else Ib()}while(0);if(h){b=c[a+(o+20)>>2]|0;d=51664+(b<<2)|0;if((q|0)==(c[d>>2]|0)){c[d>>2]=p;if(!p){c[12841]=c[12841]&~(1<>>0<(c[12844]|0)>>>0)Ib();b=h+16|0;if((c[b>>2]|0)==(q|0))c[b>>2]=p;else c[h+20>>2]=p;if(!p)break}d=c[12844]|0;if(p>>>0>>0)Ib();c[p+24>>2]=h;b=c[a+(o+8)>>2]|0;do if(b)if(b>>>0>>0)Ib();else{c[p+16>>2]=b;c[b+24>>2]=p;break}while(0);b=c[a+(o+12)>>2]|0;if(b)if(b>>>0<(c[12844]|0)>>>0)Ib();else{c[p+20>>2]=b;c[b+24>>2]=p;break}}}else{e=c[a+o>>2]|0;d=c[a+(o|4)>>2]|0;b=51400+(f<<1<<2)|0;if((e|0)!=(b|0)){if(e>>>0<(c[12844]|0)>>>0)Ib();if((c[e+12>>2]|0)!=(q|0))Ib()}if((d|0)==(e|0)){c[12840]=c[12840]&~(1<>>0<(c[12844]|0)>>>0)Ib();b=d+8|0;if((c[b>>2]|0)==(q|0))n=b;else Ib()}else n=d+8|0;c[e+12>>2]=d;c[n>>2]=e}while(0);c[u+4>>2]=g|1;c[u+g>>2]=g;if((u|0)==(c[12845]|0)){c[12842]=g;return}}else{c[b>>2]=d&-2;c[u+4>>2]=g|1;c[u+g>>2]=g}b=g>>>3;if(g>>>0<256){d=b<<1;f=51400+(d<<2)|0;e=c[12840]|0;b=1<>2]|0;if(d>>>0<(c[12844]|0)>>>0)Ib();else{r=b;s=d}}else{c[12840]=e|b;r=51400+(d+2<<2)|0;s=f}c[r>>2]=u;c[s+12>>2]=u;c[u+8>>2]=s;c[u+12>>2]=f;return}b=g>>>8;if(b)if(g>>>0>16777215)f=31;else{r=(b+1048320|0)>>>16&8;s=b<>>16&4;s=s<>>16&2;f=14-(q|r|f)+(s<>>15)|0;f=g>>>(f+7|0)&1|f<<1}else f=0;b=51664+(f<<2)|0;c[u+28>>2]=f;c[u+20>>2]=0;c[u+16>>2]=0;d=c[12841]|0;e=1<>2]|0;b:do if((c[b+4>>2]&-8|0)!=(g|0)){f=g<<((f|0)==31?0:25-(f>>>1)|0);while(1){d=b+16+(f>>>31<<2)|0;e=c[d>>2]|0;if(!e)break;if((c[e+4>>2]&-8|0)==(g|0)){t=e;break b}else{f=f<<1;b=e}}if(d>>>0<(c[12844]|0)>>>0)Ib();else{c[d>>2]=u;c[u+24>>2]=b;c[u+12>>2]=u;c[u+8>>2]=u;break a}}else t=b;while(0);b=t+8|0;d=c[b>>2]|0;s=c[12844]|0;if(d>>>0>=s>>>0&t>>>0>=s>>>0){c[d+12>>2]=u;c[b>>2]=u;c[u+8>>2]=d;c[u+12>>2]=t;c[u+24>>2]=0;break}else Ib()}else{c[12841]=d|e;c[b>>2]=u;c[u+24>>2]=b;c[u+12>>2]=u;c[u+8>>2]=u}while(0);u=(c[12848]|0)+-1|0;c[12848]=u;if(!u)b=51816;else return;while(1){b=c[b>>2]|0;if(!b)break;else b=b+8|0}c[12848]=-1;return}function y1(a,b){a=a|0;b=b|0;var d=0;if(a){d=$(b,a)|0;if((b|a)>>>0>65535)d=((d>>>0)/(a>>>0)|0|0)==(b|0)?d:-1}else d=0;b=w1(d)|0;if(!b)return b|0;if(!(c[b+-4>>2]&3))return b|0;Qba(b|0,0,d|0)|0;return b|0}function z1(a,b){a=a|0;b=b|0;var d=0,e=0;if(!a){a=w1(b)|0;return a|0}if(b>>>0>4294967231){c[(M$()|0)>>2]=12;a=0;return a|0}d=A1(a+-8|0,b>>>0<11?16:b+11&-8)|0;if(d){a=d+8|0;return a|0}d=w1(b)|0;if(!d){a=0;return a|0}e=c[a+-4>>2]|0;e=(e&-8)-((e&3|0)==0?8:4)|0;Rba(d|0,a|0,(e>>>0>>0?e:b)|0)|0;x1(a);a=d;return a|0}function A1(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0;o=a+4|0;p=c[o>>2]|0;j=p&-8;l=a+j|0;i=c[12844]|0;d=p&3;if(!((d|0)!=1&a>>>0>=i>>>0&a>>>0>>0))Ib();e=a+(j|4)|0;f=c[e>>2]|0;if(!(f&1))Ib();if(!d){if(b>>>0<256){a=0;return a|0}if(j>>>0>=(b+4|0)>>>0?(j-b|0)>>>0<=c[12960]<<1>>>0:0)return a|0;a=0;return a|0}if(j>>>0>=b>>>0){d=j-b|0;if(d>>>0<=15)return a|0;c[o>>2]=p&1|b|2;c[a+(b+4)>>2]=d|3;c[e>>2]=c[e>>2]|1;B1(a+b|0,d);return a|0}if((l|0)==(c[12846]|0)){d=(c[12843]|0)+j|0;if(d>>>0<=b>>>0){a=0;return a|0}n=d-b|0;c[o>>2]=p&1|b|2;c[a+(b+4)>>2]=n|1;c[12846]=a+b;c[12843]=n;return a|0}if((l|0)==(c[12845]|0)){e=(c[12842]|0)+j|0;if(e>>>0>>0){a=0;return a|0}d=e-b|0;if(d>>>0>15){c[o>>2]=p&1|b|2;c[a+(b+4)>>2]=d|1;c[a+e>>2]=d;e=a+(e+4)|0;c[e>>2]=c[e>>2]&-2;e=a+b|0}else{c[o>>2]=p&1|e|2;e=a+(e+4)|0;c[e>>2]=c[e>>2]|1;e=0;d=0}c[12842]=d;c[12845]=e;return a|0}if(f&2){a=0;return a|0}m=(f&-8)+j|0;if(m>>>0>>0){a=0;return a|0}n=m-b|0;g=f>>>3;do if(f>>>0>=256){h=c[a+(j+24)>>2]|0;g=c[a+(j+12)>>2]|0;do if((g|0)==(l|0)){e=a+(j+20)|0;d=c[e>>2]|0;if(!d){e=a+(j+16)|0;d=c[e>>2]|0;if(!d){k=0;break}}while(1){f=d+20|0;g=c[f>>2]|0;if(g){d=g;e=f;continue}f=d+16|0;g=c[f>>2]|0;if(!g)break;else{d=g;e=f}}if(e>>>0>>0)Ib();else{c[e>>2]=0;k=d;break}}else{f=c[a+(j+8)>>2]|0;if(f>>>0>>0)Ib();d=f+12|0;if((c[d>>2]|0)!=(l|0))Ib();e=g+8|0;if((c[e>>2]|0)==(l|0)){c[d>>2]=g;c[e>>2]=f;k=g;break}else Ib()}while(0);if(h){d=c[a+(j+28)>>2]|0;e=51664+(d<<2)|0;if((l|0)==(c[e>>2]|0)){c[e>>2]=k;if(!k){c[12841]=c[12841]&~(1<>>0<(c[12844]|0)>>>0)Ib();d=h+16|0;if((c[d>>2]|0)==(l|0))c[d>>2]=k;else c[h+20>>2]=k;if(!k)break}e=c[12844]|0;if(k>>>0>>0)Ib();c[k+24>>2]=h;d=c[a+(j+16)>>2]|0;do if(d)if(d>>>0>>0)Ib();else{c[k+16>>2]=d;c[d+24>>2]=k;break}while(0);d=c[a+(j+20)>>2]|0;if(d)if(d>>>0<(c[12844]|0)>>>0)Ib();else{c[k+20>>2]=d;c[d+24>>2]=k;break}}}else{f=c[a+(j+8)>>2]|0;e=c[a+(j+12)>>2]|0;d=51400+(g<<1<<2)|0;if((f|0)!=(d|0)){if(f>>>0>>0)Ib();if((c[f+12>>2]|0)!=(l|0))Ib()}if((e|0)==(f|0)){c[12840]=c[12840]&~(1<>>0>>0)Ib();d=e+8|0;if((c[d>>2]|0)==(l|0))h=d;else Ib()}else h=e+8|0;c[f+12>>2]=e;c[h>>2]=f}while(0);if(n>>>0<16){c[o>>2]=m|p&1|2;b=a+(m|4)|0;c[b>>2]=c[b>>2]|1;return a|0}else{c[o>>2]=p&1|b|2;c[a+(b+4)>>2]=n|3;p=a+(m|4)|0;c[p>>2]=c[p>>2]|1;B1(a+b|0,n);return a|0}return 0}function B1(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0;q=a+b|0;d=c[a+4>>2]|0;do if(!(d&1)){k=c[a>>2]|0;if(!(d&3))return;n=a+(0-k)|0;m=k+b|0;j=c[12844]|0;if(n>>>0>>0)Ib();if((n|0)==(c[12845]|0)){e=a+(b+4)|0;d=c[e>>2]|0;if((d&3|0)!=3){t=n;h=m;break}c[12842]=m;c[e>>2]=d&-2;c[a+(4-k)>>2]=m|1;c[q>>2]=m;return}g=k>>>3;if(k>>>0<256){f=c[a+(8-k)>>2]|0;e=c[a+(12-k)>>2]|0;d=51400+(g<<1<<2)|0;if((f|0)!=(d|0)){if(f>>>0>>0)Ib();if((c[f+12>>2]|0)!=(n|0))Ib()}if((e|0)==(f|0)){c[12840]=c[12840]&~(1<>>0>>0)Ib();d=e+8|0;if((c[d>>2]|0)==(n|0))i=d;else Ib()}else i=e+8|0;c[f+12>>2]=e;c[i>>2]=f;t=n;h=m;break}i=c[a+(24-k)>>2]|0;f=c[a+(12-k)>>2]|0;do if((f|0)==(n|0)){f=16-k|0;e=a+(f+4)|0;d=c[e>>2]|0;if(!d){e=a+f|0;d=c[e>>2]|0;if(!d){l=0;break}}while(1){f=d+20|0;g=c[f>>2]|0;if(g){d=g;e=f;continue}f=d+16|0;g=c[f>>2]|0;if(!g)break;else{d=g;e=f}}if(e>>>0>>0)Ib();else{c[e>>2]=0;l=d;break}}else{g=c[a+(8-k)>>2]|0;if(g>>>0>>0)Ib();d=g+12|0;if((c[d>>2]|0)!=(n|0))Ib();e=f+8|0;if((c[e>>2]|0)==(n|0)){c[d>>2]=f;c[e>>2]=g;l=f;break}else Ib()}while(0);if(i){d=c[a+(28-k)>>2]|0;e=51664+(d<<2)|0;if((n|0)==(c[e>>2]|0)){c[e>>2]=l;if(!l){c[12841]=c[12841]&~(1<>>0<(c[12844]|0)>>>0)Ib();d=i+16|0;if((c[d>>2]|0)==(n|0))c[d>>2]=l;else c[i+20>>2]=l;if(!l){t=n;h=m;break}}f=c[12844]|0;if(l>>>0>>0)Ib();c[l+24>>2]=i;d=16-k|0;e=c[a+d>>2]|0;do if(e)if(e>>>0>>0)Ib();else{c[l+16>>2]=e;c[e+24>>2]=l;break}while(0);d=c[a+(d+4)>>2]|0;if(d)if(d>>>0<(c[12844]|0)>>>0)Ib();else{c[l+20>>2]=d;c[d+24>>2]=l;t=n;h=m;break}else{t=n;h=m}}else{t=n;h=m}}else{t=a;h=b}while(0);j=c[12844]|0;if(q>>>0>>0)Ib();d=a+(b+4)|0;e=c[d>>2]|0;if(!(e&2)){if((q|0)==(c[12846]|0)){s=(c[12843]|0)+h|0;c[12843]=s;c[12846]=t;c[t+4>>2]=s|1;if((t|0)!=(c[12845]|0))return;c[12845]=0;c[12842]=0;return}if((q|0)==(c[12845]|0)){s=(c[12842]|0)+h|0;c[12842]=s;c[12845]=t;c[t+4>>2]=s|1;c[t+s>>2]=s;return}h=(e&-8)+h|0;g=e>>>3;do if(e>>>0>=256){i=c[a+(b+24)>>2]|0;f=c[a+(b+12)>>2]|0;do if((f|0)==(q|0)){e=a+(b+20)|0;d=c[e>>2]|0;if(!d){e=a+(b+16)|0;d=c[e>>2]|0;if(!d){p=0;break}}while(1){f=d+20|0;g=c[f>>2]|0;if(g){d=g;e=f;continue}f=d+16|0;g=c[f>>2]|0;if(!g)break;else{d=g;e=f}}if(e>>>0>>0)Ib();else{c[e>>2]=0;p=d;break}}else{g=c[a+(b+8)>>2]|0;if(g>>>0>>0)Ib();d=g+12|0;if((c[d>>2]|0)!=(q|0))Ib();e=f+8|0;if((c[e>>2]|0)==(q|0)){c[d>>2]=f;c[e>>2]=g;p=f;break}else Ib()}while(0);if(i){d=c[a+(b+28)>>2]|0;e=51664+(d<<2)|0;if((q|0)==(c[e>>2]|0)){c[e>>2]=p;if(!p){c[12841]=c[12841]&~(1<>>0<(c[12844]|0)>>>0)Ib();d=i+16|0;if((c[d>>2]|0)==(q|0))c[d>>2]=p;else c[i+20>>2]=p;if(!p)break}e=c[12844]|0;if(p>>>0>>0)Ib();c[p+24>>2]=i;d=c[a+(b+16)>>2]|0;do if(d)if(d>>>0>>0)Ib();else{c[p+16>>2]=d;c[d+24>>2]=p;break}while(0);d=c[a+(b+20)>>2]|0;if(d)if(d>>>0<(c[12844]|0)>>>0)Ib();else{c[p+20>>2]=d;c[d+24>>2]=p;break}}}else{f=c[a+(b+8)>>2]|0;e=c[a+(b+12)>>2]|0;d=51400+(g<<1<<2)|0;if((f|0)!=(d|0)){if(f>>>0>>0)Ib();if((c[f+12>>2]|0)!=(q|0))Ib()}if((e|0)==(f|0)){c[12840]=c[12840]&~(1<>>0>>0)Ib();d=e+8|0;if((c[d>>2]|0)==(q|0))o=d;else Ib()}else o=e+8|0;c[f+12>>2]=e;c[o>>2]=f}while(0);c[t+4>>2]=h|1;c[t+h>>2]=h;if((t|0)==(c[12845]|0)){c[12842]=h;return}}else{c[d>>2]=e&-2;c[t+4>>2]=h|1;c[t+h>>2]=h}d=h>>>3;if(h>>>0<256){e=d<<1;g=51400+(e<<2)|0;f=c[12840]|0;d=1<>2]|0;if(e>>>0<(c[12844]|0)>>>0)Ib();else{r=d;s=e}}else{c[12840]=f|d;r=51400+(e+2<<2)|0;s=g}c[r>>2]=t;c[s+12>>2]=t;c[t+8>>2]=s;c[t+12>>2]=g;return}d=h>>>8;if(d)if(h>>>0>16777215)g=31;else{r=(d+1048320|0)>>>16&8;s=d<>>16&4;s=s<>>16&2;g=14-(q|r|g)+(s<>>15)|0;g=h>>>(g+7|0)&1|g<<1}else g=0;d=51664+(g<<2)|0;c[t+28>>2]=g;c[t+20>>2]=0;c[t+16>>2]=0;e=c[12841]|0;f=1<>2]=t;c[t+24>>2]=d;c[t+12>>2]=t;c[t+8>>2]=t;return}d=c[d>>2]|0;a:do if((c[d+4>>2]&-8|0)!=(h|0)){g=h<<((g|0)==31?0:25-(g>>>1)|0);while(1){e=d+16+(g>>>31<<2)|0;f=c[e>>2]|0;if(!f)break;if((c[f+4>>2]&-8|0)==(h|0)){d=f;break a}else{g=g<<1;d=f}}if(e>>>0<(c[12844]|0)>>>0)Ib();c[e>>2]=t;c[t+24>>2]=d;c[t+12>>2]=t;c[t+8>>2]=t;return}while(0);e=d+8|0;f=c[e>>2]|0;s=c[12844]|0;if(!(f>>>0>=s>>>0&d>>>0>=s>>>0))Ib();c[f+12>>2]=t;c[e>>2]=t;c[t+8>>2]=f;c[t+12>>2]=d;c[t+24>>2]=0;return}function C1(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0;a:while(1){o=b;e=b+-4|0;b:while(1){n=a;g=o-n|0;h=g>>2;switch(h|0){case 1:case 0:break a;case 2:{f=a;r=4;break a}case 3:{b=e;r=6;break a}case 4:{b=e;r=7;break a}case 5:{b=e;r=8;break a}default:{}}if((g|0)<124){r=10;break a}f=(h|0)/2|0;k=a+(f<<2)|0;if((g|0)>3996){m=(h|0)/4|0;f=G1(a,a+(m<<2)|0,k,a+(m+f<<2)|0,e,d)|0}else f=E1(a,k,e,d)|0;j=c[a>>2]|0;i=c[k>>2]|0;do if((j|0)<(i|0))h=e;else{g=e;while(1){g=g+-4|0;if((a|0)==(g|0))break;h=c[g>>2]|0;if((h|0)<(i|0)){r=29;break}}if((r|0)==29){r=0;c[a>>2]=h;c[g>>2]=j;h=g;f=f+1|0;break}f=a+4|0;i=c[e>>2]|0;if((j|0)>=(i|0)){if((f|0)==(e|0))break a;else h=a;while(1){g=c[f>>2]|0;if((j|0)<(g|0))break;g=f+4|0;if((g|0)==(e|0))break a;else{h=f;f=g}}c[f>>2]=i;c[e>>2]=g;f=h+8|0}if((f|0)==(e|0))break a;else h=e;while(1){k=c[a>>2]|0;i=f;while(1){g=c[i>>2]|0;f=i+4|0;if((k|0)<(g|0)){j=g;break}else i=f}g=h;while(1){h=g+-4|0;g=c[h>>2]|0;if((k|0)<(g|0))g=h;else break}if(i>>>0>=h>>>0){a=i;continue b}c[i>>2]=g;c[h>>2]=j}}while(0);g=a+4|0;c:do if(g>>>0>>0){m=k;while(1){k=c[m>>2]|0;j=g;while(1){i=c[j>>2]|0;g=j+4|0;if((i|0)<(k|0))j=g;else{l=j;break}}do{h=h+-4|0;j=c[h>>2]|0}while((j|0)>=(k|0));k=h;h=j;if(l>>>0>k>>>0){h=l;g=m;break c}c[l>>2]=h;c[k>>2]=i;h=k;m=(m|0)==(l|0)?k:m;f=f+1|0}}else{h=g;g=k}while(0);if((h|0)!=(g|0)?(p=c[g>>2]|0,q=c[h>>2]|0,(p|0)<(q|0)):0){c[h>>2]=p;c[g>>2]=q;f=f+1|0}if(!f){f=D1(a,h,d)|0;g=h+4|0;if(D1(g,b,d)|0){r=42;break}if(f){a=g;continue}}m=h;if((m-n|0)>=(o-m|0)){e=h;r=46;break}C1(a,h,d);a=h+4|0}if((r|0)==42){r=0;if(f)break;else{b=h;continue}}else if((r|0)==46){r=0;C1(e+4|0,b,d);b=e;continue}}if((r|0)==4){b=c[e>>2]|0;a=c[f>>2]|0;if((b|0)<(a|0)){c[f>>2]=b;c[e>>2]=a}}else if((r|0)==6)E1(a,a+4|0,b,d)|0;else if((r|0)==7)F1(a,a+4|0,a+8|0,b,d)|0;else if((r|0)==8)G1(a,a+4|0,a+8|0,a+12|0,b,d)|0;else if((r|0)==10)H1(a,b,d);return}function D1(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0;a:do switch(b-a>>2|0){case 1:case 0:{d=1;break}case 2:{d=b+-4|0;e=c[d>>2]|0;f=c[a>>2]|0;if((e|0)<(f|0)){c[a>>2]=e;c[d>>2]=f;d=1}else d=1;break}case 3:{E1(a,a+4|0,b+-4|0,d)|0;d=1;break}case 4:{F1(a,a+4|0,a+8|0,b+-4|0,d)|0;d=1;break}case 5:{G1(a,a+4|0,a+8|0,a+12|0,b+-4|0,d)|0;d=1;break}default:{f=a+8|0;E1(a,a+4|0,f,d)|0;d=a+12|0;if((d|0)==(b|0))d=1;else{e=0;while(1){i=c[d>>2]|0;g=c[f>>2]|0;if((i|0)<(g|0)){h=d;while(1){c[h>>2]=g;if((f|0)==(a|0)){f=a;break}h=f+-4|0;g=c[h>>2]|0;if((i|0)>=(g|0))break;else{j=f;f=h;h=j}}c[f>>2]=i;e=e+1|0;if((e|0)==8)break}f=d+4|0;if((f|0)==(b|0)){d=1;break a}else{j=d;d=f;f=j}}d=(d+4|0)==(b|0)}}}while(0);return d|0}function E1(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0;e=c[b>>2]|0;h=c[a>>2]|0;f=c[d>>2]|0;g=(f|0)<(e|0);do if((e|0)<(h|0)){if(g){c[a>>2]=f;c[d>>2]=h;e=1;break}c[a>>2]=e;c[b>>2]=h;e=c[d>>2]|0;if((e|0)<(h|0)){c[b>>2]=e;c[d>>2]=h;e=2}else e=1}else if(g){c[b>>2]=f;c[d>>2]=e;e=c[b>>2]|0;f=c[a>>2]|0;if((e|0)<(f|0)){c[a>>2]=e;c[b>>2]=f;e=2}else e=1}else e=0;while(0);return e|0}function F1(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0;f=E1(a,b,d,f)|0;g=c[e>>2]|0;h=c[d>>2]|0;if((g|0)<(h|0)){c[d>>2]=g;c[e>>2]=h;g=f+1|0;h=c[d>>2]|0;e=c[b>>2]|0;if((h|0)<(e|0)){c[b>>2]=h;c[d>>2]=e;h=c[b>>2]|0;g=c[a>>2]|0;if((h|0)<(g|0)){c[a>>2]=h;c[b>>2]=g;f=f+3|0}else f=f+2|0}else f=g}return f|0}function G1(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;g=F1(a,b,d,e,g)|0;h=c[f>>2]|0;i=c[e>>2]|0;if((h|0)<(i|0)){c[e>>2]=h;c[f>>2]=i;h=g+1|0;i=c[e>>2]|0;f=c[d>>2]|0;if((i|0)<(f|0)){c[d>>2]=i;c[e>>2]=f;i=g+2|0;f=c[d>>2]|0;h=c[b>>2]|0;if((f|0)<(h|0)){c[b>>2]=f;c[d>>2]=h;h=c[b>>2]|0;i=c[a>>2]|0;if((h|0)<(i|0)){c[a>>2]=h;c[b>>2]=i;g=g+4|0}else g=g+3|0}else g=i}else g=h}return g|0}function H1(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0;e=a+8|0;E1(a,a+4|0,e,d)|0;d=a+12|0;if((d|0)!=(b|0)){h=d;d=e;while(1){g=c[h>>2]|0;e=c[d>>2]|0;if((g|0)<(e|0)){f=h;while(1){c[f>>2]=e;if((d|0)==(a|0)){d=a;break}f=d+-4|0;e=c[f>>2]|0;if((g|0)>=(e|0))break;else{i=d;d=f;f=i}}c[d>>2]=g}d=h+4|0;if((d|0)==(b|0))break;else{i=h;h=d;d=i}}}return}function I1(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0;b=c[11943]|0;M1(52536,b,52592);c[12964]=53284;c[12966]=53304;c[12965]=0;e=c[13318]|0;T2(51856+e|0,52536);c[51856+(e+72)>>2]=0;c[51856+(e+76)>>2]=-1;e=c[11944]|0;N1(52640,e,52600);c[12986]=53364;c[12987]=53384;h=c[13338]|0;T2(51944+h|0,52640);f=h+72|0;c[51944+f>>2]=0;a=h+76|0;c[51944+a>>2]=-1;d=c[11942]|0;N1(52688,d,52608);c[13007]=53364;c[13008]=53384;T2(52028+h|0,52688);c[52028+f>>2]=0;c[52028+a>>2]=-1;g=c[52028+((c[(c[13007]|0)+-12>>2]|0)+24)>>2]|0;c[13028]=53364;c[13029]=53384;T2(52112+h|0,g);c[52112+f>>2]=0;c[52112+a>>2]=-1;c[51856+((c[(c[12964]|0)+-12>>2]|0)+72)>>2]=51944;a=52028+((c[(c[13007]|0)+-12>>2]|0)+4)|0;c[a>>2]=c[a>>2]|8192;c[52028+((c[(c[13007]|0)+-12>>2]|0)+72)>>2]=51944;O1(52736,b,52616);c[13049]=53324;c[13051]=53344;c[13050]=0;b=c[13328]|0;T2(52196+b|0,52736);c[52196+(b+72)>>2]=0;c[52196+(b+76)>>2]=-1;P1(52792,e,52624);c[13071]=53404;c[13072]=53424;e=c[13348]|0;T2(52284+e|0,52792);b=e+72|0;c[52284+b>>2]=0;a=e+76|0;c[52284+a>>2]=-1;P1(52840,d,52632);c[13092]=53404;c[13093]=53424;T2(52368+e|0,52840);c[52368+b>>2]=0;c[52368+a>>2]=-1;d=c[52368+((c[(c[13092]|0)+-12>>2]|0)+24)>>2]|0;c[13113]=53404;c[13114]=53424;T2(52452+e|0,d);c[52452+b>>2]=0;c[52452+a>>2]=-1;c[52196+((c[(c[13049]|0)+-12>>2]|0)+72)>>2]=52284;a=52368+((c[(c[13092]|0)+-12>>2]|0)+4)|0;c[a>>2]=c[a>>2]|8192;c[52368+((c[(c[13092]|0)+-12>>2]|0)+72)>>2]=52284;return}function J1(a){a=a|0;B3(51944)|0;B3(52112)|0;G3(52284)|0;G3(52452)|0;return}function K1(){I1(0);Ta(1494,86954,n|0)|0;return}function L1(){return}function M1(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0;f=i;i=i+16|0;h=f+4|0;g=f;W2(b);c[b>>2]=53088;c[b+32>>2]=d;c[b+40>>2]=e;c[b+48>>2]=-1;a[b+52>>0]=0;l8(h,b+4|0);c[g>>2]=c[h>>2];e2(b,g);m8(g);i=f;return}function N1(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0;f=i;i=i+16|0;h=f+4|0;g=f;W2(b);c[b>>2]=53024;c[b+32>>2]=d;l8(h,b+4|0);c[g>>2]=c[h>>2];d=o8(g,54612)|0;m8(g);c[b+36>>2]=d;c[b+40>>2]=e;a[b+44>>0]=(rc[c[(c[d>>2]|0)+28>>2]&127](d)|0)&1;i=f;return}function O1(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0;f=i;i=i+16|0;h=f+4|0;g=f;j3(b);c[b>>2]=52960;c[b+32>>2]=d;c[b+40>>2]=e;c[b+48>>2]=-1;a[b+52>>0]=0;l8(h,b+4|0);c[g>>2]=c[h>>2];V1(b,g);m8(g);i=f;return}function P1(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0;f=i;i=i+16|0;h=f+4|0;g=f;j3(b);c[b>>2]=52896;c[b+32>>2]=d;l8(h,b+4|0);c[g>>2]=c[h>>2];d=o8(g,54620)|0;m8(g);c[b+36>>2]=d;c[b+40>>2]=e;a[b+44>>0]=(rc[c[(c[d>>2]|0)+28>>2]&127](d)|0)&1;i=f;return}function Q1(a){a=a|0;h3(a);P_(a);return}function R1(b,d){b=b|0;d=d|0;rc[c[(c[b>>2]|0)+24>>2]&127](b)|0;d=o8(d,54620)|0;c[b+36>>2]=d;a[b+44>>0]=(rc[c[(c[d>>2]|0)+28>>2]&127](d)|0)&1;return}function S1(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,j=0,k=0,l=0,m=0;l=i;i=i+16|0;j=l+8|0;h=l;d=a+36|0;e=a+40|0;f=j+8|0;g=j;b=a+32|0;a:while(1){a=c[d>>2]|0;a=sc[c[(c[a>>2]|0)+20>>2]&31](a,c[e>>2]|0,j,f,h)|0;m=(c[h>>2]|0)-g|0;if((L0(j,1,m,c[b>>2]|0)|0)!=(m|0)){a=-1;break}switch(a|0){case 1:break;case 2:{a=-1;break a}default:{k=4;break a}}}if((k|0)==4)a=((G0(c[b>>2]|0)|0)!=0)<<31>>31;i=l;return a|0}function T1(b,d,e){b=b|0;d=d|0;e=e|0;var f=0;a:do if(!(a[b+44>>0]|0))if((e|0)>0){f=d;d=0;while(1){if((zc[c[(c[b>>2]|0)+52>>2]&255](b,c[f>>2]|0)|0)==-1)break a;d=d+1|0;if((d|0)<(e|0))f=f+4|0;else break}}else d=0;else d=L0(d,4,e,c[b+32>>2]|0)|0;while(0);return d|0}function U1(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0;s=i;i=i+32|0;p=s+16|0;e=s+8|0;o=s+4|0;n=s;q=(d|0)==-1;a:do if(!q){c[e>>2]=d;if(a[b+44>>0]|0)if((L0(e,4,1,c[b+32>>2]|0)|0)==1){r=11;break}else{e=-1;break}c[o>>2]=p;l=e+4|0;m=b+36|0;g=b+40|0;h=p+8|0;j=p;k=b+32|0;while(1){b=c[m>>2]|0;b=uc[c[(c[b>>2]|0)+12>>2]&15](b,c[g>>2]|0,e,l,n,p,h,o)|0;if((c[n>>2]|0)==(e|0)){e=-1;break a}if((b|0)==3)break;f=(b|0)==1;if(b>>>0>=2){e=-1;break a}b=(c[o>>2]|0)-j|0;if((L0(p,1,b,c[k>>2]|0)|0)!=(b|0)){e=-1;break a}if(f)e=f?c[n>>2]|0:e;else{r=11;break a}}if((L0(e,1,1,c[k>>2]|0)|0)!=1)e=-1;else r=11}else r=11;while(0);if((r|0)==11)e=q?0:d;i=s;return e|0}function V1(b,d){b=b|0;d=d|0;var e=0,f=0;f=o8(d,54620)|0;e=b+36|0;c[e>>2]=f;d=b+44|0;c[d>>2]=rc[c[(c[f>>2]|0)+24>>2]&127](f)|0;e=c[e>>2]|0;a[b+53>>0]=(rc[c[(c[e>>2]|0)+28>>2]&127](e)|0)&1;return}function W1(a){a=a|0;h3(a);P_(a);return}function X1(a){a=a|0;return _1(a,0)|0}function Y1(a){a=a|0;return _1(a,1)|0}function Z1(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,j=0,k=0,l=0,m=0;m=i;i=i+32|0;l=m+16|0;k=m+8|0;f=m+4|0;g=m;h=b+52|0;e=(a[h>>0]|0)!=0;a:do if((d|0)==-1)if(e)d=-1;else{d=c[b+48>>2]|0;a[h>>0]=(d|0)!=-1&1}else{j=b+48|0;b:do if(e){c[f>>2]=c[j>>2];e=c[b+36>>2]|0;switch(uc[c[(c[e>>2]|0)+12>>2]&15](e,c[b+40>>2]|0,f,f+4|0,g,l,l+8|0,k)|0){case 1:case 2:{d=-1;break a}case 3:{a[l>>0]=c[j>>2];c[k>>2]=l+1;break}default:{}}e=b+32|0;while(1){f=c[k>>2]|0;if(f>>>0<=l>>>0)break b;b=f+-1|0;c[k>>2]=b;if((Q0(a[b>>0]|0,c[e>>2]|0)|0)==-1){d=-1;break a}}}while(0);c[j>>2]=d;a[h>>0]=1}while(0);i=m;return d|0}function _1(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0;r=i;i=i+32|0;q=r+16|0;p=r+8|0;m=r+4|0;n=r;g=b+52|0;a:do if(a[g>>0]|0){f=b+48|0;e=c[f>>2]|0;if(d){c[f>>2]=-1;a[g>>0]=0}}else{e=c[b+44>>2]|0;e=(e|0)>1?e:1;o=b+32|0;if((e|0)>0){g=0;do{f=M0(c[o>>2]|0)|0;if((f|0)==-1){e=-1;break a}a[q+g>>0]=f;g=g+1|0}while((g|0)<(e|0))}b:do if(!(a[b+53>>0]|0)){j=b+40|0;k=b+36|0;l=p+4|0;c:while(1){s=c[j>>2]|0;g=s;f=c[g>>2]|0;g=c[g+4>>2]|0;t=c[k>>2]|0;h=q+e|0;switch(uc[c[(c[t>>2]|0)+16>>2]&15](t,s,q,h,m,p,l,n)|0){case 2:{e=-1;break a}case 3:break c;case 1:break;default:break b}t=c[j>>2]|0;c[t>>2]=f;c[t+4>>2]=g;if((e|0)==8){e=-1;break a}f=M0(c[o>>2]|0)|0;if((f|0)==-1){e=-1;break a}a[h>>0]=f;e=e+1|0}c[p>>2]=a[q>>0]}else c[p>>2]=a[q>>0];while(0);if(d){e=c[p>>2]|0;c[b+48>>2]=e;break}while(1){if((e|0)<=0)break;e=e+-1|0;if((Q0(a[q+e>>0]|0,c[o>>2]|0)|0)==-1){e=-1;break a}}e=c[p>>2]|0}while(0);i=r;return e|0}function $1(a){a=a|0;U2(a);P_(a);return}function a2(b,d){b=b|0;d=d|0;rc[c[(c[b>>2]|0)+24>>2]&127](b)|0;d=o8(d,54612)|0;c[b+36>>2]=d;a[b+44>>0]=(rc[c[(c[d>>2]|0)+28>>2]&127](d)|0)&1;return}function b2(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,j=0,k=0,l=0,m=0;l=i;i=i+16|0;j=l+8|0;h=l;d=a+36|0;e=a+40|0;f=j+8|0;g=j;b=a+32|0;a:while(1){a=c[d>>2]|0;a=sc[c[(c[a>>2]|0)+20>>2]&31](a,c[e>>2]|0,j,f,h)|0;m=(c[h>>2]|0)-g|0;if((L0(j,1,m,c[b>>2]|0)|0)!=(m|0)){a=-1;break}switch(a|0){case 1:break;case 2:{a=-1;break a}default:{k=4;break a}}}if((k|0)==4)a=((G0(c[b>>2]|0)|0)!=0)<<31>>31;i=l;return a|0}function c2(b,e,f){b=b|0;e=e|0;f=f|0;var g=0;a:do if(!(a[b+44>>0]|0))if((f|0)>0){g=e;e=0;while(1){if((zc[c[(c[b>>2]|0)+52>>2]&255](b,d[g>>0]|0)|0)==-1)break a;e=e+1|0;if((e|0)<(f|0))g=g+1|0;else break}}else e=0;else e=L0(e,1,f,c[b+32>>2]|0)|0;while(0);return e|0}function d2(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0;s=i;i=i+32|0;p=s+16|0;e=s+8|0;o=s+4|0;n=s;q=(d|0)==-1;a:do if(!q){a[e>>0]=d;if(a[b+44>>0]|0)if((L0(e,1,1,c[b+32>>2]|0)|0)==1){r=11;break}else{e=-1;break}c[o>>2]=p;m=e+1|0;g=b+36|0;h=b+40|0;j=p+8|0;k=p;l=b+32|0;while(1){b=c[g>>2]|0;b=uc[c[(c[b>>2]|0)+12>>2]&15](b,c[h>>2]|0,e,m,n,p,j,o)|0;if((c[n>>2]|0)==(e|0)){e=-1;break a}if((b|0)==3)break;f=(b|0)==1;if(b>>>0>=2){e=-1;break a}b=(c[o>>2]|0)-k|0;if((L0(p,1,b,c[l>>2]|0)|0)!=(b|0)){e=-1;break a}if(f)e=f?c[n>>2]|0:e;else{r=11;break a}}if((L0(e,1,1,c[l>>2]|0)|0)!=1)e=-1;else r=11}else r=11;while(0);if((r|0)==11)e=q?0:d;i=s;return e|0}function e2(b,d){b=b|0;d=d|0;var e=0,f=0;f=o8(d,54612)|0;e=b+36|0;c[e>>2]=f;d=b+44|0;c[d>>2]=rc[c[(c[f>>2]|0)+24>>2]&127](f)|0;e=c[e>>2]|0;a[b+53>>0]=(rc[c[(c[e>>2]|0)+28>>2]&127](e)|0)&1;return}function f2(a){a=a|0;U2(a);P_(a);return}function g2(a){a=a|0;return j2(a,0)|0}function h2(a){a=a|0;return j2(a,1)|0}function i2(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,j=0,k=0,l=0,m=0;m=i;i=i+32|0;l=m+16|0;k=m+4|0;f=m+8|0;g=m;h=b+52|0;e=(a[h>>0]|0)!=0;a:do if((d|0)==-1)if(e)d=-1;else{d=c[b+48>>2]|0;a[h>>0]=(d|0)!=-1&1}else{j=b+48|0;b:do if(e){a[f>>0]=c[j>>2];e=c[b+36>>2]|0;switch(uc[c[(c[e>>2]|0)+12>>2]&15](e,c[b+40>>2]|0,f,f+1|0,g,l,l+8|0,k)|0){case 1:case 2:{d=-1;break a}case 3:{a[l>>0]=c[j>>2];c[k>>2]=l+1;break}default:{}}e=b+32|0;while(1){f=c[k>>2]|0;if(f>>>0<=l>>>0)break b;b=f+-1|0;c[k>>2]=b;if((Q0(a[b>>0]|0,c[e>>2]|0)|0)==-1){d=-1;break a}}}while(0);c[j>>2]=d;a[h>>0]=1}while(0);i=m;return d|0}function j2(b,e){b=b|0;e=e|0;var f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0;s=i;i=i+32|0;r=s+16|0;q=s+8|0;n=s+4|0;o=s;h=b+52|0;a:do if(a[h>>0]|0){g=b+48|0;f=c[g>>2]|0;if(e){c[g>>2]=-1;a[h>>0]=0}}else{f=c[b+44>>2]|0;f=(f|0)>1?f:1;p=b+32|0;if((f|0)>0){h=0;do{g=M0(c[p>>2]|0)|0;if((g|0)==-1){f=-1;break a}a[r+h>>0]=g;h=h+1|0}while((h|0)<(f|0))}b:do if(!(a[b+53>>0]|0)){k=b+40|0;l=b+36|0;m=q+1|0;c:while(1){t=c[k>>2]|0;h=t;g=c[h>>2]|0;h=c[h+4>>2]|0;u=c[l>>2]|0;j=r+f|0;switch(uc[c[(c[u>>2]|0)+16>>2]&15](u,t,r,j,n,q,m,o)|0){case 2:{f=-1;break a}case 3:break c;case 1:break;default:break b}u=c[k>>2]|0;c[u>>2]=g;c[u+4>>2]=h;if((f|0)==8){f=-1;break a}g=M0(c[p>>2]|0)|0;if((g|0)==-1){f=-1;break a}a[j>>0]=g;f=f+1|0}a[q>>0]=a[r>>0]|0}else a[q>>0]=a[r>>0]|0;while(0);if(e){f=a[q>>0]|0;c[b+48>>2]=f&255}else{while(1){if((f|0)<=0)break;f=f+-1|0;if((Q0(d[r+f>>0]|0,c[p>>2]|0)|0)==-1){f=-1;break a}}f=a[q>>0]|0}f=f&255}while(0);i=s;return f|0}function k2(b,d){b=b|0;d=d|0;if(!(a[d>>0]&1)){c[b>>2]=c[d>>2];c[b+4>>2]=c[d+4>>2];c[b+8>>2]=c[d+8>>2]}else l2(b,c[d+8>>2]|0,c[d+4>>2]|0);return}function l2(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0;if(e>>>0>4294967279)L_(b);if(e>>>0<11){a[b>>0]=e<<1;b=b+1|0}else{g=e+16&-16;f=O_(g)|0;c[b+8>>2]=f;c[b>>2]=g|1;c[b+4>>2]=e;b=f}Rba(b|0,d|0,e|0)|0;a[b+e>>0]=0;return}function m2(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0;if(d>>>0>4294967279)L_(b);if(d>>>0<11){a[b>>0]=d<<1;b=b+1|0}else{g=d+16&-16;f=O_(g)|0;c[b+8>>2]=f;c[b>>2]=g|1;c[b+4>>2]=d;b=f}Qba(b|0,e|0,d|0)|0;a[b+d>>0]=0;return}function n2(b,d,e,f,g){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0;h=a[d>>0]|0;g=(h&1)==0;h=g?(h&255)>>>1:c[d+4>>2]|0;if(h>>>0>>0)E$(b);else{h=h-e|0;l2(b,(g?d+1|0:c[d+8>>2]|0)+e|0,h>>>0>>0?h:f);return}}function o2(b){b=b|0;if(a[b>>0]&1)P_(c[b+8>>2]|0);return}function p2(b,d){b=b|0;d=d|0;var e=0,f=0;if((b|0)!=(d|0)){e=a[d>>0]|0;f=(e&1)==0;r2(b,f?d+1|0:c[d+8>>2]|0,f?(e&255)>>>1:c[d+4>>2]|0)|0}return b|0}function q2(a,b){a=a|0;b=b|0;return r2(a,b,f1(b)|0)|0}function r2(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0;f=a[b>>0]|0;if(!(f&1))h=10;else{f=c[b>>2]|0;h=(f&-2)+-1|0;f=f&255}g=(f&1)==0;do if(h>>>0>=e>>>0){if(g)f=b+1|0;else f=c[b+8>>2]|0;Sba(f|0,d|0,e|0)|0;a[f+e>>0]=0;if(!(a[b>>0]&1)){a[b>>0]=e<<1;break}else{c[b+4>>2]=e;break}}else{if(g)f=(f&255)>>>1;else f=c[b+4>>2]|0;w2(b,h,e-h|0,f,0,f,e,d)}while(0);return b|0}function s2(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0;f=a[b>>0]|0;g=(f&1)==0;if(g)f=(f&255)>>>1;else f=c[b+4>>2]|0;do if(f>>>0>=d>>>0)if(g){a[b+1+d>>0]=0;a[b>>0]=d<<1;break}else{a[(c[b+8>>2]|0)+d>>0]=0;c[b+4>>2]=d;break}else t2(b,d-f|0,e)|0;while(0);return}function t2(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0;if(d){f=a[b>>0]|0;if(!(f&1))g=10;else{f=c[b>>2]|0;g=(f&-2)+-1|0;f=f&255}if(!(f&1))h=(f&255)>>>1;else h=c[b+4>>2]|0;if((g-h|0)>>>0>>0){x2(b,g,d-g+h|0,h,h,0,0);f=a[b>>0]|0}if(!(f&1))g=b+1|0;else g=c[b+8>>2]|0;Qba(g+h|0,e|0,d|0)|0;f=h+d|0;if(!(a[b>>0]&1))a[b>>0]=f<<1;else c[b+4>>2]=f;a[g+f>>0]=0}return b|0}function u2(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0;if(d>>>0>4294967279)L_(b);e=a[b>>0]|0;if(!(e&1))f=10;else{e=c[b>>2]|0;f=(e&-2)+-1|0;e=e&255}if(!(e&1))j=(e&255)>>>1;else j=c[b+4>>2]|0;d=j>>>0>d>>>0?j:d;if(d>>>0<11)i=10;else i=(d+16&-16)+-1|0;do if((i|0)!=(f|0)){do if((i|0)!=10){d=O_(i+1|0)|0;if(!(e&1)){f=1;g=b+1|0;h=0;break}else{f=1;g=c[b+8>>2]|0;h=1;break}}else{d=b+1|0;f=0;g=c[b+8>>2]|0;h=1}while(0);if(!(e&1))e=(e&255)>>>1;else e=c[b+4>>2]|0;Rba(d|0,g|0,e+1|0)|0;if(h)P_(g);if(f){c[b>>2]=i+1|1;c[b+4>>2]=j;c[b+8>>2]=d;break}else{a[b>>0]=j<<1;break}}while(0);return}function v2(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0;e=a[b>>0]|0;f=(e&1)!=0;if(f){g=(c[b>>2]&-2)+-1|0;h=c[b+4>>2]|0}else{g=10;h=(e&255)>>>1}if((h|0)==(g|0)){x2(b,g,1,g,g,0,0);if(!(a[b>>0]&1))g=7;else g=8}else if(f)g=8;else g=7;if((g|0)==7){a[b>>0]=(h<<1)+2;e=b+1|0;f=h+1|0}else if((g|0)==8){e=c[b+8>>2]|0;f=h+1|0;c[b+4>>2]=f}a[e+h>>0]=d;a[e+f>>0]=0;return}function w2(b,d,e,f,g,h,i,j){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;var k=0,l=0,m=0;if((-18-d|0)>>>0>>0)L_(b);if(!(a[b>>0]&1))m=b+1|0;else m=c[b+8>>2]|0;if(d>>>0<2147483623){k=e+d|0;l=d<<1;k=k>>>0>>0?l:k;k=k>>>0<11?11:k+16&-16}else k=-17;l=O_(k)|0;if(g)Rba(l|0,m|0,g|0)|0;if(i)Rba(l+g|0,j|0,i|0)|0;e=f-h|0;if((e|0)!=(g|0))Rba(l+(i+g)|0,m+(h+g)|0,e-g|0)|0;if((d|0)!=10)P_(m);c[b+8>>2]=l;c[b>>2]=k|1;d=e+i|0;c[b+4>>2]=d;a[l+d>>0]=0;return}function x2(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,l=0;if((-17-d|0)>>>0>>0)L_(b);if(!(a[b>>0]&1))l=b+1|0;else l=c[b+8>>2]|0;if(d>>>0<2147483623){j=e+d|0;k=d<<1;j=j>>>0>>0?k:j;j=j>>>0<11?11:j+16&-16}else j=-17;k=O_(j)|0;if(g)Rba(k|0,l|0,g|0)|0;e=f-h|0;if((e|0)!=(g|0))Rba(k+(i+g)|0,l+(h+g)|0,e-g|0)|0;if((d|0)!=10)P_(l);c[b+8>>2]=k;c[b>>2]=j|1;return}function y2(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;h=a[b>>0]|0;i=(h&1)==0;if(i)n=(h&255)>>>1;else n=c[b+4>>2]|0;if(n>>>0>>0)E$(b);k=n-d|0;e=k>>>0>>0?k:e;if(i)i=10;else{h=c[b>>2]|0;i=(h&-2)+-1|0;h=h&255}if((e-n+i|0)>>>0>>0)w2(b,i,n+g-e-i|0,n,d,e,g,f);else{if(!(h&1))m=b+1|0;else m=c[b+8>>2]|0;do if((e|0)!=(g|0)){j=k-e|0;if((k|0)==(e|0)){h=g;e=k;l=21}else{i=m+d|0;if(e>>>0>g>>>0){Sba(i|0,f|0,g|0)|0;Sba(m+(g+d)|0,m+(e+d)|0,j|0)|0;h=g;break}do if(i>>>0>>0&(m+n|0)>>>0>f>>>0){h=e+d|0;if((m+h|0)>>>0>f>>>0){Sba(i|0,f|0,e|0)|0;d=h;f=f+g|0;h=g-e|0;e=0;break}else{f=f+(g-e)|0;h=g;break}}else h=g;while(0);Sba(m+(d+h)|0,m+(d+e)|0,j|0)|0;l=21}}else{h=g;e=g;l=21}while(0);if((l|0)==21)Sba(m+d|0,f|0,h|0)|0;e=h-e+n|0;if(!(a[b>>0]&1))a[b>>0]=e<<1;else c[b+4>>2]=e;a[m+e>>0]=0}return b|0}function z2(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return y2(a,b,c,d,f1(d)|0)|0}function A2(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;h=a[b>>0]|0;j=(h&1)==0;if(j)h=(h&255)>>>1;else h=c[b+4>>2]|0;if((g|0)==-1|h>>>0>>0)E$(b);i=h-d|0;i=i>>>0>>0?i:e;if(j)h=b+1|0;else h=c[b+8>>2]|0;e=i>>>0>g>>>0;h=c1(h+d|0,f,e?g:i)|0;if(!h)if(i>>>0>>0)h=-1;else return e&1|0;return h|0}function B2(a,b){a=a|0;b=b|0;return A2(a,0,-1,b,f1(b)|0)|0}function C2(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0;if(e>>>0>1073741807)L_(b);if(e>>>0<2){a[b>>0]=e<<1;b=b+4|0}else{g=e+4&-4;f=O_(g<<2)|0;c[b+8>>2]=f;c[b>>2]=g|1;c[b+4>>2]=e;b=f}h1(b,d,e)|0;c[b+(e<<2)>>2]=0;return}function D2(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0;if(d>>>0>1073741807)L_(b);if(d>>>0<2){a[b>>0]=d<<1;b=b+4|0}else{g=d+4&-4;f=O_(g<<2)|0;c[b+8>>2]=f;c[b>>2]=g|1;c[b+4>>2]=d;b=f}j1(b,e,d)|0;c[b+(d<<2)>>2]=0;return}function E2(b){b=b|0;if(a[b>>0]&1)P_(c[b+8>>2]|0);return}function F2(a,b){a=a|0;b=b|0;return G2(a,b,g1(b)|0)|0}function G2(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0;f=a[b>>0]|0;if(!(f&1))h=1;else{f=c[b>>2]|0;h=(f&-2)+-1|0;f=f&255}g=(f&1)==0;do if(h>>>0>=e>>>0){if(g)f=b+4|0;else f=c[b+8>>2]|0;i1(f,d,e)|0;c[f+(e<<2)>>2]=0;if(!(a[b>>0]&1)){a[b>>0]=e<<1;break}else{c[b+4>>2]=e;break}}else{if(g)f=(f&255)>>>1;else f=c[b+4>>2]|0;J2(b,h,e-h|0,f,0,f,e,d)}while(0);return b|0}function H2(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0;if(d>>>0>1073741807)L_(b);e=a[b>>0]|0;if(!(e&1))f=1;else{e=c[b>>2]|0;f=(e&-2)+-1|0;e=e&255}if(!(e&1))j=(e&255)>>>1;else j=c[b+4>>2]|0;d=j>>>0>d>>>0?j:d;if(d>>>0<2)i=1;else i=(d+4&-4)+-1|0;do if((i|0)!=(f|0)){do if((i|0)!=1){d=O_((i<<2)+4|0)|0;if(!(e&1)){f=1;g=b+4|0;h=0;break}else{f=1;g=c[b+8>>2]|0;h=1;break}}else{d=b+4|0;f=0;g=c[b+8>>2]|0;h=1}while(0);if(!(e&1))e=(e&255)>>>1;else e=c[b+4>>2]|0;h1(d,g,e+1|0)|0;if(h)P_(g);if(f){c[b>>2]=i+1|1;c[b+4>>2]=j;c[b+8>>2]=d;break}else{a[b>>0]=j<<1;break}}while(0);return}function I2(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0;e=a[b>>0]|0;f=(e&1)!=0;if(f){g=(c[b>>2]&-2)+-1|0;h=c[b+4>>2]|0}else{g=1;h=(e&255)>>>1}if((h|0)==(g|0)){K2(b,g,1,g,g,0,0);if(!(a[b>>0]&1))g=7;else g=8}else if(f)g=8;else g=7;if((g|0)==7){a[b>>0]=(h<<1)+2;e=b+4|0;f=h+1|0}else if((g|0)==8){e=c[b+8>>2]|0;f=h+1|0;c[b+4>>2]=f}c[e+(h<<2)>>2]=d;c[e+(f<<2)>>2]=0;return}function J2(b,d,e,f,g,h,i,j){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;var k=0,l=0,m=0;if((1073741806-d|0)>>>0>>0)L_(b);if(!(a[b>>0]&1))m=b+4|0;else m=c[b+8>>2]|0;if(d>>>0<536870887){k=e+d|0;l=d<<1;k=k>>>0>>0?l:k;k=k>>>0<2?2:k+4&-4}else k=1073741807;l=O_(k<<2)|0;if(g)h1(l,m,g)|0;if(i)h1(l+(g<<2)|0,j,i)|0;e=f-h|0;if((e|0)!=(g|0))h1(l+(i+g<<2)|0,m+(h+g<<2)|0,e-g|0)|0;if((d|0)!=1)P_(m);c[b+8>>2]=l;c[b>>2]=k|1;d=e+i|0;c[b+4>>2]=d;c[l+(d<<2)>>2]=0;return}function K2(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,l=0;if((1073741807-d|0)>>>0>>0)L_(b);if(!(a[b>>0]&1))l=b+4|0;else l=c[b+8>>2]|0;if(d>>>0<536870887){j=e+d|0;k=d<<1;j=j>>>0>>0?k:j;j=j>>>0<2?2:j+4&-4}else j=1073741807;k=O_(j<<2)|0;if(g)h1(k,l,g)|0;e=f-h|0;if((e|0)!=(g|0))h1(k+(i+g<<2)|0,l+(h+g<<2)|0,e-g|0)|0;if((d|0)!=1)P_(l);c[b+8>>2]=k;c[b>>2]=j|1;return}function L2(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0;g=d;f=e-g|0;if(f>>>0>4294967279)L_(b);if(f>>>0<11){a[b>>0]=f<<1;h=b+1|0}else{i=f+16&-16;h=O_(i)|0;c[b+8>>2]=h;c[b>>2]=i|1;c[b+4>>2]=f}b=e-g|0;if((d|0)!=(e|0)){f=h;while(1){a[f>>0]=a[d>>0]|0;d=d+1|0;if((d|0)==(e|0))break;else f=f+1|0}}a[h+b>>0]=0;return}function M2(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0;h=d;f=e-h|0;g=f>>2;if(g>>>0>1073741807)L_(b);if(g>>>0<2){a[b>>0]=f>>>1;b=b+4|0}else{i=g+4&-4;f=O_(i<<2)|0;c[b+8>>2]=f;c[b>>2]=i|1;c[b+4>>2]=g;b=f}g=(e-h|0)>>>2;if((d|0)!=(e|0)){f=b;while(1){c[f>>2]=c[d>>2];d=d+4|0;if((d|0)==(e|0))break;else f=f+4|0}}c[b+(g<<2)>>2]=0;return}function N2(a,b){a=a|0;b=b|0;c[a+16>>2]=(c[a+24>>2]|0)==0|b;return}function O2(a){a=a|0;P2(a);return}function P2(a){a=a|0;c[a>>2]=53440;R2(a,0);m8(a+28|0);x1(c[a+32>>2]|0);x1(c[a+36>>2]|0);x1(c[a+48>>2]|0);x1(c[a+60>>2]|0);return}function Q2(a){a=a|0;P2(a);P_(a);return}function R2(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;d=c[a+40>>2]|0;e=a+32|0;f=a+36|0;if(d)do{d=d+-1|0;Dc[c[(c[e>>2]|0)+(d<<2)>>2]&63](b,a,c[(c[f>>2]|0)+(d<<2)>>2]|0)}while((d|0)!=0);return}function S2(a){a=a|0;var b=0,d=0;d=i;i=i+16|0;b=d;l8(b,a+28|0);i=d;return c[b>>2]|0}function T2(a,b){a=a|0;b=b|0;var d=0;c[a+24>>2]=b;c[a+16>>2]=(b|0)==0&1;c[a+20>>2]=0;c[a+4>>2]=4098;c[a+12>>2]=0;c[a+8>>2]=6;d=a+28|0;b=a+32|0;a=b+40|0;do{c[b>>2]=0;b=b+4|0}while((b|0)<(a|0));k8(d);return}function U2(a){a=a|0;c[a>>2]=53152;m8(a+4|0);return}function V2(a){a=a|0;c[a>>2]=53152;m8(a+4|0);P_(a);return}function W2(a){a=a|0;c[a>>2]=53152;k8(a+4|0);a=a+8|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;return}function X2(a,b){a=a|0;b=b|0;return}function Y2(a,b,c){a=a|0;b=b|0;c=c|0;return a|0}function Z2(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;b=a;c[b>>2]=0;c[b+4>>2]=0;b=a+8|0;c[b>>2]=-1;c[b+4>>2]=-1;return}function _2(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;b=a;c[b>>2]=0;c[b+4>>2]=0;b=a+8|0;c[b>>2]=-1;c[b+4>>2]=-1;return}function $2(a){a=a|0;return 0}function a3(a){a=a|0;return 0}function b3(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0;h=b+12|0;i=b+16|0;a:do if((e|0)>0){g=d;d=0;while(1){f=c[h>>2]|0;if(f>>>0<(c[i>>2]|0)>>>0){c[h>>2]=f+1;f=a[f>>0]|0}else{f=rc[c[(c[b>>2]|0)+40>>2]&127](b)|0;if((f|0)==-1)break a;f=f&255}a[g>>0]=f;d=d+1|0;if((d|0)<(e|0))g=g+1|0;else break}}else d=0;while(0);return d|0}function c3(a){a=a|0;return -1}function d3(a){a=a|0;var b=0;if((rc[c[(c[a>>2]|0)+36>>2]&127](a)|0)==-1)a=-1;else{b=a+12|0;a=c[b>>2]|0;c[b>>2]=a+1;a=d[a>>0]|0}return a|0}function e3(a,b){a=a|0;b=b|0;return -1}function f3(b,e,f){b=b|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0;i=b+24|0;j=b+28|0;a:do if((f|0)>0){h=e;e=0;while(1){g=c[i>>2]|0;if(g>>>0>=(c[j>>2]|0)>>>0){if((zc[c[(c[b>>2]|0)+52>>2]&255](b,d[h>>0]|0)|0)==-1)break a}else{k=a[h>>0]|0;c[i>>2]=g+1;a[g>>0]=k}e=e+1|0;if((e|0)<(f|0))h=h+1|0;else break}}else e=0;while(0);return e|0}function g3(a,b){a=a|0;b=b|0;return -1}function h3(a){a=a|0;c[a>>2]=53216;m8(a+4|0);return}function i3(a){a=a|0;c[a>>2]=53216;m8(a+4|0);P_(a);return}function j3(a){a=a|0;c[a>>2]=53216;k8(a+4|0);a=a+8|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;return}function k3(a,b){a=a|0;b=b|0;return}function l3(a,b,c){a=a|0;b=b|0;c=c|0;return a|0}function m3(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;b=a;c[b>>2]=0;c[b+4>>2]=0;b=a+8|0;c[b>>2]=-1;c[b+4>>2]=-1;return}function n3(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;b=a;c[b>>2]=0;c[b+4>>2]=0;b=a+8|0;c[b>>2]=-1;c[b+4>>2]=-1;return}function o3(a){a=a|0;return 0}function p3(a){a=a|0;return 0}function q3(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0;g=a+12|0;h=a+16|0;a:do if((d|0)>0){f=b;b=0;while(1){e=c[g>>2]|0;if(e>>>0>=(c[h>>2]|0)>>>0){e=rc[c[(c[a>>2]|0)+40>>2]&127](a)|0;if((e|0)==-1)break a}else{c[g>>2]=e+4;e=c[e>>2]|0}c[f>>2]=e;b=b+1|0;if((b|0)<(d|0))f=f+4|0;else break}}else b=0;while(0);return b|0}function r3(a){a=a|0;return -1}function s3(a){a=a|0;var b=0;if((rc[c[(c[a>>2]|0)+36>>2]&127](a)|0)==-1)a=-1;else{b=a+12|0;a=c[b>>2]|0;c[b>>2]=a+4;a=c[a>>2]|0}return a|0}function t3(a,b){a=a|0;b=b|0;return -1}function u3(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0;g=a+24|0;h=a+28|0;a:do if((d|0)>0){f=b;b=0;while(1){e=c[g>>2]|0;if(e>>>0>=(c[h>>2]|0)>>>0){if((zc[c[(c[a>>2]|0)+52>>2]&255](a,c[f>>2]|0)|0)==-1)break a}else{i=c[f>>2]|0;c[g>>2]=e+4;c[e>>2]=i}b=b+1|0;if((b|0)<(d|0))f=f+4|0;else break}}else b=0;while(0);return b|0}function v3(a,b){a=a|0;b=b|0;return -1}function w3(a){a=a|0;P2(a+8|0);return}function x3(a){a=a|0;P2(a+((c[(c[a>>2]|0)+-12>>2]|0)+8)|0);return}function y3(a){a=a|0;P2(a+8|0);P_(a);return}function z3(a){a=a|0;y3(a+(c[(c[a>>2]|0)+-12>>2]|0)|0);return}function A3(e,f,g){e=e|0;f=f|0;g=g|0;var h=0,j=0,k=0,l=0,m=0,n=0,o=0;o=i;i=i+16|0;l=o;a[e>>0]=0;h=c[(c[f>>2]|0)+-12>>2]|0;j=f+(h+16)|0;k=c[j>>2]|0;if(!k){h=c[f+(h+72)>>2]|0;if(h)B3(h)|0;do if(!g?(m=c[(c[f>>2]|0)+-12>>2]|0,(c[f+(m+4)>>2]&4096|0)!=0):0){c[l>>2]=S2(f+m|0)|0;g=o8(l,54552)|0;m8(l);h=c[f+((c[(c[f>>2]|0)+-12>>2]|0)+24)>>2]|0;g=g+8|0;a:do if(!h){h=0;n=9}else while(1){j=h;if((c[j+12>>2]|0)==(c[j+16>>2]|0)){m=(rc[c[(c[h>>2]|0)+36>>2]&127](j)|0)==-1;h=m?0:h;if(m){n=9;break a}}j=h;l=j+12|0;k=c[l>>2]|0;m=j+16|0;if((k|0)==(c[m>>2]|0))k=rc[c[(c[h>>2]|0)+36>>2]&127](j)|0;else k=d[k>>0]|0;if((k&255)<<24>>24<=-1)break a;if(!(b[(c[g>>2]|0)+(k<<24>>24<<1)>>1]&8192))break a;k=c[l>>2]|0;if((k|0)==(c[m>>2]|0))rc[c[(c[h>>2]|0)+40>>2]&127](j)|0;else c[l>>2]=k+1;if(!h){h=0;n=9;break}}while(0);if((n|0)==9)j=h;if(h){if((c[j+12>>2]|0)!=(c[j+16>>2]|0))break;if((rc[c[(c[h>>2]|0)+36>>2]&127](j)|0)!=-1)break}g=c[(c[f>>2]|0)+-12>>2]|0;n=f+(g+16)|0;c[n>>2]=c[n>>2]|(c[f+(g+24)>>2]|0)==0|6}while(0);a[e>>0]=(c[f+((c[(c[f>>2]|0)+-12>>2]|0)+16)>>2]|0)==0&1}else c[j>>2]=k|(c[f+(h+24)>>2]|0)==0|4;i=o;return}function B3(b){b=b|0;var d=0,e=0,f=0;e=i;i=i+16|0;d=e;if(c[b+((c[(c[b>>2]|0)+-12>>2]|0)+24)>>2]|0){M3(d,b);if((a[d>>0]|0)!=0?(f=c[b+((c[(c[b>>2]|0)+-12>>2]|0)+24)>>2]|0,(rc[c[(c[f>>2]|0)+24>>2]&127](f)|0)==-1):0){f=b+((c[(c[b>>2]|0)+-12>>2]|0)+16)|0;c[f>>2]=c[f>>2]|1}N3(d)}i=e;return b|0}function C3(a){a=a|0;P2(a+8|0);return}function D3(a){a=a|0;P2(a+((c[(c[a>>2]|0)+-12>>2]|0)+8)|0);return}function E3(a){a=a|0;P2(a+8|0);P_(a);return}function F3(a){a=a|0;E3(a+(c[(c[a>>2]|0)+-12>>2]|0)|0);return}function G3(b){b=b|0;var d=0,e=0,f=0;e=i;i=i+16|0;d=e;if(c[b+((c[(c[b>>2]|0)+-12>>2]|0)+24)>>2]|0){W3(d,b);if((a[d>>0]|0)!=0?(f=c[b+((c[(c[b>>2]|0)+-12>>2]|0)+24)>>2]|0,(rc[c[(c[f>>2]|0)+24>>2]&127](f)|0)==-1):0){f=b+((c[(c[b>>2]|0)+-12>>2]|0)+16)|0;c[f>>2]=c[f>>2]|1}X3(d)}i=e;return b|0}function H3(a,b){a=a|0;b=b|0;return}function I3(a){a=a|0;P2(a+4|0);return}function J3(a){a=a|0;P2(a+((c[(c[a>>2]|0)+-12>>2]|0)+4)|0);return}function K3(a){a=a|0;P2(a+4|0);P_(a);return}function L3(a){a=a|0;K3(a+(c[(c[a>>2]|0)+-12>>2]|0)|0);return}function M3(b,d){b=b|0;d=d|0;var e=0;a[b>>0]=0;c[b+4>>2]=d;e=c[(c[d>>2]|0)+-12>>2]|0;if(!(c[d+(e+16)>>2]|0)){e=c[d+(e+72)>>2]|0;if(e)B3(e)|0;a[b>>0]=1}return}function N3(a){a=a|0;var b=0,d=0;a=a+4|0;d=c[a>>2]|0;b=c[(c[d>>2]|0)+-12>>2]|0;if(((((c[d+(b+24)>>2]|0)!=0?(c[d+(b+16)>>2]|0)==0:0)?(c[d+(b+4)>>2]&8192|0)!=0:0)?!(Ia()|0):0)?(d=c[a>>2]|0,d=c[d+((c[(c[d>>2]|0)+-12>>2]|0)+24)>>2]|0,(rc[c[(c[d>>2]|0)+24>>2]&127](d)|0)==-1):0){d=c[a>>2]|0;d=d+((c[(c[d>>2]|0)+-12>>2]|0)+16)|0;c[d>>2]=c[d>>2]|1}return}function O3(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0;n=i;i=i+32|0;j=n+16|0;k=n+4|0;m=n+8|0;e=n;M3(m,b);if(a[m>>0]|0){c[e>>2]=S2(b+(c[(c[b>>2]|0)+-12>>2]|0)|0)|0;l=o8(e,53724)|0;m8(e);f=c[(c[b>>2]|0)+-12>>2]|0;g=c[b+(f+24)>>2]|0;h=b+f|0;f=b+(f+76)|0;e=c[f>>2]|0;if((e|0)==-1){c[j>>2]=S2(h)|0;e=o8(j,54552)|0;e=zc[c[(c[e>>2]|0)+28>>2]&255](e,32)|0;m8(j);e=e<<24>>24;c[f>>2]=e}f=c[(c[l>>2]|0)+16>>2]|0;c[k>>2]=g;c[j>>2]=c[k>>2];if(!(sc[f&31](l,j,h,e&255,d)|0)){d=b+((c[(c[b>>2]|0)+-12>>2]|0)+16)|0;c[d>>2]=c[d>>2]|5}}N3(m);i=n;return b|0}function P3(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0;n=i;i=i+32|0;j=n+16|0;k=n+4|0;m=n+8|0;e=n;M3(m,b);if(a[m>>0]|0){c[e>>2]=S2(b+(c[(c[b>>2]|0)+-12>>2]|0)|0)|0;l=o8(e,53724)|0;m8(e);f=c[(c[b>>2]|0)+-12>>2]|0;g=c[b+(f+24)>>2]|0;h=b+f|0;f=b+(f+76)|0;e=c[f>>2]|0;if((e|0)==-1){c[j>>2]=S2(h)|0;e=o8(j,54552)|0;e=zc[c[(c[e>>2]|0)+28>>2]&255](e,32)|0;m8(j);e=e<<24>>24;c[f>>2]=e}f=c[(c[l>>2]|0)+16>>2]|0;c[k>>2]=g;c[j>>2]=c[k>>2];if(!(sc[f&31](l,j,h,e&255,d)|0)){d=b+((c[(c[b>>2]|0)+-12>>2]|0)+16)|0;c[d>>2]=c[d>>2]|5}}N3(m);i=n;return b|0}function Q3(b,d){b=b|0;d=+d;var e=0,f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0;n=i;i=i+32|0;j=n+16|0;k=n+4|0;m=n+8|0;e=n;M3(m,b);if(a[m>>0]|0){c[e>>2]=S2(b+(c[(c[b>>2]|0)+-12>>2]|0)|0)|0;l=o8(e,53724)|0;m8(e);f=c[(c[b>>2]|0)+-12>>2]|0;g=c[b+(f+24)>>2]|0;h=b+f|0;f=b+(f+76)|0;e=c[f>>2]|0;if((e|0)==-1){c[j>>2]=S2(h)|0;e=o8(j,54552)|0;e=zc[c[(c[e>>2]|0)+28>>2]&255](e,32)|0;m8(j);e=e<<24>>24;c[f>>2]=e}f=c[(c[l>>2]|0)+32>>2]|0;c[k>>2]=g;c[j>>2]=c[k>>2];if(!(Gc[f&7](l,j,h,e&255,d)|0)){l=b+((c[(c[b>>2]|0)+-12>>2]|0)+16)|0;c[l>>2]=c[l>>2]|5}}N3(m);i=n;return b|0}function R3(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,j=0,k=0;k=i;i=i+16|0;j=k;M3(j,b);a:do if(a[j>>0]|0){f=c[b+((c[(c[b>>2]|0)+-12>>2]|0)+24)>>2]|0;g=f;do if(f){h=g+24|0;e=c[h>>2]|0;if((e|0)==(c[g+28>>2]|0))if((zc[c[(c[f>>2]|0)+52>>2]&255](g,d&255)|0)==-1)break;else break a;else{c[h>>2]=e+1;a[e>>0]=d;break a}}while(0);d=b+((c[(c[b>>2]|0)+-12>>2]|0)+16)|0;c[d>>2]=c[d>>2]|1}while(0);N3(j);i=k;return b|0}function S3(a){a=a|0;P2(a+4|0);return}function T3(a){a=a|0;P2(a+((c[(c[a>>2]|0)+-12>>2]|0)+4)|0);return}function U3(a){a=a|0;P2(a+4|0);P_(a);return}function V3(a){a=a|0;U3(a+(c[(c[a>>2]|0)+-12>>2]|0)|0);return}function W3(b,d){b=b|0;d=d|0;var e=0;a[b>>0]=0;c[b+4>>2]=d;e=c[(c[d>>2]|0)+-12>>2]|0;if(!(c[d+(e+16)>>2]|0)){e=c[d+(e+72)>>2]|0;if(e)G3(e)|0;a[b>>0]=1}return}function X3(a){a=a|0;var b=0,d=0;a=a+4|0;d=c[a>>2]|0;b=c[(c[d>>2]|0)+-12>>2]|0;if(((((c[d+(b+24)>>2]|0)!=0?(c[d+(b+16)>>2]|0)==0:0)?(c[d+(b+4)>>2]&8192|0)!=0:0)?!(Ia()|0):0)?(d=c[a>>2]|0,d=c[d+((c[(c[d>>2]|0)+-12>>2]|0)+24)>>2]|0,(rc[c[(c[d>>2]|0)+24>>2]&127](d)|0)==-1):0){d=c[a>>2]|0;d=d+((c[(c[d>>2]|0)+-12>>2]|0)+16)|0;c[d>>2]=c[d>>2]|1}return}function Y3(a,b){a=a|0;b=b|0;return}function Z3(a){a=a|0;P2(a+12|0);return}function _3(a){a=a|0;P2(a+-8+12|0);return}function $3(a){a=a|0;P2(a+((c[(c[a>>2]|0)+-12>>2]|0)+12)|0);return}function a4(a){a=a|0;P2(a+12|0);P_(a);return}function b4(a){a=a|0;a4(a+-8|0);return}function c4(a){a=a|0;a4(a+(c[(c[a>>2]|0)+-12>>2]|0)|0);return}function d4(a){a=a|0;P2(a);P_(a);return}function e4(a){a=a|0;a=a+16|0;c[a>>2]=c[a>>2]|1;return}function f4(a){a=a|0;return}function g4(a){a=a|0;return}function h4(a){a=a|0;P_(a);return}function i4(b,c,d,e,f){b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;var g=0,h=0;a:do if((e|0)==(f|0))h=6;else while(1){if((c|0)==(d|0)){c=-1;break a}b=a[c>>0]|0;g=a[e>>0]|0;if(b<<24>>24>24){c=-1;break a}if(g<<24>>24>24){c=1;break a}c=c+1|0;e=e+1|0;if((e|0)==(f|0)){h=6;break}}while(0);if((h|0)==6)c=(c|0)!=(d|0)&1;return c|0}function j4(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;L2(a,c,d);return}function k4(b,c,d){b=b|0;c=c|0;d=d|0;var e=0;if((c|0)==(d|0))b=0;else{b=0;do{b=(a[c>>0]|0)+(b<<4)|0;e=b&-268435456;b=(e>>>24|e)^b;c=c+1|0}while((c|0)!=(d|0))}return b|0}function l4(a){a=a|0;return}function m4(a){a=a|0;P_(a);return}function n4(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0;a:do if((e|0)==(f|0))h=6;else while(1){if((b|0)==(d|0)){b=-1;break a}a=c[b>>2]|0;g=c[e>>2]|0;if((a|0)<(g|0)){b=-1;break a}if((g|0)<(a|0)){b=1;break a}b=b+4|0;e=e+4|0;if((e|0)==(f|0)){h=6;break}}while(0);if((h|0)==6)b=(b|0)!=(d|0)&1;return b|0}function o4(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;M2(a,c,d);return}function p4(a,b,d){a=a|0;b=b|0;d=d|0;var e=0;if((b|0)==(d|0))a=0;else{a=0;do{a=(c[b>>2]|0)+(a<<4)|0;e=a&-268435456;a=(e>>>24|e)^a;b=b+4|0}while((b|0)!=(d|0))}return a|0}function q4(a){a=a|0;return}function r4(a){a=a|0;P_(a);return}function s4(b,d,e,f,g,h){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;var j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0;s=i;i=i+64|0;k=s+56|0;j=s+52|0;r=s+48|0;l=s+44|0;m=s+40|0;n=s+36|0;o=s+32|0;q=s+8|0;p=s;a:do if(!(c[f+4>>2]&1)){c[r>>2]=-1;q=c[(c[b>>2]|0)+16>>2]|0;c[l>>2]=c[d>>2];c[m>>2]=c[e>>2];c[j>>2]=c[l>>2];c[k>>2]=c[m>>2];j=qc[q&63](b,j,k,f,g,r)|0;c[d>>2]=j;switch(c[r>>2]|0){case 0:{a[h>>0]=0;break a}case 1:{a[h>>0]=1;break a}default:{a[h>>0]=1;c[g>>2]=4;break a}}}else{b=S2(f)|0;c[n>>2]=b;j=o8(n,54552)|0;Mba(b)|0;b=S2(f)|0;c[o>>2]=b;r=o8(o,54692)|0;Mba(b)|0;pc[c[(c[r>>2]|0)+24>>2]&1023](q,r);pc[c[(c[r>>2]|0)+28>>2]&1023](q+12|0,r);c[p>>2]=c[e>>2];c[k>>2]=c[p>>2];a[h>>0]=(aaa(d,k,q,q+24|0,j,g,1)|0)==(q|0)&1;j=c[d>>2]|0;o2(q+12|0);o2(q)}while(0);i=s;return j|0}function t4(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,j=0,k=0,l=0,m=0;h=i;i=i+16|0;j=h+12|0;k=h+8|0;m=h+4|0;l=h;c[m>>2]=c[b>>2];c[l>>2]=c[d>>2];c[k>>2]=c[m>>2];c[j>>2]=c[l>>2];a=baa(a,k,j,e,f,g)|0;i=h;return a|0}function u4(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,j=0,k=0,l=0,m=0;h=i;i=i+16|0;j=h+12|0;k=h+8|0;m=h+4|0;l=h;c[m>>2]=c[b>>2];c[l>>2]=c[d>>2];c[k>>2]=c[m>>2];c[j>>2]=c[l>>2];a=caa(a,k,j,e,f,g)|0;i=h;return a|0}function v4(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,j=0,k=0,l=0,m=0;h=i;i=i+16|0;j=h+12|0;k=h+8|0;m=h+4|0;l=h;c[m>>2]=c[b>>2];c[l>>2]=c[d>>2];c[k>>2]=c[m>>2];c[j>>2]=c[l>>2];a=daa(a,k,j,e,f,g)|0;i=h;return a|0}function w4(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,j=0,k=0,l=0,m=0;h=i;i=i+16|0;j=h+12|0;k=h+8|0;m=h+4|0;l=h;c[m>>2]=c[b>>2];c[l>>2]=c[d>>2];c[k>>2]=c[m>>2];c[j>>2]=c[l>>2];a=eaa(a,k,j,e,f,g)|0;i=h;return a|0}function x4(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,j=0,k=0,l=0,m=0;h=i;i=i+16|0;j=h+12|0;k=h+8|0;m=h+4|0;l=h;c[m>>2]=c[b>>2];c[l>>2]=c[d>>2];c[k>>2]=c[m>>2];c[j>>2]=c[l>>2];a=faa(a,k,j,e,f,g)|0;i=h;return a|0}function y4(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,j=0,k=0,l=0,m=0;h=i;i=i+16|0;j=h+12|0;k=h+8|0;m=h+4|0;l=h;c[m>>2]=c[b>>2];c[l>>2]=c[d>>2];c[k>>2]=c[m>>2];c[j>>2]=c[l>>2];a=gaa(a,k,j,e,f,g)|0;i=h;return a|0}function z4(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,j=0,k=0,l=0,m=0;h=i;i=i+16|0;j=h+12|0;k=h+8|0;m=h+4|0;l=h;c[m>>2]=c[b>>2];c[l>>2]=c[d>>2];c[k>>2]=c[m>>2];c[j>>2]=c[l>>2];a=haa(a,k,j,e,f,g)|0;i=h;return a|0}function A4(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,j=0,k=0,l=0,m=0;h=i;i=i+16|0;j=h+12|0;k=h+8|0;m=h+4|0;l=h;c[m>>2]=c[b>>2];c[l>>2]=c[d>>2];c[k>>2]=c[m>>2];c[j>>2]=c[l>>2];a=iaa(a,k,j,e,f,g)|0;i=h;return a|0}function B4(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,j=0,k=0,l=0,m=0;h=i;i=i+16|0;j=h+12|0;k=h+8|0;m=h+4|0;l=h;c[m>>2]=c[b>>2];c[l>>2]=c[d>>2];c[k>>2]=c[m>>2];c[j>>2]=c[l>>2];a=jaa(a,k,j,e,f,g)|0;i=h;return a|0}function C4(b,e,f,g,h,j){b=b|0;e=e|0;f=f|0;g=g|0;h=h|0;j=j|0;var k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0;z=i;i=i+240|0;w=z;p=z+208|0;y=z+32|0;t=z+28|0;x=z+16|0;v=z+12|0;r=z+48|0;s=z+8|0;q=z+4|0;c[y>>2]=0;c[y+4>>2]=0;c[y+8>>2]=0;u=S2(g)|0;c[t>>2]=u;t=o8(t,54552)|0;Cc[c[(c[t>>2]|0)+32>>2]&7](t,87527,87553,p)|0;Mba(u)|0;c[x>>2]=0;c[x+4>>2]=0;c[x+8>>2]=0;if(!(a[x>>0]&1))b=10;else b=(c[x>>2]&-2)+-1|0;s2(x,b,0);t=x+8|0;u=x+1|0;g=(a[x>>0]&1)==0?u:c[t>>2]|0;c[v>>2]=g;c[s>>2]=r;c[q>>2]=0;o=x+4|0;b=c[e>>2]|0;a:while(1){if(b){if((c[b+12>>2]|0)==(c[b+16>>2]|0)?(rc[c[(c[b>>2]|0)+36>>2]&127](b)|0)==-1:0){c[e>>2]=0;b=0}}else b=0;l=(b|0)==0;k=c[f>>2]|0;do if(k){if((c[k+12>>2]|0)!=(c[k+16>>2]|0))if(l)break;else break a;if((rc[c[(c[k>>2]|0)+36>>2]&127](k)|0)!=-1)if(l)break;else break a;else{c[f>>2]=0;A=13;break}}else A=13;while(0);if((A|0)==13){A=0;if(l){k=0;break}else k=0}l=a[x>>0]|0;l=(l&1)==0?(l&255)>>>1:c[o>>2]|0;if((c[v>>2]|0)==(g+l|0)){s2(x,l<<1,0);if(!(a[x>>0]&1))g=10;else g=(c[x>>2]&-2)+-1|0;s2(x,g,0);g=(a[x>>0]&1)==0?u:c[t>>2]|0;c[v>>2]=g+l}m=b+12|0;l=c[m>>2]|0;n=b+16|0;if((l|0)==(c[n>>2]|0))l=rc[c[(c[b>>2]|0)+36>>2]&127](b)|0;else l=d[l>>0]|0;if(D4(l&255,16,g,v,q,0,y,r,s,p)|0)break;k=c[m>>2]|0;if((k|0)==(c[n>>2]|0)){rc[c[(c[b>>2]|0)+40>>2]&127](b)|0;continue}else{c[m>>2]=k+1;continue}}s2(x,(c[v>>2]|0)-g|0,0);u=(a[x>>0]&1)==0?u:c[t>>2]|0;v=E4()|0;c[w>>2]=j;if((kaa(u,v,88911,w)|0)!=1)c[h>>2]=4;if(b){if((c[b+12>>2]|0)==(c[b+16>>2]|0)?(rc[c[(c[b>>2]|0)+36>>2]&127](b)|0)==-1:0){c[e>>2]=0;b=0}}else b=0;b=(b|0)==0;do if(k){if((c[k+12>>2]|0)==(c[k+16>>2]|0)?(rc[c[(c[k>>2]|0)+36>>2]&127](k)|0)==-1:0){c[f>>2]=0;A=37;break}if(!b)A=38}else A=37;while(0);if((A|0)==37?b:0)A=38;if((A|0)==38)c[h>>2]=c[h>>2]|2;A=c[e>>2]|0;o2(x);o2(y);i=z;return A|0}function D4(b,d,e,f,g,h,i,j,k,l){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;k=k|0;l=l|0;var m=0,n=0,o=0,p=0;o=c[f>>2]|0;p=(o|0)==(e|0);do if(p){m=(a[l+24>>0]|0)==b<<24>>24;if(!m?(a[l+25>>0]|0)!=b<<24>>24:0){n=5;break}c[f>>2]=e+1;a[e>>0]=m?43:45;c[g>>2]=0;m=0}else n=5;while(0);a:do if((n|0)==5){n=a[i>>0]|0;if(b<<24>>24==h<<24>>24?(((n&1)==0?(n&255)>>>1:c[i+4>>2]|0)|0)!=0:0){m=c[k>>2]|0;if((m-j|0)>=160){m=0;break}d=c[g>>2]|0;c[k>>2]=m+4;c[m>>2]=d;c[g>>2]=0;m=0;break}i=l+26|0;m=l;while(1){if((a[m>>0]|0)==b<<24>>24)break;m=m+1|0;if((m|0)==(i|0)){m=i;break}}m=m-l|0;if((m|0)>23)m=-1;else{switch(d|0){case 10:case 8:{if((m|0)>=(d|0)){m=-1;break a}break}case 16:{if((m|0)>=22){if(p){m=-1;break a}if((o-e|0)>=3){m=-1;break a}if((a[o+-1>>0]|0)!=48){m=-1;break a}c[g>>2]=0;m=a[87527+m>>0]|0;c[f>>2]=o+1;a[o>>0]=m;m=0;break a}break}default:{}}m=a[87527+m>>0]|0;c[f>>2]=o+1;a[o>>0]=m;c[g>>2]=(c[g>>2]|0)+1;m=0}}while(0);return m|0}function E4(){if((a[11512]|0)==0?(Ga(11512)|0)!=0:0){c[13779]=Z$(2147483647,88914,0)|0;$a(11512)}return c[13779]|0}function F4(a){a=a|0;return}function G4(a){a=a|0;P_(a);return}function H4(b,d,e,f,g,h){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;var j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0;s=i;i=i+64|0;k=s+56|0;j=s+52|0;r=s+48|0;l=s+44|0;m=s+40|0;n=s+36|0;o=s+32|0;q=s+8|0;p=s;a:do if(!(c[f+4>>2]&1)){c[r>>2]=-1;q=c[(c[b>>2]|0)+16>>2]|0;c[l>>2]=c[d>>2];c[m>>2]=c[e>>2];c[j>>2]=c[l>>2];c[k>>2]=c[m>>2];j=qc[q&63](b,j,k,f,g,r)|0;c[d>>2]=j;switch(c[r>>2]|0){case 0:{a[h>>0]=0;break a}case 1:{a[h>>0]=1;break a}default:{a[h>>0]=1;c[g>>2]=4;break a}}}else{b=S2(f)|0;c[n>>2]=b;j=o8(n,54544)|0;Mba(b)|0;b=S2(f)|0;c[o>>2]=b;r=o8(o,54700)|0;Mba(b)|0;pc[c[(c[r>>2]|0)+24>>2]&1023](q,r);pc[c[(c[r>>2]|0)+28>>2]&1023](q+12|0,r);c[p>>2]=c[e>>2];c[k>>2]=c[p>>2];a[h>>0]=(laa(d,k,q,q+24|0,j,g,1)|0)==(q|0)&1;j=c[d>>2]|0;E2(q+12|0);E2(q)}while(0);i=s;return j|0}function I4(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,j=0,k=0,l=0,m=0;h=i;i=i+16|0;j=h+12|0;k=h+8|0;m=h+4|0;l=h;c[m>>2]=c[b>>2];c[l>>2]=c[d>>2];c[k>>2]=c[m>>2];c[j>>2]=c[l>>2];a=maa(a,k,j,e,f,g)|0;i=h;return a|0}function J4(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,j=0,k=0,l=0,m=0;h=i;i=i+16|0;j=h+12|0;k=h+8|0;m=h+4|0;l=h;c[m>>2]=c[b>>2];c[l>>2]=c[d>>2];c[k>>2]=c[m>>2];c[j>>2]=c[l>>2];a=naa(a,k,j,e,f,g)|0;i=h;return a|0}function K4(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,j=0,k=0,l=0,m=0;h=i;i=i+16|0;j=h+12|0;k=h+8|0;m=h+4|0;l=h;c[m>>2]=c[b>>2];c[l>>2]=c[d>>2];c[k>>2]=c[m>>2];c[j>>2]=c[l>>2];a=oaa(a,k,j,e,f,g)|0;i=h;return a|0}function L4(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,j=0,k=0,l=0,m=0;h=i;i=i+16|0;j=h+12|0;k=h+8|0;m=h+4|0;l=h;c[m>>2]=c[b>>2];c[l>>2]=c[d>>2];c[k>>2]=c[m>>2];c[j>>2]=c[l>>2];a=paa(a,k,j,e,f,g)|0;i=h;return a|0}function M4(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,j=0,k=0,l=0,m=0;h=i;i=i+16|0;j=h+12|0;k=h+8|0;m=h+4|0;l=h;c[m>>2]=c[b>>2];c[l>>2]=c[d>>2];c[k>>2]=c[m>>2];c[j>>2]=c[l>>2];a=qaa(a,k,j,e,f,g)|0;i=h;return a|0}function N4(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,j=0,k=0,l=0,m=0;h=i;i=i+16|0;j=h+12|0;k=h+8|0;m=h+4|0;l=h;c[m>>2]=c[b>>2];c[l>>2]=c[d>>2];c[k>>2]=c[m>>2];c[j>>2]=c[l>>2];a=raa(a,k,j,e,f,g)|0;i=h;return a|0}function O4(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,j=0,k=0,l=0,m=0;h=i;i=i+16|0;j=h+12|0;k=h+8|0;m=h+4|0;l=h;c[m>>2]=c[b>>2];c[l>>2]=c[d>>2];c[k>>2]=c[m>>2];c[j>>2]=c[l>>2];a=saa(a,k,j,e,f,g)|0;i=h;return a|0}function P4(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,j=0,k=0,l=0,m=0;h=i;i=i+16|0;j=h+12|0;k=h+8|0;m=h+4|0;l=h;c[m>>2]=c[b>>2];c[l>>2]=c[d>>2];c[k>>2]=c[m>>2];c[j>>2]=c[l>>2];a=taa(a,k,j,e,f,g)|0;i=h;return a|0}function Q4(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,j=0,k=0,l=0,m=0;h=i;i=i+16|0;j=h+12|0;k=h+8|0;m=h+4|0;l=h;c[m>>2]=c[b>>2];c[l>>2]=c[d>>2];c[k>>2]=c[m>>2];c[j>>2]=c[l>>2];a=uaa(a,k,j,e,f,g)|0;i=h;return a|0}function R4(b,d,e,f,g,h){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;var j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0;y=i;i=i+320|0;v=y;o=y+208|0;x=y+32|0;s=y+28|0;w=y+16|0;u=y+12|0;q=y+48|0;r=y+8|0;p=y+4|0;c[x>>2]=0;c[x+4>>2]=0;c[x+8>>2]=0;t=S2(f)|0;c[s>>2]=t;s=o8(s,54544)|0;Cc[c[(c[s>>2]|0)+48>>2]&7](s,87527,87553,o)|0;Mba(t)|0;c[w>>2]=0;c[w+4>>2]=0;c[w+8>>2]=0;if(!(a[w>>0]&1))b=10;else b=(c[w>>2]&-2)+-1|0;s2(w,b,0);s=w+8|0;t=w+1|0;b=(a[w>>0]&1)==0?t:c[s>>2]|0;c[u>>2]=b;c[r>>2]=q;c[p>>2]=0;n=w+4|0;j=c[d>>2]|0;a:while(1){if(j){f=c[j+12>>2]|0;if((f|0)==(c[j+16>>2]|0))f=rc[c[(c[j>>2]|0)+36>>2]&127](j)|0;else f=c[f>>2]|0;if((f|0)==-1){c[d>>2]=0;f=0;l=1}else{f=j;l=0}}else{f=0;l=1}j=c[e>>2]|0;do if(j){k=c[j+12>>2]|0;if((k|0)==(c[j+16>>2]|0))k=rc[c[(c[j>>2]|0)+36>>2]&127](j)|0;else k=c[k>>2]|0;if((k|0)!=-1)if(l)break;else break a;else{c[e>>2]=0;z=16;break}}else z=16;while(0);if((z|0)==16){z=0;if(l){j=0;break}else j=0}k=a[w>>0]|0;k=(k&1)==0?(k&255)>>>1:c[n>>2]|0;if((c[u>>2]|0)==(b+k|0)){s2(w,k<<1,0);if(!(a[w>>0]&1))b=10;else b=(c[w>>2]&-2)+-1|0;s2(w,b,0);b=(a[w>>0]&1)==0?t:c[s>>2]|0;c[u>>2]=b+k}l=f+12|0;k=c[l>>2]|0;m=f+16|0;if((k|0)==(c[m>>2]|0))k=rc[c[(c[f>>2]|0)+36>>2]&127](f)|0;else k=c[k>>2]|0;if(S4(k,16,b,u,p,0,x,q,r,o)|0)break;j=c[l>>2]|0;if((j|0)==(c[m>>2]|0)){rc[c[(c[f>>2]|0)+40>>2]&127](f)|0;j=f;continue}else{c[l>>2]=j+4;j=f;continue}}s2(w,(c[u>>2]|0)-b|0,0);t=(a[w>>0]&1)==0?t:c[s>>2]|0;u=E4()|0;c[v>>2]=h;if((kaa(t,u,88911,v)|0)!=1)c[g>>2]=4;if(f){b=c[f+12>>2]|0;if((b|0)==(c[f+16>>2]|0))b=rc[c[(c[f>>2]|0)+36>>2]&127](f)|0;else b=c[b>>2]|0;if((b|0)==-1){c[d>>2]=0;f=1}else f=0}else f=1;do if(j){b=c[j+12>>2]|0;if((b|0)==(c[j+16>>2]|0))b=rc[c[(c[j>>2]|0)+36>>2]&127](j)|0;else b=c[b>>2]|0;if((b|0)!=-1)if(f)break;else{z=45;break}else{c[e>>2]=0;z=43;break}}else z=43;while(0);if((z|0)==43?f:0)z=45;if((z|0)==45)c[g>>2]=c[g>>2]|2;z=c[d>>2]|0;o2(w);o2(x);i=y;return z|0}function S4(b,d,e,f,g,h,i,j,k,l){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;k=k|0;l=l|0;var m=0,n=0,o=0,p=0;o=c[f>>2]|0;p=(o|0)==(e|0);do if(p){m=(c[l+96>>2]|0)==(b|0);if(!m?(c[l+100>>2]|0)!=(b|0):0){n=5;break}c[f>>2]=e+1;a[e>>0]=m?43:45;c[g>>2]=0;m=0}else n=5;while(0);a:do if((n|0)==5){n=a[i>>0]|0;if((b|0)==(h|0)?(((n&1)==0?(n&255)>>>1:c[i+4>>2]|0)|0)!=0:0){m=c[k>>2]|0;if((m-j|0)>=160){m=0;break}d=c[g>>2]|0;c[k>>2]=m+4;c[m>>2]=d;c[g>>2]=0;m=0;break}i=l+104|0;m=l;while(1){if((c[m>>2]|0)==(b|0))break;m=m+4|0;if((m|0)==(i|0)){m=i;break}}m=m-l|0;i=m>>2;if((m|0)>92)m=-1;else{switch(d|0){case 10:case 8:{if((i|0)>=(d|0)){m=-1;break a}break}case 16:{if((m|0)>=88){if(p){m=-1;break a}if((o-e|0)>=3){m=-1;break a}if((a[o+-1>>0]|0)!=48){m=-1;break a}c[g>>2]=0;m=a[87527+i>>0]|0;c[f>>2]=o+1;a[o>>0]=m;m=0;break a}break}default:{}}m=a[87527+i>>0]|0;c[f>>2]=o+1;a[o>>0]=m;c[g>>2]=(c[g>>2]|0)+1;m=0}}while(0);return m|0}function T4(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,j=0;g=i;i=i+16|0;h=g;d=S2(d)|0;c[h>>2]=d;j=o8(h,54552)|0;Cc[c[(c[j>>2]|0)+32>>2]&7](j,87527,87553,e)|0;e=o8(h,54692)|0;a[f>>0]=rc[c[(c[e>>2]|0)+16>>2]&127](e)|0;pc[c[(c[e>>2]|0)+20>>2]&1023](b,e);Mba(d)|0;i=g;return}function U4(b,d,e,f,g){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,j=0,k=0;h=i;i=i+16|0;j=h;d=S2(d)|0;c[j>>2]=d;k=o8(j,54552)|0;Cc[c[(c[k>>2]|0)+32>>2]&7](k,87527,87559,e)|0;e=o8(j,54692)|0;a[f>>0]=rc[c[(c[e>>2]|0)+12>>2]&127](e)|0;a[g>>0]=rc[c[(c[e>>2]|0)+16>>2]&127](e)|0;pc[c[(c[e>>2]|0)+20>>2]&1023](b,e);Mba(d)|0;i=h;return}function V4(b,e,f,g,h,i,j,k,l,m,n,o){b=b|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;k=k|0;l=l|0;m=m|0;n=n|0;o=o|0;var p=0,q=0;a:do if(b<<24>>24==i<<24>>24)if(a[e>>0]|0){a[e>>0]=0;f=c[h>>2]|0;c[h>>2]=f+1;a[f>>0]=46;f=a[k>>0]|0;if((((f&1)==0?(f&255)>>>1:c[k+4>>2]|0)|0)!=0?(p=c[m>>2]|0,(p-l|0)<160):0){l=c[n>>2]|0;c[m>>2]=p+4;c[p>>2]=l;p=0}else p=0}else p=-1;else{if(b<<24>>24==j<<24>>24?(j=a[k>>0]|0,(((j&1)==0?(j&255)>>>1:c[k+4>>2]|0)|0)!=0):0){if(!(a[e>>0]|0)){p=-1;break}p=c[m>>2]|0;if((p-l|0)>=160){p=0;break}l=c[n>>2]|0;c[m>>2]=p+4;c[p>>2]=l;c[n>>2]=0;p=0;break}i=o+32|0;p=o;while(1){if((a[p>>0]|0)==b<<24>>24)break;p=p+1|0;if((p|0)==(i|0)){p=i;break}}i=p-o|0;if((i|0)>31)p=-1;else{j=a[87527+i>>0]|0;switch(i|0){case 24:case 25:{p=c[h>>2]|0;if((p|0)!=(g|0)?(d[p+-1>>0]&95|0)!=(d[f>>0]&127|0):0){p=-1;break a}c[h>>2]=p+1;a[p>>0]=j;p=0;break a}case 23:case 22:{a[f>>0]=80;p=c[h>>2]|0;c[h>>2]=p+1;a[p>>0]=j;p=0;break a}default:{p=j&95;if((((p|0)==(a[f>>0]|0)?(a[f>>0]=p|128,(a[e>>0]|0)!=0):0)?(a[e>>0]=0,f=a[k>>0]|0,(((f&1)==0?(f&255)>>>1:c[k+4>>2]|0)|0)!=0):0)?(q=c[m>>2]|0,(q-l|0)<160):0){l=c[n>>2]|0;c[m>>2]=q+4;c[q>>2]=l}m=c[h>>2]|0;c[h>>2]=m+1;a[m>>0]=j;if((i|0)>21){p=0;break a}c[n>>2]=(c[n>>2]|0)+1;p=0;break a}}}}while(0);return p|0}function W4(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0;f=i;i=i+16|0;g=f;b=S2(b)|0;c[g>>2]=b;h=o8(g,54544)|0;Cc[c[(c[h>>2]|0)+48>>2]&7](h,87527,87553,d)|0;d=o8(g,54700)|0;c[e>>2]=rc[c[(c[d>>2]|0)+16>>2]&127](d)|0;pc[c[(c[d>>2]|0)+20>>2]&1023](a,d);Mba(b)|0;i=f;return}function X4(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,j=0;g=i;i=i+16|0;h=g;b=S2(b)|0;c[h>>2]=b;j=o8(h,54544)|0;Cc[c[(c[j>>2]|0)+48>>2]&7](j,87527,87559,d)|0;d=o8(h,54700)|0;c[e>>2]=rc[c[(c[d>>2]|0)+12>>2]&127](d)|0;c[f>>2]=rc[c[(c[d>>2]|0)+16>>2]&127](d)|0;pc[c[(c[d>>2]|0)+20>>2]&1023](a,d);Mba(b)|0;i=g;return}function Y4(b,e,f,g,h,i,j,k,l,m,n,o){b=b|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;k=k|0;l=l|0;m=m|0;n=n|0;o=o|0;var p=0,q=0;a:do if((b|0)==(i|0))if(a[e>>0]|0){a[e>>0]=0;f=c[h>>2]|0;c[h>>2]=f+1;a[f>>0]=46;f=a[k>>0]|0;if((((f&1)==0?(f&255)>>>1:c[k+4>>2]|0)|0)!=0?(p=c[m>>2]|0,(p-l|0)<160):0){l=c[n>>2]|0;c[m>>2]=p+4;c[p>>2]=l;p=0}else p=0}else p=-1;else{if((b|0)==(j|0)?(j=a[k>>0]|0,(((j&1)==0?(j&255)>>>1:c[k+4>>2]|0)|0)!=0):0){if(!(a[e>>0]|0)){p=-1;break}p=c[m>>2]|0;if((p-l|0)>=160){p=0;break}l=c[n>>2]|0;c[m>>2]=p+4;c[p>>2]=l;c[n>>2]=0;p=0;break}i=o+128|0;p=o;while(1){if((c[p>>2]|0)==(b|0))break;p=p+4|0;if((p|0)==(i|0)){p=i;break}}i=p-o|0;p=i>>2;if((i|0)<=124){j=a[87527+p>>0]|0;switch(p|0){case 24:case 25:{p=c[h>>2]|0;if((p|0)!=(g|0)?(d[p+-1>>0]&95|0)!=(d[f>>0]&127|0):0){p=-1;break a}c[h>>2]=p+1;a[p>>0]=j;p=0;break a}case 23:case 22:{a[f>>0]=80;break}default:{p=j&95;if((((p|0)==(a[f>>0]|0)?(a[f>>0]=p|128,(a[e>>0]|0)!=0):0)?(a[e>>0]=0,f=a[k>>0]|0,(((f&1)==0?(f&255)>>>1:c[k+4>>2]|0)|0)!=0):0)?(q=c[m>>2]|0,(q-l|0)<160):0){l=c[n>>2]|0;c[m>>2]=q+4;c[q>>2]=l}}}m=c[h>>2]|0;c[h>>2]=m+1;a[m>>0]=j;if((i|0)>84)p=0;else{c[n>>2]=(c[n>>2]|0)+1;p=0}}else p=-1}while(0);return p|0}function Z4(a){a=a|0;return}function _4(a){a=a|0;P_(a);return}function $4(b,d,e,f,g){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,j=0,k=0,l=0,m=0,n=0;n=i;i=i+32|0;h=n+20|0;j=n+16|0;k=n+12|0;m=n;if(!(c[e+4>>2]&1)){m=c[(c[b>>2]|0)+24>>2]|0;c[j>>2]=c[d>>2];c[h>>2]=c[j>>2];h=sc[m&31](b,h,e,f,g&1)|0}else{j=S2(e)|0;c[k>>2]=j;h=o8(k,54692)|0;Mba(j)|0;j=c[h>>2]|0;if(g)pc[c[j+24>>2]&1023](m,h);else pc[c[j+28>>2]&1023](m,h);e=a[m>>0]|0;l=(e&1)==0;h=m+1|0;g=m+8|0;b=l?h:m+1|0;h=l?h:c[m+8>>2]|0;l=m+4|0;f=(e&1)==0;if((h|0)!=((f?b:c[g>>2]|0)+(f?(e&255)>>>1:c[l>>2]|0)|0))do{j=a[h>>0]|0;k=c[d>>2]|0;do if(k){f=k+24|0;e=c[f>>2]|0;if((e|0)!=(c[k+28>>2]|0)){c[f>>2]=e+1;a[e>>0]=j;break}if((zc[c[(c[k>>2]|0)+52>>2]&255](k,j&255)|0)==-1)c[d>>2]=0}while(0);h=h+1|0;e=a[m>>0]|0;f=(e&1)==0}while((h|0)!=((f?b:c[g>>2]|0)+(f?(e&255)>>>1:c[l>>2]|0)|0));h=c[d>>2]|0;o2(m)}i=n;return h|0}function a5(b,d,e,f,g){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0;h=i;i=i+64|0;k=h;o=h+56|0;q=h+44|0;j=h+20|0;m=h+16|0;b=h+12|0;n=h+8|0;l=h+4|0;a[o>>0]=a[88916]|0;a[o+1>>0]=a[88917]|0;a[o+2>>0]=a[88918]|0;a[o+3>>0]=a[88919]|0;a[o+4>>0]=a[88920]|0;a[o+5>>0]=a[88921]|0;b5(o+1|0,88922,1,c[e+4>>2]|0);p=E4()|0;c[k>>2]=g;o=q+(vaa(q,12,p,o,k)|0)|0;p=c5(q,o,e)|0;g=S2(e)|0;c[n>>2]=g;d5(q,p,o,j,m,b,n);Mba(g)|0;c[l>>2]=c[d>>2];g=c[m>>2]|0;b=c[b>>2]|0;c[k>>2]=c[l>>2];b=xE(k,j,g,b,e,f)|0;i=h;return b|0}function b5(b,c,d,e){b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0;if(e&2048){a[b>>0]=43;b=b+1|0}if(e&512){a[b>>0]=35;b=b+1|0}f=a[c>>0]|0;if(f<<24>>24){g=c;while(1){g=g+1|0;c=b+1|0;a[b>>0]=f;f=a[g>>0]|0;if(!(f<<24>>24)){b=c;break}else b=c}}a:do switch(e&74|0){case 64:{a[b>>0]=111;break}case 8:if(!(e&16384)){a[b>>0]=120;break a}else{a[b>>0]=88;break a}default:if(d){a[b>>0]=100;break a}else{a[b>>0]=117;break a}}while(0);return}function c5(b,d,e){b=b|0;d=d|0;e=e|0;var f=0;a:do switch(c[e+4>>2]&176|0){case 16:{e=a[b>>0]|0;switch(e<<24>>24){case 43:case 45:{b=b+1|0;break a}default:{}}if((d-b|0)>1&e<<24>>24==48){switch(a[b+1>>0]|0){case 88:case 120:break;default:{f=7;break a}}b=b+2|0}else f=7;break}case 32:{b=d;break}default:f=7}while(0);return b|0}function d5(b,d,e,f,g,h,j){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;j=j|0;var k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0;t=i;i=i+16|0;s=t;r=o8(j,54552)|0;m=o8(j,54692)|0;pc[c[(c[m>>2]|0)+20>>2]&1023](s,m);p=a[s>>0]|0;q=s+4|0;if(((p&1)==0?(p&255)>>>1:c[q>>2]|0)|0){c[h>>2]=f;j=a[b>>0]|0;switch(j<<24>>24){case 43:case 45:{p=zc[c[(c[r>>2]|0)+28>>2]&255](r,j)|0;k=c[h>>2]|0;c[h>>2]=k+1;a[k>>0]=p;k=b+1|0;break}default:k=b}a:do if((e-k|0)>1?(a[k>>0]|0)==48:0){j=k+1|0;switch(a[j>>0]|0){case 88:case 120:break;default:break a}p=zc[c[(c[r>>2]|0)+28>>2]&255](r,48)|0;o=c[h>>2]|0;c[h>>2]=o+1;a[o>>0]=p;o=zc[c[(c[r>>2]|0)+28>>2]&255](r,a[j>>0]|0)|0;p=c[h>>2]|0;c[h>>2]=p+1;a[p>>0]=o;k=k+2|0}while(0);if((k|0)!=(e|0)?(n=e+-1|0,k>>>0>>0):0){l=k;j=n;do{p=a[l>>0]|0;a[l>>0]=a[j>>0]|0;a[j>>0]=p;l=l+1|0;j=j+-1|0}while(l>>>0>>0)}m=rc[c[(c[m>>2]|0)+16>>2]&127](m)|0;n=s+8|0;o=s+1|0;if(k>>>0>>0){j=0;l=0;p=k;while(1){u=a[((a[s>>0]&1)==0?o:c[n>>2]|0)+l>>0]|0;if(u<<24>>24!=0&(j|0)==(u<<24>>24|0)){u=c[h>>2]|0;c[h>>2]=u+1;a[u>>0]=m;u=a[s>>0]|0;j=0;l=(l>>>0<(((u&1)==0?(u&255)>>>1:c[q>>2]|0)+-1|0)>>>0&1)+l|0}v=zc[c[(c[r>>2]|0)+28>>2]&255](r,a[p>>0]|0)|0;u=c[h>>2]|0;c[h>>2]=u+1;a[u>>0]=v;p=p+1|0;if(p>>>0>=e>>>0)break;else j=j+1|0}}j=f+(k-b)|0;k=c[h>>2]|0;if((j|0)!=(k|0)){k=k+-1|0;if(j>>>0>>0)do{v=a[j>>0]|0;a[j>>0]=a[k>>0]|0;a[k>>0]=v;j=j+1|0;k=k+-1|0}while(j>>>0>>0);j=c[h>>2]|0}}else{Cc[c[(c[r>>2]|0)+32>>2]&7](r,b,e,f)|0;j=f+(e-b)|0;c[h>>2]=j}c[g>>2]=(d|0)==(e|0)?j:f+(d-b)|0;o2(s);i=t;return}function e5(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0;h=i;i=i+96|0;k=h+8|0;o=h;p=h+74|0;j=h+32|0;m=h+28|0;a=h+24|0;n=h+20|0;l=h+16|0;q=o;c[q>>2]=37;c[q+4>>2]=0;b5(o+1|0,88924,1,c[d+4>>2]|0);q=E4()|0;r=k;c[r>>2]=f;c[r+4>>2]=g;f=p+(vaa(p,22,q,o,k)|0)|0;o=c5(p,f,d)|0;g=S2(d)|0;c[n>>2]=g;d5(p,o,f,j,m,a,n);Mba(g)|0;c[l>>2]=c[b>>2];b=c[m>>2]|0;a=c[a>>2]|0;c[k>>2]=c[l>>2];a=xE(k,j,b,a,d,e)|0;i=h;return a|0}function f5(b,d,e,f,g){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0;h=i;i=i+64|0;k=h;o=h+56|0;q=h+44|0;j=h+20|0;m=h+16|0;b=h+12|0;n=h+8|0;l=h+4|0;a[o>>0]=a[88916]|0;a[o+1>>0]=a[88917]|0;a[o+2>>0]=a[88918]|0;a[o+3>>0]=a[88919]|0;a[o+4>>0]=a[88920]|0;a[o+5>>0]=a[88921]|0;b5(o+1|0,88922,0,c[e+4>>2]|0);p=E4()|0;c[k>>2]=g;o=q+(vaa(q,12,p,o,k)|0)|0;p=c5(q,o,e)|0;g=S2(e)|0;c[n>>2]=g;d5(q,p,o,j,m,b,n);Mba(g)|0;c[l>>2]=c[d>>2];g=c[m>>2]|0;b=c[b>>2]|0;c[k>>2]=c[l>>2];b=xE(k,j,g,b,e,f)|0;i=h;return b|0}function g5(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0;h=i;i=i+112|0;k=h+8|0;o=h;p=h+75|0;j=h+32|0;m=h+28|0;a=h+24|0;n=h+20|0;l=h+16|0;q=o;c[q>>2]=37;c[q+4>>2]=0;b5(o+1|0,88924,0,c[d+4>>2]|0);q=E4()|0;r=k;c[r>>2]=f;c[r+4>>2]=g;f=p+(vaa(p,23,q,o,k)|0)|0;o=c5(p,f,d)|0;g=S2(d)|0;c[n>>2]=g;d5(p,o,f,j,m,a,n);Mba(g)|0;c[l>>2]=c[b>>2];b=c[m>>2]|0;a=c[a>>2]|0;c[k>>2]=c[l>>2];a=xE(k,j,b,a,d,e)|0;i=h;return a|0}function h5(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=+f;var g=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0;v=i;i=i+160|0;p=v+68|0;l=v+32|0;j=v+24|0;g=v+8|0;k=v;n=v+72|0;m=v+64|0;o=v+102|0;u=v+60|0;t=v+56|0;q=v+52|0;r=v+48|0;B=k;c[B>>2]=37;c[B+4>>2]=0;B=i5(k+1|0,88927,c[d+4>>2]|0)|0;c[m>>2]=n;a=E4()|0;if(B){c[g>>2]=c[d+8>>2];h[g+8>>3]=f;a=vaa(n,30,a,k,g)|0}else{h[j>>3]=f;a=vaa(n,30,a,k,j)|0}if((a|0)>29){g=E4()|0;c[l>>2]=c[d+8>>2];h[l+8>>3]=f;g=waa(m,g,k,l)|0;a=c[m>>2]|0;if(!a)A$();else{w=a;z=a;s=g}}else{w=c[m>>2]|0;z=0;s=a}g=w+s|0;j=c5(w,g,d)|0;if((w|0)!=(n|0)){a=w1(s<<1)|0;if(!a)A$();else{x=w;y=a;A=a}}else{x=n;y=0;A=o}B=S2(d)|0;c[q>>2]=B;j5(x,j,g,A,u,t,q);Mba(B)|0;c[r>>2]=c[b>>2];b=c[u>>2]|0;B=c[t>>2]|0;c[p>>2]=c[r>>2];B=xE(p,A,b,B,d,e)|0;x1(y);x1(z);i=v;return B|0}function i5(b,c,d){b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,i=0;if(d&2048){a[b>>0]=43;b=b+1|0}if(d&1024){a[b>>0]=35;b=b+1|0}h=d&260;f=d>>>14;i=(h|0)==260;if(i)g=0;else{a[b>>0]=46;a[b+1>>0]=42;b=b+2|0;g=1}d=a[c>>0]|0;if(d<<24>>24){e=b;while(1){c=c+1|0;b=e+1|0;a[e>>0]=d;d=a[c>>0]|0;if(!(d<<24>>24))break;else e=b}}a:do switch(h|0){case 4:if(!(f&1)){a[b>>0]=102;break a}else{a[b>>0]=70;break a}case 256:if(!(f&1)){a[b>>0]=101;break a}else{a[b>>0]=69;break a}default:{d=(f&1|0)!=0;if(i)if(d){a[b>>0]=65;break a}else{a[b>>0]=97;break a}else if(d){a[b>>0]=71;break a}else{a[b>>0]=103;break a}}}while(0);return g|0}function j5(b,d,e,f,g,h,j){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;j=j|0;var k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0;x=i;i=i+16|0;w=x;v=o8(j,54552)|0;t=o8(j,54692)|0;pc[c[(c[t>>2]|0)+20>>2]&1023](w,t);c[h>>2]=f;j=a[b>>0]|0;switch(j<<24>>24){case 43:case 45:{u=zc[c[(c[v>>2]|0)+28>>2]&255](v,j)|0;m=c[h>>2]|0;c[h>>2]=m+1;a[m>>0]=u;m=b+1|0;break}default:m=b}u=e;a:do if((u-m|0)>1?(a[m>>0]|0)==48:0){j=m+1|0;switch(a[j>>0]|0){case 88:case 120:break;default:{n=4;break a}}s=zc[c[(c[v>>2]|0)+28>>2]&255](v,48)|0;r=c[h>>2]|0;c[h>>2]=r+1;a[r>>0]=s;m=m+2|0;r=zc[c[(c[v>>2]|0)+28>>2]&255](v,a[j>>0]|0)|0;s=c[h>>2]|0;c[h>>2]=s+1;a[s>>0]=r;if(m>>>0>>0){j=m;while(1){s=a[j>>0]|0;if(!(Y$(s,E4()|0)|0)){s=m;break a}j=j+1|0;if(j>>>0>=e>>>0){s=m;break}}}else{s=m;j=m}}else n=4;while(0);b:do if((n|0)==4)if(m>>>0>>0){j=m;while(1){s=a[j>>0]|0;if(!(X$(s,E4()|0)|0)){s=m;break b}j=j+1|0;if(j>>>0>=e>>>0){s=m;break}}}else{s=m;j=m}while(0);q=a[w>>0]|0;r=w+4|0;if(((q&1)==0?(q&255)>>>1:c[r>>2]|0)|0){if((s|0)!=(j|0)?(l=j+-1|0,s>>>0>>0):0){m=s;do{q=a[m>>0]|0;a[m>>0]=a[l>>0]|0;a[l>>0]=q;m=m+1|0;l=l+-1|0}while(m>>>0>>0)}n=rc[c[(c[t>>2]|0)+16>>2]&127](t)|0;o=w+8|0;p=w+1|0;if(s>>>0>>0){l=0;m=0;q=s;while(1){y=a[((a[w>>0]&1)==0?p:c[o>>2]|0)+m>>0]|0;if(y<<24>>24>0&(l|0)==(y<<24>>24|0)){y=c[h>>2]|0;c[h>>2]=y+1;a[y>>0]=n;y=a[w>>0]|0;l=0;m=(m>>>0<(((y&1)==0?(y&255)>>>1:c[r>>2]|0)+-1|0)>>>0&1)+m|0}z=zc[c[(c[v>>2]|0)+28>>2]&255](v,a[q>>0]|0)|0;y=c[h>>2]|0;c[h>>2]=y+1;a[y>>0]=z;q=q+1|0;if(q>>>0>=j>>>0)break;else l=l+1|0}}l=f+(s-b)|0;m=c[h>>2]|0;if((l|0)!=(m|0)?(k=m+-1|0,l>>>0>>0):0){do{z=a[l>>0]|0;a[l>>0]=a[k>>0]|0;a[k>>0]=z;l=l+1|0;k=k+-1|0}while(l>>>0>>0);l=v}else l=v}else{Cc[c[(c[v>>2]|0)+32>>2]&7](v,s,j,c[h>>2]|0)|0;c[h>>2]=(c[h>>2]|0)+(j-s);l=v}c:do if(j>>>0>>0){while(1){k=a[j>>0]|0;if(k<<24>>24==46)break;y=zc[c[(c[l>>2]|0)+28>>2]&255](v,k)|0;z=c[h>>2]|0;c[h>>2]=z+1;a[z>>0]=y;j=j+1|0;if(j>>>0>=e>>>0)break c}y=rc[c[(c[t>>2]|0)+12>>2]&127](t)|0;z=c[h>>2]|0;c[h>>2]=z+1;a[z>>0]=y;j=j+1|0}while(0);Cc[c[(c[v>>2]|0)+32>>2]&7](v,j,e,c[h>>2]|0)|0;z=(c[h>>2]|0)+(u-j)|0;c[h>>2]=z;c[g>>2]=(d|0)==(e|0)?z:f+(d-b)|0;o2(w);i=x;return}function k5(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=+f;var g=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0;x=i;i=i+176|0;r=x+76|0;n=x+48|0;m=x+32|0;j=x+24|0;g=x+8|0;l=x;p=x+80|0;o=x+72|0;q=x+110|0;w=x+68|0;v=x+64|0;s=x+60|0;t=x+56|0;k=l;c[k>>2]=37;c[k+4>>2]=0;k=i5(l+1|0,88928,c[d+4>>2]|0)|0;c[o>>2]=p;a=E4()|0;if(k){c[g>>2]=c[d+8>>2];h[g+8>>3]=f;a=vaa(p,30,a,l,g)|0}else{h[j>>3]=f;a=vaa(p,30,a,l,j)|0}if((a|0)>29){a=E4()|0;if(k){c[m>>2]=c[d+8>>2];h[m+8>>3]=f;g=waa(o,a,l,m)|0}else{h[n>>3]=f;g=waa(o,a,l,n)|0}a=c[o>>2]|0;if(!a)A$();else{y=a;B=a;u=g}}else{y=c[o>>2]|0;B=0;u=a}g=y+u|0;j=c5(y,g,d)|0;if((y|0)!=(p|0)){a=w1(u<<1)|0;if(!a)A$();else{z=y;A=a;C=a}}else{z=p;A=0;C=q}y=S2(d)|0;c[s>>2]=y;j5(z,j,g,C,w,v,s);Mba(y)|0;c[t>>2]=c[b>>2];z=c[w>>2]|0;b=c[v>>2]|0;c[r>>2]=c[t>>2];b=xE(r,C,z,b,d,e)|0;x1(A);x1(B);i=x;return b|0}function l5(b,d,e,f,g){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0;h=i;i=i+80|0;m=h;b=h+70|0;j=h+12|0;k=h+32|0;o=h+8|0;n=h+4|0;a[b>>0]=a[88930]|0;a[b+1>>0]=a[88931]|0;a[b+2>>0]=a[88932]|0;a[b+3>>0]=a[88933]|0;a[b+4>>0]=a[88934]|0;a[b+5>>0]=a[88935]|0;l=E4()|0;c[m>>2]=g;b=vaa(j,20,l,b,m)|0;l=j+b|0;g=c5(j,l,e)|0;p=S2(e)|0;c[o>>2]=p;o=o8(o,54552)|0;Mba(p)|0;Cc[c[(c[o>>2]|0)+32>>2]&7](o,j,l,k)|0;b=k+b|0;c[n>>2]=c[d>>2];c[m>>2]=c[n>>2];b=xE(m,k,(g|0)==(l|0)?b:k+(g-j)|0,b,e,f)|0;i=h;return b|0}function m5(a){a=a|0;return}function n5(a){a=a|0;P_(a);return}function o5(b,d,e,f,g){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,j=0,k=0,l=0,m=0;m=i;i=i+32|0;h=m+20|0;j=m+16|0;k=m+12|0;l=m;if(!(c[e+4>>2]&1)){l=c[(c[b>>2]|0)+24>>2]|0;c[j>>2]=c[d>>2];c[h>>2]=c[j>>2];h=sc[l&31](b,h,e,f,g&1)|0}else{j=S2(e)|0;c[k>>2]=j;h=o8(k,54700)|0;Mba(j)|0;j=c[h>>2]|0;if(g)pc[c[j+24>>2]&1023](l,h);else pc[c[j+28>>2]&1023](l,h);e=a[l>>0]|0;f=(e&1)==0;h=l+4|0;g=l+8|0;b=f?h:l+4|0;h=f?h:c[l+8>>2]|0;f=(e&1)==0;if((h|0)!=((f?b:c[g>>2]|0)+((f?(e&255)>>>1:c[b>>2]|0)<<2)|0))do{j=c[h>>2]|0;k=c[d>>2]|0;if(k){f=k+24|0;e=c[f>>2]|0;if((e|0)==(c[k+28>>2]|0))j=zc[c[(c[k>>2]|0)+52>>2]&255](k,j)|0;else{c[f>>2]=e+4;c[e>>2]=j}if((j|0)==-1)c[d>>2]=0}h=h+4|0;e=a[l>>0]|0;f=(e&1)==0}while((h|0)!=((f?b:c[g>>2]|0)+((f?(e&255)>>>1:c[b>>2]|0)<<2)|0));h=c[d>>2]|0;E2(l)}i=m;return h|0}function p5(b,d,e,f,g){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0;h=i;i=i+128|0;k=h;o=h+116|0;q=h+104|0;j=h+20|0;m=h+16|0;b=h+12|0;n=h+8|0;l=h+4|0;a[o>>0]=a[88916]|0;a[o+1>>0]=a[88917]|0;a[o+2>>0]=a[88918]|0;a[o+3>>0]=a[88919]|0;a[o+4>>0]=a[88920]|0;a[o+5>>0]=a[88921]|0;b5(o+1|0,88922,1,c[e+4>>2]|0);p=E4()|0;c[k>>2]=g;o=q+(vaa(q,12,p,o,k)|0)|0;p=c5(q,o,e)|0;g=S2(e)|0;c[n>>2]=g;q5(q,p,o,j,m,b,n);Mba(g)|0;c[l>>2]=c[d>>2];g=c[m>>2]|0;b=c[b>>2]|0;c[k>>2]=c[l>>2];b=xaa(k,j,g,b,e,f)|0;i=h;return b|0}function q5(b,d,e,f,g,h,j){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;j=j|0;var k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0;t=i;i=i+16|0;s=t;r=o8(j,54544)|0;m=o8(j,54700)|0;pc[c[(c[m>>2]|0)+20>>2]&1023](s,m);p=a[s>>0]|0;q=s+4|0;if(((p&1)==0?(p&255)>>>1:c[q>>2]|0)|0){c[h>>2]=f;j=a[b>>0]|0;switch(j<<24>>24){case 43:case 45:{p=zc[c[(c[r>>2]|0)+44>>2]&255](r,j)|0;k=c[h>>2]|0;c[h>>2]=k+4;c[k>>2]=p;k=b+1|0;break}default:k=b}a:do if((e-k|0)>1?(a[k>>0]|0)==48:0){j=k+1|0;switch(a[j>>0]|0){case 88:case 120:break;default:break a}p=zc[c[(c[r>>2]|0)+44>>2]&255](r,48)|0;o=c[h>>2]|0;c[h>>2]=o+4;c[o>>2]=p;o=zc[c[(c[r>>2]|0)+44>>2]&255](r,a[j>>0]|0)|0;p=c[h>>2]|0;c[h>>2]=p+4;c[p>>2]=o;k=k+2|0}while(0);if((k|0)!=(e|0)?(n=e+-1|0,k>>>0>>0):0){l=k;j=n;do{p=a[l>>0]|0;a[l>>0]=a[j>>0]|0;a[j>>0]=p;l=l+1|0;j=j+-1|0}while(l>>>0>>0)}m=rc[c[(c[m>>2]|0)+16>>2]&127](m)|0;n=s+8|0;o=s+1|0;if(k>>>0>>0){j=0;l=0;p=k;while(1){u=a[((a[s>>0]&1)==0?o:c[n>>2]|0)+l>>0]|0;if(u<<24>>24!=0&(j|0)==(u<<24>>24|0)){u=c[h>>2]|0;c[h>>2]=u+4;c[u>>2]=m;u=a[s>>0]|0;j=0;l=(l>>>0<(((u&1)==0?(u&255)>>>1:c[q>>2]|0)+-1|0)>>>0&1)+l|0}v=zc[c[(c[r>>2]|0)+44>>2]&255](r,a[p>>0]|0)|0;u=c[h>>2]|0;c[h>>2]=u+4;c[u>>2]=v;p=p+1|0;if(p>>>0>=e>>>0)break;else j=j+1|0}}j=f+(k-b<<2)|0;l=c[h>>2]|0;if((j|0)!=(l|0)){k=l+-4|0;if(j>>>0>>0){do{v=c[j>>2]|0;c[j>>2]=c[k>>2];c[k>>2]=v;j=j+4|0;k=k+-4|0}while(j>>>0>>0);j=l}else j=l}}else{Cc[c[(c[r>>2]|0)+48>>2]&7](r,b,e,f)|0;j=f+(e-b<<2)|0;c[h>>2]=j}c[g>>2]=(d|0)==(e|0)?j:f+(d-b<<2)|0;o2(s);i=t;return}function r5(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0;h=i;i=i+224|0;k=h+8|0;o=h;p=h+196|0;j=h+32|0;m=h+28|0;a=h+24|0;n=h+20|0;l=h+16|0;q=o;c[q>>2]=37;c[q+4>>2]=0;b5(o+1|0,88924,1,c[d+4>>2]|0);q=E4()|0;r=k;c[r>>2]=f;c[r+4>>2]=g;f=p+(vaa(p,22,q,o,k)|0)|0;o=c5(p,f,d)|0;g=S2(d)|0;c[n>>2]=g;q5(p,o,f,j,m,a,n);Mba(g)|0;c[l>>2]=c[b>>2];b=c[m>>2]|0;a=c[a>>2]|0;c[k>>2]=c[l>>2];a=xaa(k,j,b,a,d,e)|0;i=h;return a|0}function s5(b,d,e,f,g){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0;h=i;i=i+128|0;k=h;o=h+116|0;q=h+104|0;j=h+20|0;m=h+16|0;b=h+12|0;n=h+8|0;l=h+4|0;a[o>>0]=a[88916]|0;a[o+1>>0]=a[88917]|0;a[o+2>>0]=a[88918]|0;a[o+3>>0]=a[88919]|0;a[o+4>>0]=a[88920]|0;a[o+5>>0]=a[88921]|0;b5(o+1|0,88922,0,c[e+4>>2]|0);p=E4()|0;c[k>>2]=g;o=q+(vaa(q,12,p,o,k)|0)|0;p=c5(q,o,e)|0;g=S2(e)|0;c[n>>2]=g;q5(q,p,o,j,m,b,n);Mba(g)|0;c[l>>2]=c[d>>2];g=c[m>>2]|0;b=c[b>>2]|0;c[k>>2]=c[l>>2];b=xaa(k,j,g,b,e,f)|0;i=h;return b|0}function t5(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0;h=i;i=i+240|0;k=h+8|0;o=h;p=h+204|0;j=h+32|0;m=h+28|0;a=h+24|0;n=h+20|0;l=h+16|0;q=o;c[q>>2]=37;c[q+4>>2]=0;b5(o+1|0,88924,0,c[d+4>>2]|0);q=E4()|0;r=k;c[r>>2]=f;c[r+4>>2]=g;f=p+(vaa(p,23,q,o,k)|0)|0;o=c5(p,f,d)|0;g=S2(d)|0;c[n>>2]=g;q5(p,o,f,j,m,a,n);Mba(g)|0;c[l>>2]=c[b>>2];b=c[m>>2]|0;a=c[a>>2]|0;c[k>>2]=c[l>>2];a=xaa(k,j,b,a,d,e)|0;i=h;return a|0}function u5(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=+f;var g=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0;y=i;i=i+336|0;p=y+296|0;l=y+32|0;j=y+24|0;g=y+8|0;k=y;n=y+300|0;m=y+64|0;o=y+68|0;u=y+60|0;t=y+56|0;q=y+52|0;r=y+48|0;B=k;c[B>>2]=37;c[B+4>>2]=0;B=i5(k+1|0,88927,c[d+4>>2]|0)|0;c[m>>2]=n;a=E4()|0;if(B){c[g>>2]=c[d+8>>2];h[g+8>>3]=f;a=vaa(n,30,a,k,g)|0}else{h[j>>3]=f;a=vaa(n,30,a,k,j)|0}if((a|0)>29){g=E4()|0;c[l>>2]=c[d+8>>2];h[l+8>>3]=f;g=waa(m,g,k,l)|0;a=c[m>>2]|0;if(!a)A$();else{v=a;A=a;s=g}}else{v=c[m>>2]|0;A=0;s=a}g=v+s|0;j=c5(v,g,d)|0;if((v|0)!=(n|0)){a=w1(s<<3)|0;if(!a)A$();else{w=v;z=a;x=a}}else{w=n;z=0;x=o}B=S2(d)|0;c[q>>2]=B;v5(w,j,g,x,u,t,q);Mba(B)|0;c[r>>2]=c[b>>2];B=c[u>>2]|0;a=c[t>>2]|0;c[p>>2]=c[r>>2];a=xaa(p,x,B,a,d,e)|0;c[b>>2]=a;if(z)x1(z);x1(A);i=y;return a|0}function v5(b,d,e,f,g,h,j){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;j=j|0;var k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0;w=i;i=i+16|0;v=w;u=o8(j,54544)|0;s=o8(j,54700)|0;pc[c[(c[s>>2]|0)+20>>2]&1023](v,s);c[h>>2]=f;j=a[b>>0]|0;switch(j<<24>>24){case 43:case 45:{t=zc[c[(c[u>>2]|0)+44>>2]&255](u,j)|0;l=c[h>>2]|0;c[h>>2]=l+4;c[l>>2]=t;l=b+1|0;break}default:l=b}t=e;a:do if((t-l|0)>1?(a[l>>0]|0)==48:0){j=l+1|0;switch(a[j>>0]|0){case 88:case 120:break;default:{m=4;break a}}r=zc[c[(c[u>>2]|0)+44>>2]&255](u,48)|0;q=c[h>>2]|0;c[h>>2]=q+4;c[q>>2]=r;l=l+2|0;q=zc[c[(c[u>>2]|0)+44>>2]&255](u,a[j>>0]|0)|0;r=c[h>>2]|0;c[h>>2]=r+4;c[r>>2]=q;if(l>>>0>>0){j=l;while(1){r=a[j>>0]|0;if(!(Y$(r,E4()|0)|0)){r=l;break a}j=j+1|0;if(j>>>0>=e>>>0){r=l;break}}}else{r=l;j=l}}else m=4;while(0);b:do if((m|0)==4)if(l>>>0>>0){j=l;while(1){r=a[j>>0]|0;if(!(X$(r,E4()|0)|0)){r=l;break b}j=j+1|0;if(j>>>0>=e>>>0){r=l;break}}}else{r=l;j=l}while(0);p=a[v>>0]|0;q=v+4|0;if(((p&1)==0?(p&255)>>>1:c[q>>2]|0)|0){if((r|0)!=(j|0)?(k=j+-1|0,r>>>0>>0):0){l=r;do{p=a[l>>0]|0;a[l>>0]=a[k>>0]|0;a[k>>0]=p;l=l+1|0;k=k+-1|0}while(l>>>0>>0)}m=rc[c[(c[s>>2]|0)+16>>2]&127](s)|0;n=v+8|0;o=v+1|0;if(r>>>0>>0){k=0;l=0;p=r;while(1){x=a[((a[v>>0]&1)==0?o:c[n>>2]|0)+l>>0]|0;if(x<<24>>24>0&(k|0)==(x<<24>>24|0)){x=c[h>>2]|0;c[h>>2]=x+4;c[x>>2]=m;x=a[v>>0]|0;k=0;l=(l>>>0<(((x&1)==0?(x&255)>>>1:c[q>>2]|0)+-1|0)>>>0&1)+l|0}y=zc[c[(c[u>>2]|0)+44>>2]&255](u,a[p>>0]|0)|0;x=c[h>>2]|0;c[h>>2]=x+4;c[x>>2]=y;p=p+1|0;if(p>>>0>=j>>>0)break;else k=k+1|0}}k=f+(r-b<<2)|0;m=c[h>>2]|0;if((k|0)!=(m|0)){l=m+-4|0;if(k>>>0>>0){do{y=c[k>>2]|0;c[k>>2]=c[l>>2];c[l>>2]=y;k=k+4|0;l=l+-4|0}while(k>>>0>>0);l=u;k=m}else{l=u;k=m}}else l=u}else{Cc[c[(c[u>>2]|0)+48>>2]&7](u,r,j,c[h>>2]|0)|0;k=(c[h>>2]|0)+(j-r<<2)|0;c[h>>2]=k;l=u}c:do if(j>>>0>>0){while(1){k=a[j>>0]|0;if(k<<24>>24==46)break;x=zc[c[(c[l>>2]|0)+44>>2]&255](u,k)|0;y=c[h>>2]|0;k=y+4|0;c[h>>2]=k;c[y>>2]=x;j=j+1|0;if(j>>>0>=e>>>0)break c}x=rc[c[(c[s>>2]|0)+12>>2]&127](s)|0;y=c[h>>2]|0;k=y+4|0;c[h>>2]=k;c[y>>2]=x;j=j+1|0}while(0);Cc[c[(c[u>>2]|0)+48>>2]&7](u,j,e,k)|0;y=(c[h>>2]|0)+(t-j<<2)|0;c[h>>2]=y;c[g>>2]=(d|0)==(e|0)?y:f+(d-b<<2)|0;o2(v);i=w;return}function w5(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=+f;var g=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0;A=i;i=i+352|0;r=A+304|0;n=A+48|0;m=A+32|0;j=A+24|0;g=A+8|0;l=A;p=A+308|0;o=A+72|0;q=A+76|0;w=A+68|0;v=A+64|0;s=A+60|0;t=A+56|0;k=l;c[k>>2]=37;c[k+4>>2]=0;k=i5(l+1|0,88928,c[d+4>>2]|0)|0;c[o>>2]=p;a=E4()|0;if(k){c[g>>2]=c[d+8>>2];h[g+8>>3]=f;a=vaa(p,30,a,l,g)|0}else{h[j>>3]=f;a=vaa(p,30,a,l,j)|0}if((a|0)>29){a=E4()|0;if(k){c[m>>2]=c[d+8>>2];h[m+8>>3]=f;g=waa(o,a,l,m)|0}else{h[n>>3]=f;g=waa(o,a,l,n)|0}a=c[o>>2]|0;if(!a)A$();else{x=a;C=a;u=g}}else{x=c[o>>2]|0;C=0;u=a}g=x+u|0;j=c5(x,g,d)|0;if((x|0)!=(p|0)){a=w1(u<<3)|0;if(!a)A$();else{y=x;B=a;z=a}}else{y=p;B=0;z=q}a=S2(d)|0;c[s>>2]=a;v5(y,j,g,z,w,v,s);Mba(a)|0;c[t>>2]=c[b>>2];y=c[w>>2]|0;a=c[v>>2]|0;c[r>>2]=c[t>>2];a=xaa(r,z,y,a,d,e)|0;c[b>>2]=a;if(B)x1(B);x1(C);i=A;return a|0}function x5(b,d,e,f,g){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0;h=i;i=i+192|0;m=h;b=h+180|0;j=h+160|0;k=h+12|0;o=h+8|0;n=h+4|0;a[b>>0]=a[88930]|0;a[b+1>>0]=a[88931]|0;a[b+2>>0]=a[88932]|0;a[b+3>>0]=a[88933]|0;a[b+4>>0]=a[88934]|0;a[b+5>>0]=a[88935]|0;l=E4()|0;c[m>>2]=g;b=vaa(j,20,l,b,m)|0;l=j+b|0;g=c5(j,l,e)|0;p=S2(e)|0;c[o>>2]=p;o=o8(o,54544)|0;Mba(p)|0;Cc[c[(c[o>>2]|0)+48>>2]&7](o,j,l,k)|0;b=k+(b<<2)|0;c[n>>2]=c[d>>2];c[m>>2]=c[n>>2];b=xaa(m,k,(g|0)==(l|0)?b:k+(g-j<<2)|0,b,e,f)|0;i=h;return b|0}function y5(e,f,g,h,j,k,l,m){e=e|0;f=f|0;g=g|0;h=h|0;j=j|0;k=k|0;l=l|0;m=m|0;var n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0;B=i;i=i+32|0;u=B+16|0;t=B+12|0;x=B+8|0;v=B+4|0;w=B;y=S2(h)|0;c[x>>2]=y;x=o8(x,54552)|0;Mba(y)|0;c[j>>2]=0;y=x+8|0;n=c[f>>2]|0;a:do if((l|0)!=(m|0)){b:while(1){o=n;if(n){if((c[n+12>>2]|0)==(c[n+16>>2]|0)?(rc[c[(c[n>>2]|0)+36>>2]&127](n)|0)==-1:0){c[f>>2]=0;n=0;o=0}}else n=0;r=(n|0)==0;q=c[g>>2]|0;p=q;do if(q){if((c[q+12>>2]|0)==(c[q+16>>2]|0)?(rc[c[(c[q>>2]|0)+36>>2]&127](q)|0)==-1:0){c[g>>2]=0;p=0;A=11;break}if(!r){A=12;break b}}else A=11;while(0);if((A|0)==11){A=0;if(r){A=12;break}else q=0}c:do if((tc[c[(c[x>>2]|0)+36>>2]&63](x,a[l>>0]|0,0)|0)<<24>>24==37){q=l+1|0;if((q|0)==(m|0)){A=15;break b}s=tc[c[(c[x>>2]|0)+36>>2]&63](x,a[q>>0]|0,0)|0;switch(s<<24>>24){case 48:case 69:{r=l+2|0;if((r|0)==(m|0)){A=18;break b}l=q;q=tc[c[(c[x>>2]|0)+36>>2]&63](x,a[r>>0]|0,0)|0;n=s;break}default:{q=s;n=0}}s=c[(c[e>>2]|0)+36>>2]|0;c[v>>2]=o;c[w>>2]=p;c[t>>2]=c[v>>2];c[u>>2]=c[w>>2];c[f>>2]=uc[s&15](e,t,u,h,j,k,q,n)|0;l=l+2|0}else{o=a[l>>0]|0;if(o<<24>>24>-1?(z=c[y>>2]|0,(b[z+(o<<24>>24<<1)>>1]&8192)!=0):0){do{l=l+1|0;if((l|0)==(m|0)){l=m;break}o=a[l>>0]|0;if(o<<24>>24<=-1)break}while((b[z+(o<<24>>24<<1)>>1]&8192)!=0);o=q;while(1){if(n){if((c[n+12>>2]|0)==(c[n+16>>2]|0)?(rc[c[(c[n>>2]|0)+36>>2]&127](n)|0)==-1:0){c[f>>2]=0;n=0}}else n=0;p=(n|0)==0;do if(q){if((c[q+12>>2]|0)!=(c[q+16>>2]|0))if(p){s=o;break}else break c;if((rc[c[(c[q>>2]|0)+36>>2]&127](q)|0)!=-1)if(p^(o|0)==0){s=o;q=o;break}else break c;else{c[g>>2]=0;o=0;A=37;break}}else A=37;while(0);if((A|0)==37){A=0;if(p)break c;else{s=o;q=0}}p=n+12|0;o=c[p>>2]|0;r=n+16|0;if((o|0)==(c[r>>2]|0))o=rc[c[(c[n>>2]|0)+36>>2]&127](n)|0;else o=d[o>>0]|0;if((o&255)<<24>>24<=-1)break c;if(!(b[(c[y>>2]|0)+(o<<24>>24<<1)>>1]&8192))break c;o=c[p>>2]|0;if((o|0)==(c[r>>2]|0)){rc[c[(c[n>>2]|0)+40>>2]&127](n)|0;o=s;continue}else{c[p>>2]=o+1;o=s;continue}}}p=n+12|0;o=c[p>>2]|0;q=n+16|0;if((o|0)==(c[q>>2]|0))o=rc[c[(c[n>>2]|0)+36>>2]&127](n)|0;else o=d[o>>0]|0;s=zc[c[(c[x>>2]|0)+12>>2]&255](x,o&255)|0;if(s<<24>>24!=(zc[c[(c[x>>2]|0)+12>>2]&255](x,a[l>>0]|0)|0)<<24>>24){A=55;break b}o=c[p>>2]|0;if((o|0)==(c[q>>2]|0))rc[c[(c[n>>2]|0)+40>>2]&127](n)|0;else c[p>>2]=o+1;l=l+1|0}while(0);n=c[f>>2]|0;if(!((l|0)!=(m|0)&(c[j>>2]|0)==0))break a}if((A|0)==12){c[j>>2]=4;break}else if((A|0)==15){c[j>>2]=4;break}else if((A|0)==18){c[j>>2]=4;break}else if((A|0)==55){c[j>>2]=4;n=c[f>>2]|0;break}}while(0);if(n){if((c[n+12>>2]|0)==(c[n+16>>2]|0)?(rc[c[(c[n>>2]|0)+36>>2]&127](n)|0)==-1:0){c[f>>2]=0;n=0}}else n=0;l=(n|0)==0;o=c[g>>2]|0;do if(o){if((c[o+12>>2]|0)==(c[o+16>>2]|0)?(rc[c[(c[o>>2]|0)+36>>2]&127](o)|0)==-1:0){c[g>>2]=0;A=65;break}if(!l)A=66}else A=65;while(0);if((A|0)==65?l:0)A=66;if((A|0)==66)c[j>>2]=c[j>>2]|2;i=B;return n|0}function z5(a){a=a|0;return}function A5(a){a=a|0;P_(a);return}function B5(a){a=a|0;return 2}function C5(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,j=0,k=0,l=0,m=0;h=i;i=i+16|0;j=h+12|0;k=h+8|0;m=h+4|0;l=h;c[m>>2]=c[b>>2];c[l>>2]=c[d>>2];c[k>>2]=c[m>>2];c[j>>2]=c[l>>2];a=y5(a,k,j,e,f,g,88936,88944)|0;i=h;return a|0}function D5(b,d,e,f,g,h){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;var j=0,k=0,l=0,m=0,n=0,o=0,p=0;j=i;i=i+16|0;k=j+12|0;l=j+8|0;n=j+4|0;m=j;o=b+8|0;o=rc[c[(c[o>>2]|0)+20>>2]&127](o)|0;c[n>>2]=c[d>>2];c[m>>2]=c[e>>2];e=a[o>>0]|0;p=(e&1)==0;d=p?o+1|0:c[o+8>>2]|0;e=d+(p?(e&255)>>>1:c[o+4>>2]|0)|0;c[l>>2]=c[n>>2];c[k>>2]=c[m>>2];b=y5(b,l,k,f,g,h,d,e)|0;i=j;return b|0}function E5(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,j=0,k=0,l=0,m=0;h=i;i=i+16|0;j=h+8|0;m=h+4|0;k=h;l=S2(e)|0;c[m>>2]=l;e=o8(m,54552)|0;Mba(l)|0;c[k>>2]=c[d>>2];c[j>>2]=c[k>>2];F5(a,g+24|0,b,j,f,e);i=h;return c[b>>2]|0}function F5(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,j=0,k=0;h=i;i=i+16|0;j=h+4|0;k=h;a=a+8|0;a=rc[c[c[a>>2]>>2]&127](a)|0;c[k>>2]=c[e>>2];c[j>>2]=c[k>>2];d=(aaa(d,j,a,a+168|0,g,f,0)|0)-a|0;if((d|0)<168)c[b>>2]=((d|0)/12|0|0)%7|0;i=h;return}function G5(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,j=0,k=0,l=0,m=0;h=i;i=i+16|0;j=h+8|0;m=h+4|0;k=h;l=S2(e)|0;c[m>>2]=l;e=o8(m,54552)|0;Mba(l)|0;c[k>>2]=c[d>>2];c[j>>2]=c[k>>2];H5(a,g+16|0,b,j,f,e);i=h;return c[b>>2]|0}function H5(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,j=0,k=0;h=i;i=i+16|0;j=h+4|0;k=h;a=a+8|0;a=rc[c[(c[a>>2]|0)+4>>2]&127](a)|0;c[k>>2]=c[e>>2];c[j>>2]=c[k>>2];d=(aaa(d,j,a,a+288|0,g,f,0)|0)-a|0;if((d|0)<288)c[b>>2]=((d|0)/12|0|0)%12|0;i=h;return}function I5(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,j=0,k=0,l=0,m=0;h=i;i=i+16|0;j=h+8|0;m=h+4|0;k=h;l=S2(e)|0;c[m>>2]=l;e=o8(m,54552)|0;Mba(l)|0;c[k>>2]=c[d>>2];c[j>>2]=c[k>>2];J5(a,g+20|0,b,j,f,e);i=h;return c[b>>2]|0}function J5(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,j=0;h=i;i=i+16|0;a=h+4|0;j=h;c[j>>2]=c[e>>2];c[a>>2]=c[j>>2];a=yaa(d,a,f,g,4)|0;if(!(c[f>>2]&4)){if((a|0)<69)a=a+2e3|0;else a=(a+-69|0)>>>0<31?a+1900|0:a;c[b>>2]=a+-1900}i=h;return}function K5(b,d,e,f,g,h,j,k){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;j=j|0;k=k|0;var l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0;S=i;i=i+144|0;l=S+132|0;k=S+116|0;L=S+128|0;w=S+124|0;H=S+120|0;M=S+112|0;N=S+108|0;O=S+104|0;P=S+100|0;Q=S+96|0;R=S+92|0;m=S+88|0;n=S+84|0;o=S+80|0;p=S+76|0;q=S+72|0;r=S+68|0;s=S+64|0;t=S+60|0;u=S+56|0;v=S+52|0;x=S+48|0;y=S+44|0;z=S+40|0;A=S+36|0;B=S+32|0;C=S+28|0;D=S+24|0;E=S+20|0;F=S+16|0;G=S+12|0;I=S+8|0;J=S+4|0;K=S;c[g>>2]=0;U=S2(f)|0;c[L>>2]=U;L=o8(L,54552)|0;Mba(U)|0;do switch(j<<24>>24|0){case 65:case 97:{c[w>>2]=c[e>>2];c[l>>2]=c[w>>2];F5(b,h+24|0,d,l,g,L);T=26;break}case 104:case 66:case 98:{c[H>>2]=c[e>>2];c[l>>2]=c[H>>2];H5(b,h+16|0,d,l,g,L);T=26;break}case 99:{T=b+8|0;T=rc[c[(c[T>>2]|0)+12>>2]&127](T)|0;c[M>>2]=c[d>>2];c[N>>2]=c[e>>2];j=a[T>>0]|0;e=(j&1)==0;U=e?T+1|0:c[T+8>>2]|0;T=U+(e?(j&255)>>>1:c[T+4>>2]|0)|0;c[k>>2]=c[M>>2];c[l>>2]=c[N>>2];c[d>>2]=y5(b,k,l,f,g,h,U,T)|0;T=26;break}case 101:case 100:{c[O>>2]=c[e>>2];c[l>>2]=c[O>>2];L5(b,h+12|0,d,l,g,L);T=26;break}case 68:{c[P>>2]=c[d>>2];c[Q>>2]=c[e>>2];c[k>>2]=c[P>>2];c[l>>2]=c[Q>>2];c[d>>2]=y5(b,k,l,f,g,h,88944,88952)|0;T=26;break}case 70:{c[R>>2]=c[d>>2];c[m>>2]=c[e>>2];c[k>>2]=c[R>>2];c[l>>2]=c[m>>2];c[d>>2]=y5(b,k,l,f,g,h,88952,88960)|0;T=26;break}case 72:{c[n>>2]=c[e>>2];c[l>>2]=c[n>>2];M5(b,h+8|0,d,l,g,L);T=26;break}case 73:{c[o>>2]=c[e>>2];c[l>>2]=c[o>>2];N5(b,h+8|0,d,l,g,L);T=26;break}case 106:{c[p>>2]=c[e>>2];c[l>>2]=c[p>>2];O5(b,h+28|0,d,l,g,L);T=26;break}case 109:{c[q>>2]=c[e>>2];c[l>>2]=c[q>>2];P5(b,h+16|0,d,l,g,L);T=26;break}case 77:{c[r>>2]=c[e>>2];c[l>>2]=c[r>>2];Q5(b,h+4|0,d,l,g,L);T=26;break}case 116:case 110:{c[s>>2]=c[e>>2];c[l>>2]=c[s>>2];R5(b,d,l,g,L);T=26;break}case 112:{c[t>>2]=c[e>>2];c[l>>2]=c[t>>2];S5(b,h+8|0,d,l,g,L);T=26;break}case 114:{c[u>>2]=c[d>>2];c[v>>2]=c[e>>2];c[k>>2]=c[u>>2];c[l>>2]=c[v>>2];c[d>>2]=y5(b,k,l,f,g,h,88960,88971)|0;T=26;break}case 82:{c[x>>2]=c[d>>2];c[y>>2]=c[e>>2];c[k>>2]=c[x>>2];c[l>>2]=c[y>>2];c[d>>2]=y5(b,k,l,f,g,h,88971,88976)|0;T=26;break}case 83:{c[z>>2]=c[e>>2];c[l>>2]=c[z>>2];T5(b,h,d,l,g,L);T=26;break}case 84:{c[A>>2]=c[d>>2];c[B>>2]=c[e>>2];c[k>>2]=c[A>>2];c[l>>2]=c[B>>2];c[d>>2]=y5(b,k,l,f,g,h,88976,88984)|0;T=26;break}case 119:{c[C>>2]=c[e>>2];c[l>>2]=c[C>>2];U5(b,h+24|0,d,l,g,L);T=26;break}case 120:{U=c[(c[b>>2]|0)+20>>2]|0;c[D>>2]=c[d>>2];c[E>>2]=c[e>>2];c[k>>2]=c[D>>2];c[l>>2]=c[E>>2];k=qc[U&63](b,k,l,f,g,h)|0;break}case 88:{T=b+8|0;T=rc[c[(c[T>>2]|0)+24>>2]&127](T)|0;c[F>>2]=c[d>>2];c[G>>2]=c[e>>2];j=a[T>>0]|0;e=(j&1)==0;U=e?T+1|0:c[T+8>>2]|0;T=U+(e?(j&255)>>>1:c[T+4>>2]|0)|0;c[k>>2]=c[F>>2];c[l>>2]=c[G>>2];c[d>>2]=y5(b,k,l,f,g,h,U,T)|0;T=26;break}case 121:{c[I>>2]=c[e>>2];c[l>>2]=c[I>>2];J5(b,h+20|0,d,l,g,L);T=26;break}case 89:{c[J>>2]=c[e>>2];c[l>>2]=c[J>>2];V5(b,h+20|0,d,l,g,L);T=26;break}case 37:{c[K>>2]=c[e>>2];c[l>>2]=c[K>>2];W5(b,d,l,g,L);T=26;break}default:{c[g>>2]=c[g>>2]|4;T=26}}while(0);if((T|0)==26)k=c[d>>2]|0;i=S;return k|0}function L5(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,j=0;h=i;i=i+16|0;a=h+4|0;j=h;c[j>>2]=c[e>>2];c[a>>2]=c[j>>2];a=yaa(d,a,f,g,2)|0;d=c[f>>2]|0;if((a+-1|0)>>>0<31&(d&4|0)==0)c[b>>2]=a;else c[f>>2]=d|4;i=h;return}function M5(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,j=0;h=i;i=i+16|0;a=h+4|0;j=h;c[j>>2]=c[e>>2];c[a>>2]=c[j>>2];a=yaa(d,a,f,g,2)|0;d=c[f>>2]|0;if((a|0)<24&(d&4|0)==0)c[b>>2]=a;else c[f>>2]=d|4;i=h;return}function N5(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,j=0;h=i;i=i+16|0;a=h+4|0;j=h;c[j>>2]=c[e>>2];c[a>>2]=c[j>>2];a=yaa(d,a,f,g,2)|0;d=c[f>>2]|0;if((a+-1|0)>>>0<12&(d&4|0)==0)c[b>>2]=a;else c[f>>2]=d|4;i=h;return}function O5(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,j=0;h=i;i=i+16|0;a=h+4|0;j=h;c[j>>2]=c[e>>2];c[a>>2]=c[j>>2];a=yaa(d,a,f,g,3)|0;d=c[f>>2]|0;if((a|0)<366&(d&4|0)==0)c[b>>2]=a;else c[f>>2]=d|4;i=h;return}function P5(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,j=0;h=i;i=i+16|0;a=h+4|0;j=h;c[j>>2]=c[e>>2];c[a>>2]=c[j>>2];a=yaa(d,a,f,g,2)|0;d=c[f>>2]|0;if((a|0)<13&(d&4|0)==0)c[b>>2]=a+-1;else c[f>>2]=d|4;i=h;return}function Q5(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,j=0;h=i;i=i+16|0;a=h+4|0;j=h;c[j>>2]=c[e>>2];c[a>>2]=c[j>>2];a=yaa(d,a,f,g,2)|0;d=c[f>>2]|0;if((a|0)<60&(d&4|0)==0)c[b>>2]=a;else c[f>>2]=d|4;i=h;return}function R5(a,e,f,g,h){a=a|0;e=e|0;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0;j=h+8|0;a:while(1){h=c[e>>2]|0;do if(h){if((c[h+12>>2]|0)==(c[h+16>>2]|0))if((rc[c[(c[h>>2]|0)+36>>2]&127](h)|0)==-1){c[e>>2]=0;h=0;break}else{h=c[e>>2]|0;break}}else h=0;while(0);h=(h|0)==0;a=c[f>>2]|0;do if(a){if((c[a+12>>2]|0)!=(c[a+16>>2]|0))if(h)break;else break a;if((rc[c[(c[a>>2]|0)+36>>2]&127](a)|0)!=-1)if(h)break;else break a;else{c[f>>2]=0;k=12;break}}else k=12;while(0);if((k|0)==12){k=0;if(h){a=0;break}else a=0}h=c[e>>2]|0;i=c[h+12>>2]|0;if((i|0)==(c[h+16>>2]|0))h=rc[c[(c[h>>2]|0)+36>>2]&127](h)|0;else h=d[i>>0]|0;if((h&255)<<24>>24<=-1)break;if(!(b[(c[j>>2]|0)+(h<<24>>24<<1)>>1]&8192))break;h=c[e>>2]|0;a=h+12|0;i=c[a>>2]|0;if((i|0)==(c[h+16>>2]|0)){rc[c[(c[h>>2]|0)+40>>2]&127](h)|0;continue}else{c[a>>2]=i+1;continue}}h=c[e>>2]|0;do if(h){if((c[h+12>>2]|0)==(c[h+16>>2]|0))if((rc[c[(c[h>>2]|0)+36>>2]&127](h)|0)==-1){c[e>>2]=0;h=0;break}else{h=c[e>>2]|0;break}}else h=0;while(0);h=(h|0)==0;do if(a){if((c[a+12>>2]|0)==(c[a+16>>2]|0)?(rc[c[(c[a>>2]|0)+36>>2]&127](a)|0)==-1:0){c[f>>2]=0;k=32;break}if(!h)k=33}else k=32;while(0);if((k|0)==32?h:0)k=33;if((k|0)==33)c[g>>2]=c[g>>2]|2;return}function S5(b,d,e,f,g,h){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;var j=0,k=0,l=0,m=0,n=0;n=i;i=i+16|0;k=n+4|0;l=n;m=b+8|0;m=rc[c[(c[m>>2]|0)+8>>2]&127](m)|0;b=a[m>>0]|0;if(!(b&1))j=(b&255)>>>1;else j=c[m+4>>2]|0;b=a[m+12>>0]|0;if(!(b&1))b=(b&255)>>>1;else b=c[m+16>>2]|0;do if((j|0)!=(0-b|0)){c[l>>2]=c[f>>2];c[k>>2]=c[l>>2];b=aaa(e,k,m,m+24|0,h,g,0)|0;j=c[d>>2]|0;if((b|0)==(m|0)&(j|0)==12){c[d>>2]=0;break}if((j|0)<12&(b-m|0)==12)c[d>>2]=j+12}else c[g>>2]=c[g>>2]|4;while(0);i=n;return}function T5(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,j=0;h=i;i=i+16|0;a=h+4|0;j=h;c[j>>2]=c[e>>2];c[a>>2]=c[j>>2];a=yaa(d,a,f,g,2)|0;d=c[f>>2]|0;if((a|0)<61&(d&4|0)==0)c[b>>2]=a;else c[f>>2]=d|4;i=h;return}function U5(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,j=0;h=i;i=i+16|0;a=h+4|0;j=h;c[j>>2]=c[e>>2];c[a>>2]=c[j>>2];a=yaa(d,a,f,g,1)|0;d=c[f>>2]|0;if((a|0)<7&(d&4|0)==0)c[b>>2]=a;else c[f>>2]=d|4;i=h;return}function V5(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,j=0;h=i;i=i+16|0;a=h+4|0;j=h;c[j>>2]=c[e>>2];c[a>>2]=c[j>>2];a=yaa(d,a,f,g,4)|0;if(!(c[f>>2]&4))c[b>>2]=a+-1900;i=h;return}function W5(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;a=c[b>>2]|0;do if(a){if((c[a+12>>2]|0)==(c[a+16>>2]|0))if((rc[c[(c[a>>2]|0)+36>>2]&127](a)|0)==-1){c[b>>2]=0;a=0;break}else{a=c[b>>2]|0;break}}else a=0;while(0);h=(a|0)==0;a=c[e>>2]|0;do if(a){if((c[a+12>>2]|0)==(c[a+16>>2]|0)?(rc[c[(c[a>>2]|0)+36>>2]&127](a)|0)==-1:0){c[e>>2]=0;j=11;break}if(h){i=a;j=13}else j=12}else j=11;while(0);if((j|0)==11)if(h)j=12;else{i=0;j=13}a:do if((j|0)==12)c[f>>2]=c[f>>2]|6;else if((j|0)==13){a=c[b>>2]|0;h=c[a+12>>2]|0;if((h|0)==(c[a+16>>2]|0))a=rc[c[(c[a>>2]|0)+36>>2]&127](a)|0;else a=d[h>>0]|0;if((tc[c[(c[g>>2]|0)+36>>2]&63](g,a&255,0)|0)<<24>>24!=37){c[f>>2]=c[f>>2]|4;break}a=c[b>>2]|0;h=a+12|0;g=c[h>>2]|0;if((g|0)==(c[a+16>>2]|0)){rc[c[(c[a>>2]|0)+40>>2]&127](a)|0;a=c[b>>2]|0;if(!a)a=0;else j=21}else{c[h>>2]=g+1;j=21}do if((j|0)==21)if((c[a+12>>2]|0)==(c[a+16>>2]|0))if((rc[c[(c[a>>2]|0)+36>>2]&127](a)|0)==-1){c[b>>2]=0;a=0;break}else{a=c[b>>2]|0;break}while(0);a=(a|0)==0;do if(i){if((c[i+12>>2]|0)==(c[i+16>>2]|0)?(rc[c[(c[i>>2]|0)+36>>2]&127](i)|0)==-1:0){c[e>>2]=0;j=30;break}if(a)break a}else j=30;while(0);if((j|0)==30?!a:0)break;c[f>>2]=c[f>>2]|2}while(0);return}function X5(a,b,d,e,f,g,h,j){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;j=j|0;var k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0;w=i;i=i+32|0;r=w+16|0;q=w+12|0;u=w+8|0;s=w+4|0;t=w;k=S2(e)|0;c[u>>2]=k;u=o8(u,54544)|0;Mba(k)|0;c[f>>2]=0;k=c[b>>2]|0;a:do if((h|0)!=(j|0)){b:while(1){m=k;if(k){l=c[k+12>>2]|0;if((l|0)==(c[k+16>>2]|0))l=rc[c[(c[k>>2]|0)+36>>2]&127](k)|0;else l=c[l>>2]|0;if((l|0)==-1){c[b>>2]=0;k=0;o=1;p=0}else{o=0;p=m}}else{k=0;o=1;p=m}n=c[d>>2]|0;l=n;do if(n){m=c[n+12>>2]|0;if((m|0)==(c[n+16>>2]|0))m=rc[c[(c[n>>2]|0)+36>>2]&127](n)|0;else m=c[m>>2]|0;if((m|0)!=-1)if(o)break;else{v=16;break b}else{c[d>>2]=0;l=0;v=14;break}}else v=14;while(0);if((v|0)==14){v=0;if(o){v=16;break}else n=0}c:do if((tc[c[(c[u>>2]|0)+52>>2]&63](u,c[h>>2]|0,0)|0)<<24>>24==37){m=h+4|0;if((m|0)==(j|0)){v=19;break b}o=tc[c[(c[u>>2]|0)+52>>2]&63](u,c[m>>2]|0,0)|0;switch(o<<24>>24){case 48:case 69:{n=h+8|0;if((n|0)==(j|0)){v=22;break b}h=m;m=tc[c[(c[u>>2]|0)+52>>2]&63](u,c[n>>2]|0,0)|0;k=o;break}default:{m=o;k=0}}o=c[(c[a>>2]|0)+36>>2]|0;c[s>>2]=p;c[t>>2]=l;c[q>>2]=c[s>>2];c[r>>2]=c[t>>2];c[b>>2]=uc[o&15](a,q,r,e,f,g,m,k)|0;h=h+8|0}else{if(!(tc[c[(c[u>>2]|0)+12>>2]&63](u,8192,c[h>>2]|0)|0)){m=k+12|0;l=c[m>>2]|0;n=k+16|0;if((l|0)==(c[n>>2]|0))l=rc[c[(c[k>>2]|0)+36>>2]&127](k)|0;else l=c[l>>2]|0;p=zc[c[(c[u>>2]|0)+28>>2]&255](u,l)|0;if((p|0)!=(zc[c[(c[u>>2]|0)+28>>2]&255](u,c[h>>2]|0)|0)){v=59;break b}l=c[m>>2]|0;if((l|0)==(c[n>>2]|0))rc[c[(c[k>>2]|0)+40>>2]&127](k)|0;else c[m>>2]=l+4;h=h+4|0;break}do{h=h+4|0;if((h|0)==(j|0)){h=j;break}}while(tc[c[(c[u>>2]|0)+12>>2]&63](u,8192,c[h>>2]|0)|0);l=n;o=n;while(1){if(k){m=c[k+12>>2]|0;if((m|0)==(c[k+16>>2]|0))m=rc[c[(c[k>>2]|0)+36>>2]&127](k)|0;else m=c[m>>2]|0;if((m|0)==-1){c[b>>2]=0;n=1;k=0}else n=0}else{n=1;k=0}do if(o){m=c[o+12>>2]|0;if((m|0)==(c[o+16>>2]|0))m=rc[c[(c[o>>2]|0)+36>>2]&127](o)|0;else m=c[m>>2]|0;if((m|0)!=-1)if(n^(l|0)==0){p=l;o=l;break}else break c;else{c[d>>2]=0;l=0;v=42;break}}else v=42;while(0);if((v|0)==42){v=0;if(n)break c;else{p=l;o=0}}m=k+12|0;l=c[m>>2]|0;n=k+16|0;if((l|0)==(c[n>>2]|0))l=rc[c[(c[k>>2]|0)+36>>2]&127](k)|0;else l=c[l>>2]|0;if(!(tc[c[(c[u>>2]|0)+12>>2]&63](u,8192,l)|0))break c;l=c[m>>2]|0;if((l|0)==(c[n>>2]|0)){rc[c[(c[k>>2]|0)+40>>2]&127](k)|0;l=p;continue}else{c[m>>2]=l+4;l=p;continue}}}while(0);k=c[b>>2]|0;if(!((h|0)!=(j|0)&(c[f>>2]|0)==0))break a}if((v|0)==16){c[f>>2]=4;break}else if((v|0)==19){c[f>>2]=4;break}else if((v|0)==22){c[f>>2]=4;break}else if((v|0)==59){c[f>>2]=4;k=c[b>>2]|0;break}}while(0);if(k){h=c[k+12>>2]|0;if((h|0)==(c[k+16>>2]|0))h=rc[c[(c[k>>2]|0)+36>>2]&127](k)|0;else h=c[h>>2]|0;if((h|0)==-1){c[b>>2]=0;k=0;m=1}else m=0}else{k=0;m=1}h=c[d>>2]|0;do if(h){l=c[h+12>>2]|0;if((l|0)==(c[h+16>>2]|0))h=rc[c[(c[h>>2]|0)+36>>2]&127](h)|0;else h=c[l>>2]|0;if((h|0)!=-1)if(m)break;else{v=74;break}else{c[d>>2]=0;v=72;break}}else v=72;while(0);if((v|0)==72?m:0)v=74;if((v|0)==74)c[f>>2]=c[f>>2]|2;i=w;return k|0}function Y5(a){a=a|0;return}function Z5(a){a=a|0;P_(a);return}function _5(a){a=a|0;return 2}function $5(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,j=0,k=0,l=0,m=0;h=i;i=i+16|0;j=h+12|0;k=h+8|0;m=h+4|0;l=h;c[m>>2]=c[b>>2];c[l>>2]=c[d>>2];c[k>>2]=c[m>>2];c[j>>2]=c[l>>2];a=X5(a,k,j,e,f,g,55120,55152)|0;i=h;return a|0}function a6(b,d,e,f,g,h){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;var j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0;j=i;i=i+16|0;k=j+12|0;l=j+8|0;n=j+4|0;m=j;q=b+8|0;q=rc[c[(c[q>>2]|0)+20>>2]&127](q)|0;c[n>>2]=c[d>>2];c[m>>2]=c[e>>2];o=a[q>>0]|0;p=(o&1)==0;e=q+4|0;d=p?e:c[q+8>>2]|0;e=d+((p?(o&255)>>>1:c[e>>2]|0)<<2)|0;c[l>>2]=c[n>>2];c[k>>2]=c[m>>2];b=X5(b,l,k,f,g,h,d,e)|0;i=j;return b|0}function b6(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,j=0,k=0,l=0,m=0;h=i;i=i+16|0;j=h+8|0;m=h+4|0;k=h;l=S2(e)|0;c[m>>2]=l;e=o8(m,54544)|0;Mba(l)|0;c[k>>2]=c[d>>2];c[j>>2]=c[k>>2];c6(a,g+24|0,b,j,f,e);i=h;return c[b>>2]|0}function c6(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,j=0,k=0;h=i;i=i+16|0;j=h+4|0;k=h;a=a+8|0;a=rc[c[c[a>>2]>>2]&127](a)|0;c[k>>2]=c[e>>2];c[j>>2]=c[k>>2];d=(laa(d,j,a,a+168|0,g,f,0)|0)-a|0;if((d|0)<168)c[b>>2]=((d|0)/12|0|0)%7|0;i=h;return}function d6(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,j=0,k=0,l=0,m=0;h=i;i=i+16|0;j=h+8|0;m=h+4|0;k=h;l=S2(e)|0;c[m>>2]=l;e=o8(m,54544)|0;Mba(l)|0;c[k>>2]=c[d>>2];c[j>>2]=c[k>>2];e6(a,g+16|0,b,j,f,e);i=h;return c[b>>2]|0}function e6(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,j=0,k=0;h=i;i=i+16|0;j=h+4|0;k=h;a=a+8|0;a=rc[c[(c[a>>2]|0)+4>>2]&127](a)|0;c[k>>2]=c[e>>2];c[j>>2]=c[k>>2];d=(laa(d,j,a,a+288|0,g,f,0)|0)-a|0;if((d|0)<288)c[b>>2]=((d|0)/12|0|0)%12|0;i=h;return}function f6(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,j=0,k=0,l=0,m=0;h=i;i=i+16|0;j=h+8|0;m=h+4|0;k=h;l=S2(e)|0;c[m>>2]=l;e=o8(m,54544)|0;Mba(l)|0;c[k>>2]=c[d>>2];c[j>>2]=c[k>>2];g6(a,g+20|0,b,j,f,e);i=h;return c[b>>2]|0}function g6(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,j=0;h=i;i=i+16|0;a=h+4|0;j=h;c[j>>2]=c[e>>2];c[a>>2]=c[j>>2];a=zaa(d,a,f,g,4)|0;if(!(c[f>>2]&4)){if((a|0)<69)a=a+2e3|0;else a=(a+-69|0)>>>0<31?a+1900|0:a;c[b>>2]=a+-1900}i=h;return} +function h6(b,d,e,f,g,h,j,k){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;j=j|0;k=k|0;var l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0;S=i;i=i+144|0;l=S+132|0;k=S+116|0;L=S+128|0;w=S+124|0;H=S+120|0;M=S+112|0;N=S+108|0;O=S+104|0;P=S+100|0;Q=S+96|0;R=S+92|0;m=S+88|0;n=S+84|0;o=S+80|0;p=S+76|0;q=S+72|0;r=S+68|0;s=S+64|0;t=S+60|0;u=S+56|0;v=S+52|0;x=S+48|0;y=S+44|0;z=S+40|0;A=S+36|0;B=S+32|0;C=S+28|0;D=S+24|0;E=S+20|0;F=S+16|0;G=S+12|0;I=S+8|0;J=S+4|0;K=S;c[g>>2]=0;U=S2(f)|0;c[L>>2]=U;L=o8(L,54544)|0;Mba(U)|0;do switch(j<<24>>24|0){case 65:case 97:{c[w>>2]=c[e>>2];c[l>>2]=c[w>>2];c6(b,h+24|0,d,l,g,L);T=26;break}case 104:case 66:case 98:{c[H>>2]=c[e>>2];c[l>>2]=c[H>>2];e6(b,h+16|0,d,l,g,L);T=26;break}case 99:{U=b+8|0;U=rc[c[(c[U>>2]|0)+12>>2]&127](U)|0;c[M>>2]=c[d>>2];c[N>>2]=c[e>>2];j=a[U>>0]|0;e=(j&1)==0;T=U+4|0;U=e?T:c[U+8>>2]|0;T=U+((e?(j&255)>>>1:c[T>>2]|0)<<2)|0;c[k>>2]=c[M>>2];c[l>>2]=c[N>>2];c[d>>2]=X5(b,k,l,f,g,h,U,T)|0;T=26;break}case 101:case 100:{c[O>>2]=c[e>>2];c[l>>2]=c[O>>2];i6(b,h+12|0,d,l,g,L);T=26;break}case 68:{c[P>>2]=c[d>>2];c[Q>>2]=c[e>>2];c[k>>2]=c[P>>2];c[l>>2]=c[Q>>2];c[d>>2]=X5(b,k,l,f,g,h,55152,55184)|0;T=26;break}case 70:{c[R>>2]=c[d>>2];c[m>>2]=c[e>>2];c[k>>2]=c[R>>2];c[l>>2]=c[m>>2];c[d>>2]=X5(b,k,l,f,g,h,55184,55216)|0;T=26;break}case 72:{c[n>>2]=c[e>>2];c[l>>2]=c[n>>2];j6(b,h+8|0,d,l,g,L);T=26;break}case 73:{c[o>>2]=c[e>>2];c[l>>2]=c[o>>2];k6(b,h+8|0,d,l,g,L);T=26;break}case 106:{c[p>>2]=c[e>>2];c[l>>2]=c[p>>2];l6(b,h+28|0,d,l,g,L);T=26;break}case 109:{c[q>>2]=c[e>>2];c[l>>2]=c[q>>2];m6(b,h+16|0,d,l,g,L);T=26;break}case 77:{c[r>>2]=c[e>>2];c[l>>2]=c[r>>2];n6(b,h+4|0,d,l,g,L);T=26;break}case 116:case 110:{c[s>>2]=c[e>>2];c[l>>2]=c[s>>2];o6(b,d,l,g,L);T=26;break}case 112:{c[t>>2]=c[e>>2];c[l>>2]=c[t>>2];p6(b,h+8|0,d,l,g,L);T=26;break}case 114:{c[u>>2]=c[d>>2];c[v>>2]=c[e>>2];c[k>>2]=c[u>>2];c[l>>2]=c[v>>2];c[d>>2]=X5(b,k,l,f,g,h,55216,55260)|0;T=26;break}case 82:{c[x>>2]=c[d>>2];c[y>>2]=c[e>>2];c[k>>2]=c[x>>2];c[l>>2]=c[y>>2];c[d>>2]=X5(b,k,l,f,g,h,55260,55280)|0;T=26;break}case 83:{c[z>>2]=c[e>>2];c[l>>2]=c[z>>2];q6(b,h,d,l,g,L);T=26;break}case 84:{c[A>>2]=c[d>>2];c[B>>2]=c[e>>2];c[k>>2]=c[A>>2];c[l>>2]=c[B>>2];c[d>>2]=X5(b,k,l,f,g,h,55280,55312)|0;T=26;break}case 119:{c[C>>2]=c[e>>2];c[l>>2]=c[C>>2];r6(b,h+24|0,d,l,g,L);T=26;break}case 120:{U=c[(c[b>>2]|0)+20>>2]|0;c[D>>2]=c[d>>2];c[E>>2]=c[e>>2];c[k>>2]=c[D>>2];c[l>>2]=c[E>>2];k=qc[U&63](b,k,l,f,g,h)|0;break}case 88:{U=b+8|0;U=rc[c[(c[U>>2]|0)+24>>2]&127](U)|0;c[F>>2]=c[d>>2];c[G>>2]=c[e>>2];j=a[U>>0]|0;e=(j&1)==0;T=U+4|0;U=e?T:c[U+8>>2]|0;T=U+((e?(j&255)>>>1:c[T>>2]|0)<<2)|0;c[k>>2]=c[F>>2];c[l>>2]=c[G>>2];c[d>>2]=X5(b,k,l,f,g,h,U,T)|0;T=26;break}case 121:{c[I>>2]=c[e>>2];c[l>>2]=c[I>>2];g6(b,h+20|0,d,l,g,L);T=26;break}case 89:{c[J>>2]=c[e>>2];c[l>>2]=c[J>>2];s6(b,h+20|0,d,l,g,L);T=26;break}case 37:{c[K>>2]=c[e>>2];c[l>>2]=c[K>>2];t6(b,d,l,g,L);T=26;break}default:{c[g>>2]=c[g>>2]|4;T=26}}while(0);if((T|0)==26)k=c[d>>2]|0;i=S;return k|0}function i6(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,j=0;h=i;i=i+16|0;a=h+4|0;j=h;c[j>>2]=c[e>>2];c[a>>2]=c[j>>2];a=zaa(d,a,f,g,2)|0;d=c[f>>2]|0;if((a+-1|0)>>>0<31&(d&4|0)==0)c[b>>2]=a;else c[f>>2]=d|4;i=h;return}function j6(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,j=0;h=i;i=i+16|0;a=h+4|0;j=h;c[j>>2]=c[e>>2];c[a>>2]=c[j>>2];a=zaa(d,a,f,g,2)|0;d=c[f>>2]|0;if((a|0)<24&(d&4|0)==0)c[b>>2]=a;else c[f>>2]=d|4;i=h;return}function k6(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,j=0;h=i;i=i+16|0;a=h+4|0;j=h;c[j>>2]=c[e>>2];c[a>>2]=c[j>>2];a=zaa(d,a,f,g,2)|0;d=c[f>>2]|0;if((a+-1|0)>>>0<12&(d&4|0)==0)c[b>>2]=a;else c[f>>2]=d|4;i=h;return}function l6(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,j=0;h=i;i=i+16|0;a=h+4|0;j=h;c[j>>2]=c[e>>2];c[a>>2]=c[j>>2];a=zaa(d,a,f,g,3)|0;d=c[f>>2]|0;if((a|0)<366&(d&4|0)==0)c[b>>2]=a;else c[f>>2]=d|4;i=h;return}function m6(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,j=0;h=i;i=i+16|0;a=h+4|0;j=h;c[j>>2]=c[e>>2];c[a>>2]=c[j>>2];a=zaa(d,a,f,g,2)|0;d=c[f>>2]|0;if((a|0)<13&(d&4|0)==0)c[b>>2]=a+-1;else c[f>>2]=d|4;i=h;return}function n6(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,j=0;h=i;i=i+16|0;a=h+4|0;j=h;c[j>>2]=c[e>>2];c[a>>2]=c[j>>2];a=zaa(d,a,f,g,2)|0;d=c[f>>2]|0;if((a|0)<60&(d&4|0)==0)c[b>>2]=a;else c[f>>2]=d|4;i=h;return}function o6(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0;a:while(1){a=c[b>>2]|0;do if(a){g=c[a+12>>2]|0;if((g|0)==(c[a+16>>2]|0))a=rc[c[(c[a>>2]|0)+36>>2]&127](a)|0;else a=c[g>>2]|0;if((a|0)==-1){c[b>>2]=0;h=1;break}else{h=(c[b>>2]|0)==0;break}}else h=1;while(0);g=c[d>>2]|0;do if(g){a=c[g+12>>2]|0;if((a|0)==(c[g+16>>2]|0))a=rc[c[(c[g>>2]|0)+36>>2]&127](g)|0;else a=c[a>>2]|0;if((a|0)!=-1)if(h){h=g;break}else{h=g;break a}else{c[d>>2]=0;i=15;break}}else i=15;while(0);if((i|0)==15){i=0;if(h){h=0;break}else h=0}a=c[b>>2]|0;g=c[a+12>>2]|0;if((g|0)==(c[a+16>>2]|0))a=rc[c[(c[a>>2]|0)+36>>2]&127](a)|0;else a=c[g>>2]|0;if(!(tc[c[(c[f>>2]|0)+12>>2]&63](f,8192,a)|0))break;a=c[b>>2]|0;g=a+12|0;h=c[g>>2]|0;if((h|0)==(c[a+16>>2]|0)){rc[c[(c[a>>2]|0)+40>>2]&127](a)|0;continue}else{c[g>>2]=h+4;continue}}a=c[b>>2]|0;do if(a){g=c[a+12>>2]|0;if((g|0)==(c[a+16>>2]|0))a=rc[c[(c[a>>2]|0)+36>>2]&127](a)|0;else a=c[g>>2]|0;if((a|0)==-1){c[b>>2]=0;g=1;break}else{g=(c[b>>2]|0)==0;break}}else g=1;while(0);do if(h){a=c[h+12>>2]|0;if((a|0)==(c[h+16>>2]|0))a=rc[c[(c[h>>2]|0)+36>>2]&127](h)|0;else a=c[a>>2]|0;if((a|0)!=-1)if(g)break;else{i=39;break}else{c[d>>2]=0;i=37;break}}else i=37;while(0);if((i|0)==37?g:0)i=39;if((i|0)==39)c[e>>2]=c[e>>2]|2;return}function p6(b,d,e,f,g,h){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;var j=0,k=0,l=0,m=0,n=0;n=i;i=i+16|0;k=n+4|0;l=n;m=b+8|0;m=rc[c[(c[m>>2]|0)+8>>2]&127](m)|0;b=a[m>>0]|0;if(!(b&1))j=(b&255)>>>1;else j=c[m+4>>2]|0;b=a[m+12>>0]|0;if(!(b&1))b=(b&255)>>>1;else b=c[m+16>>2]|0;do if((j|0)!=(0-b|0)){c[l>>2]=c[f>>2];c[k>>2]=c[l>>2];b=laa(e,k,m,m+24|0,h,g,0)|0;j=c[d>>2]|0;if((b|0)==(m|0)&(j|0)==12){c[d>>2]=0;break}if((j|0)<12&(b-m|0)==12)c[d>>2]=j+12}else c[g>>2]=c[g>>2]|4;while(0);i=n;return}function q6(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,j=0;h=i;i=i+16|0;a=h+4|0;j=h;c[j>>2]=c[e>>2];c[a>>2]=c[j>>2];a=zaa(d,a,f,g,2)|0;d=c[f>>2]|0;if((a|0)<61&(d&4|0)==0)c[b>>2]=a;else c[f>>2]=d|4;i=h;return}function r6(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,j=0;h=i;i=i+16|0;a=h+4|0;j=h;c[j>>2]=c[e>>2];c[a>>2]=c[j>>2];a=zaa(d,a,f,g,1)|0;d=c[f>>2]|0;if((a|0)<7&(d&4|0)==0)c[b>>2]=a;else c[f>>2]=d|4;i=h;return}function s6(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,j=0;h=i;i=i+16|0;a=h+4|0;j=h;c[j>>2]=c[e>>2];c[a>>2]=c[j>>2];a=zaa(d,a,f,g,4)|0;if(!(c[f>>2]&4))c[b>>2]=a+-1900;i=h;return}function t6(a,b,d,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;a=c[b>>2]|0;do if(a){g=c[a+12>>2]|0;if((g|0)==(c[a+16>>2]|0))a=rc[c[(c[a>>2]|0)+36>>2]&127](a)|0;else a=c[g>>2]|0;if((a|0)==-1){c[b>>2]=0;h=1;break}else{h=(c[b>>2]|0)==0;break}}else h=1;while(0);g=c[d>>2]|0;do if(g){a=c[g+12>>2]|0;if((a|0)==(c[g+16>>2]|0))a=rc[c[(c[g>>2]|0)+36>>2]&127](g)|0;else a=c[a>>2]|0;if((a|0)!=-1)if(h){i=g;j=17;break}else{j=16;break}else{c[d>>2]=0;j=14;break}}else j=14;while(0);if((j|0)==14)if(h)j=16;else{i=0;j=17}a:do if((j|0)==16)c[e>>2]=c[e>>2]|6;else if((j|0)==17){a=c[b>>2]|0;g=c[a+12>>2]|0;if((g|0)==(c[a+16>>2]|0))a=rc[c[(c[a>>2]|0)+36>>2]&127](a)|0;else a=c[g>>2]|0;if((tc[c[(c[f>>2]|0)+52>>2]&63](f,a,0)|0)<<24>>24!=37){c[e>>2]=c[e>>2]|4;break}a=c[b>>2]|0;g=a+12|0;h=c[g>>2]|0;if((h|0)==(c[a+16>>2]|0)){rc[c[(c[a>>2]|0)+40>>2]&127](a)|0;a=c[b>>2]|0;if(!a)g=1;else j=25}else{c[g>>2]=h+4;j=25}do if((j|0)==25){g=c[a+12>>2]|0;if((g|0)==(c[a+16>>2]|0))a=rc[c[(c[a>>2]|0)+36>>2]&127](a)|0;else a=c[g>>2]|0;if((a|0)==-1){c[b>>2]=0;g=1;break}else{g=(c[b>>2]|0)==0;break}}while(0);do if(i){a=c[i+12>>2]|0;if((a|0)==(c[i+16>>2]|0))a=rc[c[(c[i>>2]|0)+36>>2]&127](i)|0;else a=c[a>>2]|0;if((a|0)!=-1)if(g)break a;else break;else{c[d>>2]=0;j=37;break}}else j=37;while(0);if((j|0)==37?!g:0)break;c[e>>2]=c[e>>2]|2}while(0);return}function u6(a){a=a|0;v6(a+8|0);return}function v6(a){a=a|0;var b=0;b=c[a>>2]|0;if((b|0)!=(E4()|0))W$(c[a>>2]|0);return}function w6(a){a=a|0;v6(a+8|0);P_(a);return}function x6(b,d,e,f,g,h,j){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;j=j|0;var k=0,l=0;l=i;i=i+112|0;k=l+4|0;e=l;c[e>>2]=k+100;y6(b+8|0,k,e,g,h,j);g=c[e>>2]|0;e=c[d>>2]|0;if((k|0)!=(g|0))do{j=a[k>>0]|0;do if(e){f=e+24|0;h=c[f>>2]|0;if((h|0)==(c[e+28>>2]|0)){d=(zc[c[(c[e>>2]|0)+52>>2]&255](e,j&255)|0)==-1;e=d?0:e;break}else{c[f>>2]=h+1;a[h>>0]=j;break}}else e=0;while(0);k=k+1|0}while((k|0)!=(g|0));i=l;return e|0}function y6(b,d,e,f,g,h){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;var j=0,k=0,l=0,m=0;m=i;i=i+16|0;l=m;a[l>>0]=37;j=l+1|0;a[j>>0]=g;k=l+2|0;a[k>>0]=h;a[l+3>>0]=0;if(h<<24>>24){a[j>>0]=h;a[k>>0]=g}c[e>>2]=d+(Tb(d|0,(c[e>>2]|0)-d|0,l|0,f|0,c[b>>2]|0)|0);i=m;return}function z6(a){a=a|0;v6(a+8|0);return}function A6(a){a=a|0;v6(a+8|0);P_(a);return}function B6(a,b,d,e,f,g,h){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;var j=0;j=i;i=i+416|0;e=j+8|0;d=j;c[d>>2]=e+400;C6(a+8|0,e,d,f,g,h);a=c[d>>2]|0;d=c[b>>2]|0;if((e|0)!=(a|0)){f=e;do{e=c[f>>2]|0;if(!d)d=0;else{g=d+24|0;h=c[g>>2]|0;if((h|0)==(c[d+28>>2]|0))e=zc[c[(c[d>>2]|0)+52>>2]&255](d,e)|0;else{c[g>>2]=h+4;c[h>>2]=e}d=(e|0)==-1?0:d}f=f+4|0}while((f|0)!=(a|0))}i=j;return d|0}function C6(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,j=0,k=0,l=0,m=0;h=i;i=i+128|0;l=h+16|0;m=h+12|0;j=h;k=h+8|0;c[m>>2]=l+100;y6(a,l,m,e,f,g);g=j;c[g>>2]=0;c[g+4>>2]=0;c[k>>2]=l;g=(c[d>>2]|0)-b>>2;f=$$(c[a>>2]|0)|0;g=m0(b,k,g,j)|0;if(f)$$(f)|0;c[d>>2]=b+(g<<2);i=h;return}function D6(a){a=a|0;return}function E6(a){a=a|0;P_(a);return}function F6(a){a=a|0;return 127}function G6(a){a=a|0;return 127}function H6(a,b){a=a|0;b=b|0;c[a>>2]=0;c[a+4>>2]=0;c[a+8>>2]=0;return}function I6(a,b){a=a|0;b=b|0;c[a>>2]=0;c[a+4>>2]=0;c[a+8>>2]=0;return}function J6(a,b){a=a|0;b=b|0;c[a>>2]=0;c[a+4>>2]=0;c[a+8>>2]=0;return}function K6(a,b){a=a|0;b=b|0;m2(a,1,45);return}function L6(a){a=a|0;return 0}function M6(b,c){b=b|0;c=c|0;a[b>>0]=2;a[b+1>>0]=3;a[b+2>>0]=0;a[b+3>>0]=4;return}function N6(b,c){b=b|0;c=c|0;a[b>>0]=2;a[b+1>>0]=3;a[b+2>>0]=0;a[b+3>>0]=4;return}function O6(a){a=a|0;return}function P6(a){a=a|0;P_(a);return}function Q6(a){a=a|0;return 127}function R6(a){a=a|0;return 127}function S6(a,b){a=a|0;b=b|0;c[a>>2]=0;c[a+4>>2]=0;c[a+8>>2]=0;return}function T6(a,b){a=a|0;b=b|0;c[a>>2]=0;c[a+4>>2]=0;c[a+8>>2]=0;return}function U6(a,b){a=a|0;b=b|0;c[a>>2]=0;c[a+4>>2]=0;c[a+8>>2]=0;return}function V6(a,b){a=a|0;b=b|0;m2(a,1,45);return}function W6(a){a=a|0;return 0}function X6(b,c){b=b|0;c=c|0;a[b>>0]=2;a[b+1>>0]=3;a[b+2>>0]=0;a[b+3>>0]=4;return}function Y6(b,c){b=b|0;c=c|0;a[b>>0]=2;a[b+1>>0]=3;a[b+2>>0]=0;a[b+3>>0]=4;return}function Z6(a){a=a|0;return}function _6(a){a=a|0;P_(a);return}function $6(a){a=a|0;return 2147483647}function a7(a){a=a|0;return 2147483647}function b7(a,b){a=a|0;b=b|0;c[a>>2]=0;c[a+4>>2]=0;c[a+8>>2]=0;return}function c7(a,b){a=a|0;b=b|0;c[a>>2]=0;c[a+4>>2]=0;c[a+8>>2]=0;return}function d7(a,b){a=a|0;b=b|0;c[a>>2]=0;c[a+4>>2]=0;c[a+8>>2]=0;return}function e7(a,b){a=a|0;b=b|0;D2(a,1,45);return}function f7(a){a=a|0;return 0}function g7(b,c){b=b|0;c=c|0;a[b>>0]=2;a[b+1>>0]=3;a[b+2>>0]=0;a[b+3>>0]=4;return}function h7(b,c){b=b|0;c=c|0;a[b>>0]=2;a[b+1>>0]=3;a[b+2>>0]=0;a[b+3>>0]=4;return}function i7(a){a=a|0;return}function j7(a){a=a|0;P_(a);return}function k7(a){a=a|0;return 2147483647}function l7(a){a=a|0;return 2147483647}function m7(a,b){a=a|0;b=b|0;c[a>>2]=0;c[a+4>>2]=0;c[a+8>>2]=0;return}function n7(a,b){a=a|0;b=b|0;c[a>>2]=0;c[a+4>>2]=0;c[a+8>>2]=0;return}function o7(a,b){a=a|0;b=b|0;c[a>>2]=0;c[a+4>>2]=0;c[a+8>>2]=0;return}function p7(a,b){a=a|0;b=b|0;D2(a,1,45);return}function q7(a){a=a|0;return 0}function r7(b,c){b=b|0;c=c|0;a[b>>0]=2;a[b+1>>0]=3;a[b+2>>0]=0;a[b+3>>0]=4;return}function s7(b,c){b=b|0;c=c|0;a[b>>0]=2;a[b+1>>0]=3;a[b+2>>0]=0;a[b+3>>0]=4;return}function t7(a){a=a|0;return}function u7(a){a=a|0;P_(a);return}function v7(b,d,e,f,g,h,j){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;j=j|0;var k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0;E=i;i=i+240|0;x=E+24|0;y=E;u=E+136|0;D=E+16|0;w=E+12|0;A=E+8|0;k=E+134|0;s=E+4|0;v=E+124|0;c[D>>2]=u;C=D+4|0;c[C>>2]=1495;c[A>>2]=S2(g)|0;b=o8(A,54552)|0;a[k>>0]=0;c[s>>2]=c[e>>2];t=c[g+4>>2]|0;c[x>>2]=c[s>>2];if(x7(d,x,f,A,t,h,k,b,D,w,u+100|0)|0){Cc[c[(c[b>>2]|0)+32>>2]&7](b,88984,88994,v)|0;f=c[w>>2]|0;g=c[D>>2]|0;b=f-g|0;if((b|0)>98){b=w1(b+2|0)|0;if(!b)A$();else{z=b;l=b}}else{z=0;l=x}if(!(a[k>>0]|0))b=l;else{a[l>>0]=45;b=l+1|0}t=v+10|0;u=v;if(g>>>0>>0){k=v+1|0;l=k+1|0;m=l+1|0;n=m+1|0;o=n+1|0;p=o+1|0;q=p+1|0;r=q+1|0;s=r+1|0;do{f=a[g>>0]|0;if((a[v>>0]|0)!=f<<24>>24)if((a[k>>0]|0)!=f<<24>>24)if((a[l>>0]|0)!=f<<24>>24)if((a[m>>0]|0)!=f<<24>>24)if((a[n>>0]|0)!=f<<24>>24)if((a[o>>0]|0)!=f<<24>>24)if((a[p>>0]|0)!=f<<24>>24)if((a[q>>0]|0)!=f<<24>>24)if((a[r>>0]|0)==f<<24>>24)f=r;else f=(a[s>>0]|0)==f<<24>>24?s:t;else f=q;else f=p;else f=o;else f=n;else f=m;else f=l;else f=k;else f=v;a[b>>0]=a[88984+(f-u)>>0]|0;g=g+1|0;b=b+1|0}while(g>>>0<(c[w>>2]|0)>>>0)}a[b>>0]=0;c[y>>2]=j;P0(x,88995,y)|0;if(z)x1(z)}b=c[d>>2]|0;do if(b){if((c[b+12>>2]|0)==(c[b+16>>2]|0))if((rc[c[(c[b>>2]|0)+36>>2]&127](b)|0)==-1){c[d>>2]=0;b=0;break}else{b=c[d>>2]|0;break}}else b=0;while(0);b=(b|0)==0;f=c[e>>2]|0;do if(f){if((c[f+12>>2]|0)==(c[f+16>>2]|0)?(rc[c[(c[f>>2]|0)+36>>2]&127](f)|0)==-1:0){c[e>>2]=0;B=25;break}if(!b)B=26}else B=25;while(0);if((B|0)==25?b:0)B=26;if((B|0)==26)c[h>>2]=c[h>>2]|2;f=c[d>>2]|0;Mba(c[A>>2]|0)|0;b=c[D>>2]|0;c[D>>2]=0;if(b)oc[c[C>>2]&2047](b);i=E;return f|0}function w7(a){a=a|0;return}function x7(e,f,g,h,j,k,l,m,n,o,p){e=e|0;f=f|0;g=g|0;h=h|0;j=j|0;k=k|0;l=l|0;m=m|0;n=n|0;o=o|0;p=p|0;var q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0;ca=i;i=i+512|0;O=ca+88|0;t=ca+96|0;ba=ca+80|0;S=ca+72|0;R=ca+68|0;T=ca+500|0;P=ca+497|0;U=ca+496|0;Y=ca+56|0;aa=ca+44|0;_=ca+32|0;Z=ca+20|0;$=ca+8|0;Q=ca+4|0;W=ca;c[O>>2]=p;c[ba>>2]=t;X=ba+4|0;c[X>>2]=1495;c[S>>2]=t;c[R>>2]=t+400;c[Y>>2]=0;c[Y+4>>2]=0;c[Y+8>>2]=0;c[aa>>2]=0;c[aa+4>>2]=0;c[aa+8>>2]=0;c[_>>2]=0;c[_+4>>2]=0;c[_+8>>2]=0;c[Z>>2]=0;c[Z+4>>2]=0;c[Z+8>>2]=0;c[$>>2]=0;c[$+4>>2]=0;c[$+8>>2]=0;A7(g,h,T,P,U,Y,aa,_,Z,Q);c[o>>2]=c[n>>2];H=m+8|0;I=_+4|0;J=Z+4|0;K=Z+8|0;L=Z+1|0;M=_+8|0;N=_+1|0;x=(j&512|0)!=0;y=aa+8|0;z=aa+1|0;A=aa+4|0;B=$+4|0;C=$+8|0;D=$+1|0;E=T+3|0;F=Y+4|0;G=0;s=0;a:while(1){p=c[e>>2]|0;do if(p){if((c[p+12>>2]|0)==(c[p+16>>2]|0))if((rc[c[(c[p>>2]|0)+36>>2]&127](p)|0)==-1){c[e>>2]=0;p=0;break}else{p=c[e>>2]|0;break}}else p=0;while(0);p=(p|0)==0;m=c[f>>2]|0;do if(m){if((c[m+12>>2]|0)!=(c[m+16>>2]|0))if(p)break;else{V=202;break a}if((rc[c[(c[m>>2]|0)+36>>2]&127](m)|0)!=-1)if(p)break;else{V=202;break a}else{c[f>>2]=0;V=12;break}}else V=12;while(0);if((V|0)==12){V=0;if(p){V=202;break}else m=0}b:do switch(a[T+G>>0]|0){case 1:{if((G|0)!=3){p=c[e>>2]|0;g=c[p+12>>2]|0;if((g|0)==(c[p+16>>2]|0))p=rc[c[(c[p>>2]|0)+36>>2]&127](p)|0;else p=d[g>>0]|0;if((p&255)<<24>>24<=-1){V=26;break a}if(!(b[(c[H>>2]|0)+(p<<24>>24<<1)>>1]&8192)){V=26;break a}p=c[e>>2]|0;g=p+12|0;h=c[g>>2]|0;if((h|0)==(c[p+16>>2]|0))p=rc[c[(c[p>>2]|0)+40>>2]&127](p)|0;else{c[g>>2]=h+1;p=d[h>>0]|0}v2($,p&255);p=m;g=m;V=28}break}case 0:{if((G|0)!=3){p=m;g=m;V=28}break}case 3:{h=a[_>>0]|0;p=(h&1)==0?(h&255)>>>1:c[I>>2]|0;g=a[Z>>0]|0;g=(g&1)==0?(g&255)>>>1:c[J>>2]|0;if((p|0)!=(0-g|0)){j=(p|0)==0;q=c[e>>2]|0;r=c[q+12>>2]|0;p=c[q+16>>2]|0;m=(r|0)==(p|0);if(j|(g|0)==0){if(m)p=rc[c[(c[q>>2]|0)+36>>2]&127](q)|0;else p=d[r>>0]|0;p=p&255;if(j){if(p<<24>>24!=(a[((a[Z>>0]&1)==0?L:c[K>>2]|0)>>0]|0))break b;p=c[e>>2]|0;m=p+12|0;g=c[m>>2]|0;if((g|0)==(c[p+16>>2]|0))rc[c[(c[p>>2]|0)+40>>2]&127](p)|0;else c[m>>2]=g+1;a[l>>0]=1;w=a[Z>>0]|0;s=((w&1)==0?(w&255)>>>1:c[J>>2]|0)>>>0>1?Z:s;break b}if(p<<24>>24!=(a[((a[_>>0]&1)==0?N:c[M>>2]|0)>>0]|0)){a[l>>0]=1;break b}p=c[e>>2]|0;m=p+12|0;g=c[m>>2]|0;if((g|0)==(c[p+16>>2]|0))rc[c[(c[p>>2]|0)+40>>2]&127](p)|0;else c[m>>2]=g+1;w=a[_>>0]|0;s=((w&1)==0?(w&255)>>>1:c[I>>2]|0)>>>0>1?_:s;break b}if(m){j=rc[c[(c[q>>2]|0)+36>>2]&127](q)|0;p=c[e>>2]|0;h=a[_>>0]|0;q=p;g=c[p+12>>2]|0;p=c[p+16>>2]|0}else{j=d[r>>0]|0;g=r}m=q+12|0;p=(g|0)==(p|0);if((j&255)<<24>>24==(a[((h&1)==0?N:c[M>>2]|0)>>0]|0)){if(p)rc[c[(c[q>>2]|0)+40>>2]&127](q)|0;else c[m>>2]=g+1;w=a[_>>0]|0;s=((w&1)==0?(w&255)>>>1:c[I>>2]|0)>>>0>1?_:s;break b}if(p)p=rc[c[(c[q>>2]|0)+36>>2]&127](q)|0;else p=d[g>>0]|0;if((p&255)<<24>>24!=(a[((a[Z>>0]&1)==0?L:c[K>>2]|0)>>0]|0)){V=82;break a}p=c[e>>2]|0;m=p+12|0;g=c[m>>2]|0;if((g|0)==(c[p+16>>2]|0))rc[c[(c[p>>2]|0)+40>>2]&127](p)|0;else c[m>>2]=g+1;a[l>>0]=1;w=a[Z>>0]|0;s=((w&1)==0?(w&255)>>>1:c[J>>2]|0)>>>0>1?Z:s}break}case 2:{if(!(G>>>0<2|(s|0)!=0)?!(x|(G|0)==2&(a[E>>0]|0)!=0):0){s=0;break b}v=a[aa>>0]|0;p=(v&1)==0;w=c[y>>2]|0;h=p?z:w;u=h;c:do if((G|0)!=0?(d[T+(G+-1)>>0]|0)<2:0){r=p?(v&255)>>>1:c[A>>2]|0;j=h+r|0;q=c[H>>2]|0;d:do if(!r)g=u;else{r=h;g=u;do{p=a[r>>0]|0;if(p<<24>>24<=-1)break d;if(!(b[q+(p<<24>>24<<1)>>1]&8192))break d;r=r+1|0;g=r}while((r|0)!=(j|0))}while(0);j=g-u|0;q=a[$>>0]|0;p=(q&1)==0;q=p?(q&255)>>>1:c[B>>2]|0;if(q>>>0>=j>>>0){p=p?D:c[C>>2]|0;r=p+q|0;if((g|0)!=(u|0)){p=p+(q-j)|0;while(1){if((a[p>>0]|0)!=(a[h>>0]|0)){g=u;break c}p=p+1|0;if((p|0)==(r|0))break;else h=h+1|0}}}else g=u}else g=u;while(0);p=(v&1)==0;p=(p?z:w)+(p?(v&255)>>>1:c[A>>2]|0)|0;e:do if((g|0)!=(p|0)){j=m;h=m;p=g;while(1){m=c[e>>2]|0;do if(m){if((c[m+12>>2]|0)==(c[m+16>>2]|0))if((rc[c[(c[m>>2]|0)+36>>2]&127](m)|0)==-1){c[e>>2]=0;m=0;break}else{m=c[e>>2]|0;break}}else m=0;while(0);g=(m|0)==0;do if(h){if((c[h+12>>2]|0)!=(c[h+16>>2]|0))if(g){m=j;q=h;break}else break e;if((rc[c[(c[h>>2]|0)+36>>2]&127](h)|0)!=-1)if(g^(j|0)==0){m=j;q=j;break}else break e;else{c[f>>2]=0;m=0;V=107;break}}else{m=j;V=107}while(0);if((V|0)==107){V=0;if(g)break e;else q=0}g=c[e>>2]|0;h=c[g+12>>2]|0;if((h|0)==(c[g+16>>2]|0))g=rc[c[(c[g>>2]|0)+36>>2]&127](g)|0;else g=d[h>>0]|0;if((g&255)<<24>>24!=(a[p>>0]|0))break e;g=c[e>>2]|0;h=g+12|0;j=c[h>>2]|0;if((j|0)==(c[g+16>>2]|0))rc[c[(c[g>>2]|0)+40>>2]&127](g)|0;else c[h>>2]=j+1;p=p+1|0;g=a[aa>>0]|0;w=(g&1)==0;g=(w?z:c[y>>2]|0)+(w?(g&255)>>>1:c[A>>2]|0)|0;if((p|0)==(g|0)){p=g;break}else{j=m;h=q}}}while(0);if(x?(w=a[aa>>0]|0,v=(w&1)==0,(p|0)!=((v?z:c[y>>2]|0)+(v?(w&255)>>>1:c[A>>2]|0)|0)):0){V=119;break a}break}case 4:{r=a[U>>0]|0;j=m;h=m;p=0;f:while(1){m=c[e>>2]|0;do if(m){if((c[m+12>>2]|0)==(c[m+16>>2]|0))if((rc[c[(c[m>>2]|0)+36>>2]&127](m)|0)==-1){c[e>>2]=0;m=0;break}else{m=c[e>>2]|0;break}}else m=0;while(0);g=(m|0)==0;do if(h){if((c[h+12>>2]|0)!=(c[h+16>>2]|0))if(g){m=j;q=h;break}else{m=j;break f}if((rc[c[(c[h>>2]|0)+36>>2]&127](h)|0)!=-1)if(g^(j|0)==0){m=j;q=j;break}else{m=j;break f}else{c[f>>2]=0;m=0;V=130;break}}else{m=j;V=130}while(0);if((V|0)==130){V=0;if(g)break;else q=0}g=c[e>>2]|0;h=c[g+12>>2]|0;if((h|0)==(c[g+16>>2]|0))g=rc[c[(c[g>>2]|0)+36>>2]&127](g)|0;else g=d[h>>0]|0;h=g&255;if(h<<24>>24>-1?(b[(c[H>>2]|0)+(g<<24>>24<<1)>>1]&2048)!=0:0){g=c[o>>2]|0;if((g|0)==(c[O>>2]|0)){Aaa(n,o,O);g=c[o>>2]|0}c[o>>2]=g+1;a[g>>0]=h;p=p+1|0}else{w=a[Y>>0]|0;if(!(h<<24>>24==r<<24>>24&((p|0)!=0?(((w&1)==0?(w&255)>>>1:c[F>>2]|0)|0)!=0:0)))break;if((t|0)==(c[R>>2]|0)){Baa(ba,S,R);t=c[S>>2]|0}w=t+4|0;c[S>>2]=w;c[t>>2]=p;t=w;p=0}g=c[e>>2]|0;h=g+12|0;j=c[h>>2]|0;if((j|0)==(c[g+16>>2]|0)){rc[c[(c[g>>2]|0)+40>>2]&127](g)|0;j=m;h=q;continue}else{c[h>>2]=j+1;j=m;h=q;continue}}if((p|0)!=0?(c[ba>>2]|0)!=(t|0):0){if((t|0)==(c[R>>2]|0)){Baa(ba,S,R);t=c[S>>2]|0}w=t+4|0;c[S>>2]=w;c[t>>2]=p;t=w}q=c[Q>>2]|0;if((q|0)>0){p=c[e>>2]|0;do if(p){if((c[p+12>>2]|0)==(c[p+16>>2]|0))if((rc[c[(c[p>>2]|0)+36>>2]&127](p)|0)==-1){c[e>>2]=0;p=0;break}else{p=c[e>>2]|0;break}}else p=0;while(0);p=(p|0)==0;do if(m){if((c[m+12>>2]|0)==(c[m+16>>2]|0)?(rc[c[(c[m>>2]|0)+36>>2]&127](m)|0)==-1:0){c[f>>2]=0;V=162;break}if(p)h=m;else{V=167;break a}}else V=162;while(0);if((V|0)==162){V=0;if(p){V=167;break a}else h=0}p=c[e>>2]|0;m=c[p+12>>2]|0;if((m|0)==(c[p+16>>2]|0))p=rc[c[(c[p>>2]|0)+36>>2]&127](p)|0;else p=d[m>>0]|0;if((p&255)<<24>>24!=(a[P>>0]|0)){V=167;break a}p=c[e>>2]|0;m=p+12|0;g=c[m>>2]|0;if((g|0)==(c[p+16>>2]|0))rc[c[(c[p>>2]|0)+40>>2]&127](p)|0;else c[m>>2]=g+1;if((q|0)>0){j=h;g=h;while(1){p=c[e>>2]|0;do if(p){if((c[p+12>>2]|0)==(c[p+16>>2]|0))if((rc[c[(c[p>>2]|0)+36>>2]&127](p)|0)==-1){c[e>>2]=0;p=0;break}else{p=c[e>>2]|0;break}}else p=0;while(0);m=(p|0)==0;do if(g){if((c[g+12>>2]|0)!=(c[g+16>>2]|0))if(m){p=j;r=g;break}else{V=189;break a}if((rc[c[(c[g>>2]|0)+36>>2]&127](g)|0)!=-1)if(m^(j|0)==0){p=j;r=j;break}else{V=189;break a}else{c[f>>2]=0;p=0;V=182;break}}else{p=j;V=182}while(0);if((V|0)==182){V=0;if(m){V=189;break a}else r=0}m=c[e>>2]|0;g=c[m+12>>2]|0;if((g|0)==(c[m+16>>2]|0))m=rc[c[(c[m>>2]|0)+36>>2]&127](m)|0;else m=d[g>>0]|0;if((m&255)<<24>>24<=-1){V=189;break a}if(!(b[(c[H>>2]|0)+(m<<24>>24<<1)>>1]&2048)){V=189;break a}if((c[o>>2]|0)==(c[O>>2]|0))Aaa(n,o,O);m=c[e>>2]|0;g=c[m+12>>2]|0;if((g|0)==(c[m+16>>2]|0))m=rc[c[(c[m>>2]|0)+36>>2]&127](m)|0;else m=d[g>>0]|0;g=c[o>>2]|0;c[o>>2]=g+1;a[g>>0]=m;m=q;q=q+-1|0;c[Q>>2]=q;g=c[e>>2]|0;h=g+12|0;j=c[h>>2]|0;if((j|0)==(c[g+16>>2]|0))rc[c[(c[g>>2]|0)+40>>2]&127](g)|0;else c[h>>2]=j+1;if((m|0)<=1)break;else{j=p;g=r}}}}if((c[o>>2]|0)==(c[n>>2]|0)){V=200;break a}break}default:{}}while(0);g:do if((V|0)==28)while(1){V=0;m=c[e>>2]|0;do if(m){if((c[m+12>>2]|0)==(c[m+16>>2]|0))if((rc[c[(c[m>>2]|0)+36>>2]&127](m)|0)==-1){c[e>>2]=0;m=0;break}else{m=c[e>>2]|0;break}}else m=0;while(0);m=(m|0)==0;do if(g){if((c[g+12>>2]|0)!=(c[g+16>>2]|0))if(m){j=p;h=g;break}else break g;if((rc[c[(c[g>>2]|0)+36>>2]&127](g)|0)!=-1)if(m^(p|0)==0){j=p;h=p;break}else break g;else{c[f>>2]=0;p=0;V=38;break}}else V=38;while(0);if((V|0)==38){V=0;if(m)break g;else{j=p;h=0}}p=c[e>>2]|0;m=c[p+12>>2]|0;if((m|0)==(c[p+16>>2]|0))p=rc[c[(c[p>>2]|0)+36>>2]&127](p)|0;else p=d[m>>0]|0;if((p&255)<<24>>24<=-1)break g;if(!(b[(c[H>>2]|0)+(p<<24>>24<<1)>>1]&8192))break g;p=c[e>>2]|0;m=p+12|0;g=c[m>>2]|0;if((g|0)==(c[p+16>>2]|0))p=rc[c[(c[p>>2]|0)+40>>2]&127](p)|0;else{c[m>>2]=g+1;p=d[g>>0]|0}v2($,p&255);p=j;g=h;V=28}while(0);G=G+1|0;if(G>>>0>=4){V=202;break}}h:do if((V|0)==26){c[k>>2]=c[k>>2]|4;m=0}else if((V|0)==82){c[k>>2]=c[k>>2]|4;m=0}else if((V|0)==119){c[k>>2]=c[k>>2]|4;m=0}else if((V|0)==167){c[k>>2]=c[k>>2]|4;m=0}else if((V|0)==189){c[k>>2]=c[k>>2]|4;m=0}else if((V|0)==200){c[k>>2]=c[k>>2]|4;m=0}else if((V|0)==202){i:do if(s){j=s+1|0;q=s+8|0;r=s+4|0;g=1;j:while(1){p=a[s>>0]|0;if(!(p&1))p=(p&255)>>>1;else p=c[r>>2]|0;if(g>>>0>=p>>>0)break i;p=c[e>>2]|0;do if(p){if((c[p+12>>2]|0)==(c[p+16>>2]|0))if((rc[c[(c[p>>2]|0)+36>>2]&127](p)|0)==-1){c[e>>2]=0;p=0;break}else{p=c[e>>2]|0;break}}else p=0;while(0);p=(p|0)==0;m=c[f>>2]|0;do if(m){if((c[m+12>>2]|0)==(c[m+16>>2]|0)?(rc[c[(c[m>>2]|0)+36>>2]&127](m)|0)==-1:0){c[f>>2]=0;V=218;break}if(!p)break j}else V=218;while(0);if((V|0)==218?(V=0,p):0)break;p=c[e>>2]|0;m=c[p+12>>2]|0;if((m|0)==(c[p+16>>2]|0))p=rc[c[(c[p>>2]|0)+36>>2]&127](p)|0;else p=d[m>>0]|0;if(!(a[s>>0]&1))m=j;else m=c[q>>2]|0;if((p&255)<<24>>24!=(a[m+g>>0]|0))break;p=g+1|0;m=c[e>>2]|0;g=m+12|0;h=c[g>>2]|0;if((h|0)==(c[m+16>>2]|0)){rc[c[(c[m>>2]|0)+40>>2]&127](m)|0;g=p;continue}else{c[g>>2]=h+1;g=p;continue}}c[k>>2]=c[k>>2]|4;m=0;break h}while(0);p=c[ba>>2]|0;if((p|0)!=(t|0)?(c[W>>2]=0,B7(Y,p,t,W),(c[W>>2]|0)!=0):0){c[k>>2]=c[k>>2]|4;m=0}else m=1}while(0);o2($);o2(Z);o2(_);o2(aa);o2(Y);p=c[ba>>2]|0;c[ba>>2]=0;if(p)oc[c[X>>2]&2047](p);i=ca;return m|0}function y7(a){a=a|0;return}function z7(b,d,e,f,g,h,j){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;j=j|0;var k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0;s=i;i=i+144|0;v=s+24|0;t=s+32|0;r=s+16|0;l=s+8|0;u=s+4|0;k=s+28|0;m=s;c[r>>2]=t;q=r+4|0;c[q>>2]=1495;o=S2(g)|0;c[u>>2]=o;b=o8(u,54552)|0;a[k>>0]=0;n=c[e>>2]|0;c[m>>2]=n;g=c[g+4>>2]|0;c[v>>2]=c[m>>2];m=n;if(x7(d,v,f,u,g,h,k,b,r,l,t+100|0)|0){if(!(a[j>>0]&1)){a[j+1>>0]=0;a[j>>0]=0}else{a[c[j+8>>2]>>0]=0;c[j+4>>2]=0}if(a[k>>0]|0)v2(j,zc[c[(c[b>>2]|0)+28>>2]&255](b,45)|0);k=zc[c[(c[b>>2]|0)+28>>2]&255](b,48)|0;b=c[r>>2]|0;f=c[l>>2]|0;g=f+-1|0;a:do if(b>>>0>>0)do{if((a[b>>0]|0)!=k<<24>>24)break a;b=b+1|0}while(b>>>0>>0);while(0);Caa(j,b,f)|0}b=c[d>>2]|0;do if(b){if((c[b+12>>2]|0)==(c[b+16>>2]|0))if((rc[c[(c[b>>2]|0)+36>>2]&127](b)|0)==-1){c[d>>2]=0;b=0;break}else{b=c[d>>2]|0;break}}else b=0;while(0);b=(b|0)==0;do if(n){if((c[m+12>>2]|0)==(c[m+16>>2]|0)?(rc[c[(c[n>>2]|0)+36>>2]&127](m)|0)==-1:0){c[e>>2]=0;p=21;break}if(!b)p=22}else p=21;while(0);if((p|0)==21?b:0)p=22;if((p|0)==22)c[h>>2]=c[h>>2]|2;g=c[d>>2]|0;Mba(o)|0;b=c[r>>2]|0;c[r>>2]=0;if(b)oc[c[q>>2]&2047](b);i=s;return g|0}function A7(b,d,e,f,g,h,j,k,l,m){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;j=j|0;k=k|0;l=l|0;m=m|0;var n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0;x=i;i=i+112|0;n=x+100|0;o=x+88|0;p=x+76|0;q=x+64|0;r=x+52|0;s=x+48|0;t=x+36|0;u=x+24|0;v=x+12|0;w=x;if(b){b=o8(d,54160)|0;pc[c[(c[b>>2]|0)+44>>2]&1023](n,b);w=c[n>>2]|0;a[e>>0]=w;a[e+1>>0]=w>>8;a[e+2>>0]=w>>16;a[e+3>>0]=w>>24;pc[c[(c[b>>2]|0)+32>>2]&1023](o,b);if(!(a[l>>0]&1)){a[l+1>>0]=0;a[l>>0]=0}else{a[c[l+8>>2]>>0]=0;c[l+4>>2]=0}u2(l,0);c[l>>2]=c[o>>2];c[l+4>>2]=c[o+4>>2];c[l+8>>2]=c[o+8>>2];c[o>>2]=0;c[o+4>>2]=0;c[o+8>>2]=0;o2(o);pc[c[(c[b>>2]|0)+28>>2]&1023](p,b);if(!(a[k>>0]&1)){a[k+1>>0]=0;a[k>>0]=0}else{a[c[k+8>>2]>>0]=0;c[k+4>>2]=0}u2(k,0);c[k>>2]=c[p>>2];c[k+4>>2]=c[p+4>>2];c[k+8>>2]=c[p+8>>2];c[p>>2]=0;c[p+4>>2]=0;c[p+8>>2]=0;o2(p);a[f>>0]=rc[c[(c[b>>2]|0)+12>>2]&127](b)|0;a[g>>0]=rc[c[(c[b>>2]|0)+16>>2]&127](b)|0;pc[c[(c[b>>2]|0)+20>>2]&1023](q,b);if(!(a[h>>0]&1)){a[h+1>>0]=0;a[h>>0]=0}else{a[c[h+8>>2]>>0]=0;c[h+4>>2]=0}u2(h,0);c[h>>2]=c[q>>2];c[h+4>>2]=c[q+4>>2];c[h+8>>2]=c[q+8>>2];c[q>>2]=0;c[q+4>>2]=0;c[q+8>>2]=0;o2(q);pc[c[(c[b>>2]|0)+24>>2]&1023](r,b);if(!(a[j>>0]&1)){a[j+1>>0]=0;a[j>>0]=0}else{a[c[j+8>>2]>>0]=0;c[j+4>>2]=0}u2(j,0);c[j>>2]=c[r>>2];c[j+4>>2]=c[r+4>>2];c[j+8>>2]=c[r+8>>2];c[r>>2]=0;c[r+4>>2]=0;c[r+8>>2]=0;o2(r);b=rc[c[(c[b>>2]|0)+36>>2]&127](b)|0}else{b=o8(d,54096)|0;pc[c[(c[b>>2]|0)+44>>2]&1023](s,b);s=c[s>>2]|0;a[e>>0]=s;a[e+1>>0]=s>>8;a[e+2>>0]=s>>16;a[e+3>>0]=s>>24;pc[c[(c[b>>2]|0)+32>>2]&1023](t,b);if(!(a[l>>0]&1)){a[l+1>>0]=0;a[l>>0]=0}else{a[c[l+8>>2]>>0]=0;c[l+4>>2]=0}u2(l,0);c[l>>2]=c[t>>2];c[l+4>>2]=c[t+4>>2];c[l+8>>2]=c[t+8>>2];c[t>>2]=0;c[t+4>>2]=0;c[t+8>>2]=0;o2(t);pc[c[(c[b>>2]|0)+28>>2]&1023](u,b);if(!(a[k>>0]&1)){a[k+1>>0]=0;a[k>>0]=0}else{a[c[k+8>>2]>>0]=0;c[k+4>>2]=0}u2(k,0);c[k>>2]=c[u>>2];c[k+4>>2]=c[u+4>>2];c[k+8>>2]=c[u+8>>2];c[u>>2]=0;c[u+4>>2]=0;c[u+8>>2]=0;o2(u);a[f>>0]=rc[c[(c[b>>2]|0)+12>>2]&127](b)|0;a[g>>0]=rc[c[(c[b>>2]|0)+16>>2]&127](b)|0;pc[c[(c[b>>2]|0)+20>>2]&1023](v,b);if(!(a[h>>0]&1)){a[h+1>>0]=0;a[h>>0]=0}else{a[c[h+8>>2]>>0]=0;c[h+4>>2]=0}u2(h,0);c[h>>2]=c[v>>2];c[h+4>>2]=c[v+4>>2];c[h+8>>2]=c[v+8>>2];c[v>>2]=0;c[v+4>>2]=0;c[v+8>>2]=0;o2(v);pc[c[(c[b>>2]|0)+24>>2]&1023](w,b);if(!(a[j>>0]&1)){a[j+1>>0]=0;a[j>>0]=0}else{a[c[j+8>>2]>>0]=0;c[j+4>>2]=0}u2(j,0);c[j>>2]=c[w>>2];c[j+4>>2]=c[w+4>>2];c[j+8>>2]=c[w+8>>2];c[w>>2]=0;c[w+4>>2]=0;c[w+8>>2]=0;o2(w);b=rc[c[(c[b>>2]|0)+36>>2]&127](b)|0}c[m>>2]=b;i=x;return}function B7(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0;g=a[b>>0]|0;i=b+4|0;h=c[i>>2]|0;a:do if(((g&1)==0?(g&255)>>>1:h)|0){if((d|0)!=(e|0)){g=e+-4|0;if(g>>>0>d>>>0){h=d;do{j=c[h>>2]|0;c[h>>2]=c[g>>2];c[g>>2]=j;h=h+4|0;g=g+-4|0}while(h>>>0>>0)}g=a[b>>0]|0;h=c[i>>2]|0}j=(g&1)==0;i=j?b+1|0:c[b+8>>2]|0;e=e+-4|0;b=i+(j?(g&255)>>>1:h)|0;h=a[i>>0]|0;g=h<<24>>24<1|h<<24>>24==127;b:do if(e>>>0>d>>>0){while(1){if(!g?(h<<24>>24|0)!=(c[d>>2]|0):0)break;i=(b-i|0)>1?i+1|0:i;d=d+4|0;h=a[i>>0]|0;g=h<<24>>24<1|h<<24>>24==127;if(d>>>0>=e>>>0)break b}c[f>>2]=4;break a}while(0);if(!g?((c[e>>2]|0)+-1|0)>>>0>=h<<24>>24>>>0:0)c[f>>2]=4}while(0);return}function C7(a){a=a|0;return}function D7(a){a=a|0;P_(a);return}function E7(b,d,e,f,g,h,j){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;j=j|0;var k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0;E=i;i=i+576|0;v=E+424|0;y=E;u=E+24|0;D=E+16|0;w=E+12|0;A=E+8|0;k=E+464|0;s=E+4|0;x=E+468|0;c[D>>2]=u;C=D+4|0;c[C>>2]=1495;c[A>>2]=S2(g)|0;b=o8(A,54544)|0;a[k>>0]=0;c[s>>2]=c[e>>2];t=c[g+4>>2]|0;c[v>>2]=c[s>>2];if(F7(d,v,f,A,t,h,k,b,D,w,u+400|0)|0){Cc[c[(c[b>>2]|0)+48>>2]&7](b,88999,89009,v)|0;f=c[w>>2]|0;g=c[D>>2]|0;b=f-g|0;if((b|0)>392){b=w1((b>>2)+2|0)|0;if(!b)A$();else{z=b;l=b}}else{z=0;l=x}if(!(a[k>>0]|0))b=l;else{a[l>>0]=45;b=l+1|0}t=v+40|0;u=v;if(g>>>0>>0){k=v+4|0;l=k+4|0;m=l+4|0;n=m+4|0;o=n+4|0;p=o+4|0;q=p+4|0;r=q+4|0;s=r+4|0;do{f=c[g>>2]|0;if((c[v>>2]|0)!=(f|0))if((c[k>>2]|0)!=(f|0))if((c[l>>2]|0)!=(f|0))if((c[m>>2]|0)!=(f|0))if((c[n>>2]|0)!=(f|0))if((c[o>>2]|0)!=(f|0))if((c[p>>2]|0)!=(f|0))if((c[q>>2]|0)!=(f|0))if((c[r>>2]|0)==(f|0))f=r;else f=(c[s>>2]|0)==(f|0)?s:t;else f=q;else f=p;else f=o;else f=n;else f=m;else f=l;else f=k;else f=v;a[b>>0]=a[88999+(f-u>>2)>>0]|0;g=g+4|0;b=b+1|0}while(g>>>0<(c[w>>2]|0)>>>0)}a[b>>0]=0;c[y>>2]=j;P0(x,88995,y)|0;if(z)x1(z)}b=c[d>>2]|0;do if(b){f=c[b+12>>2]|0;if((f|0)==(c[b+16>>2]|0))b=rc[c[(c[b>>2]|0)+36>>2]&127](b)|0;else b=c[f>>2]|0;if((b|0)==-1){c[d>>2]=0;g=1;break}else{g=(c[d>>2]|0)==0;break}}else g=1;while(0);b=c[e>>2]|0;do if(b){f=c[b+12>>2]|0;if((f|0)==(c[b+16>>2]|0))b=rc[c[(c[b>>2]|0)+36>>2]&127](b)|0;else b=c[f>>2]|0;if((b|0)!=-1)if(g)break;else{B=30;break}else{c[e>>2]=0;B=28;break}}else B=28;while(0);if((B|0)==28?g:0)B=30;if((B|0)==30)c[h>>2]=c[h>>2]|2;f=c[d>>2]|0;Mba(c[A>>2]|0)|0;b=c[D>>2]|0;c[D>>2]=0;if(b)oc[c[C>>2]&2047](b);i=E;return f|0}function F7(b,e,f,g,h,j,k,l,m,n,o){b=b|0;e=e|0;f=f|0;g=g|0;h=h|0;j=j|0;k=k|0;l=l|0;m=m|0;n=n|0;o=o|0;var p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0;Z=i;i=i+512|0;J=Z+96|0;s=Z+104|0;Y=Z+88|0;N=Z+80|0;M=Z+76|0;O=Z+504|0;K=Z+72|0;P=Z+68|0;T=Z+56|0;X=Z+44|0;V=Z+32|0;U=Z+20|0;W=Z+8|0;L=Z+4|0;R=Z;c[J>>2]=o;c[Y>>2]=s;S=Y+4|0;c[S>>2]=1495;c[N>>2]=s;c[M>>2]=s+400;c[T>>2]=0;c[T+4>>2]=0;c[T+8>>2]=0;c[X>>2]=0;c[X+4>>2]=0;c[X+8>>2]=0;c[V>>2]=0;c[V+4>>2]=0;c[V+8>>2]=0;c[U>>2]=0;c[U+4>>2]=0;c[U+8>>2]=0;c[W>>2]=0;c[W+4>>2]=0;c[W+8>>2]=0;H7(f,g,O,K,P,T,X,V,U,L);c[n>>2]=c[m>>2];F=V+4|0;G=U+4|0;H=U+8|0;I=V+8|0;x=(h&512|0)!=0;y=X+8|0;z=X+4|0;A=W+4|0;B=W+8|0;C=O+3|0;D=T+4|0;E=0;r=0;a:while(1){o=c[b>>2]|0;do if(o){f=c[o+12>>2]|0;if((f|0)==(c[o+16>>2]|0))o=rc[c[(c[o>>2]|0)+36>>2]&127](o)|0;else o=c[f>>2]|0;if((o|0)==-1){c[b>>2]=0;g=1;break}else{g=(c[b>>2]|0)==0;break}}else g=1;while(0);f=c[e>>2]|0;do if(f){o=c[f+12>>2]|0;if((o|0)==(c[f+16>>2]|0))o=rc[c[(c[f>>2]|0)+36>>2]&127](f)|0;else o=c[o>>2]|0;if((o|0)!=-1)if(g){w=f;break}else{Q=217;break a}else{c[e>>2]=0;Q=15;break}}else Q=15;while(0);if((Q|0)==15){Q=0;if(g){Q=217;break}else w=0}b:do switch(a[O+E>>0]|0){case 1:{if((E|0)!=3){o=c[b>>2]|0;f=c[o+12>>2]|0;if((f|0)==(c[o+16>>2]|0))o=rc[c[(c[o>>2]|0)+36>>2]&127](o)|0;else o=c[f>>2]|0;if(!(tc[c[(c[l>>2]|0)+12>>2]&63](l,8192,o)|0)){Q=28;break a}o=c[b>>2]|0;f=o+12|0;g=c[f>>2]|0;if((g|0)==(c[o+16>>2]|0))o=rc[c[(c[o>>2]|0)+40>>2]&127](o)|0;else{c[f>>2]=g+4;o=c[g>>2]|0}I2(W,o);o=w;h=w;Q=30}break}case 0:{if((E|0)!=3){o=w;h=w;Q=30}break}case 3:{p=a[V>>0]|0;o=(p&1)==0?(p&255)>>>1:c[F>>2]|0;g=a[U>>0]|0;g=(g&1)==0?(g&255)>>>1:c[G>>2]|0;if((o|0)!=(0-g|0)){h=(o|0)==0;q=c[b>>2]|0;t=c[q+12>>2]|0;o=c[q+16>>2]|0;f=(t|0)==(o|0);if(h|(g|0)==0){if(f)o=rc[c[(c[q>>2]|0)+36>>2]&127](q)|0;else o=c[t>>2]|0;if(h){if((o|0)!=(c[((a[U>>0]&1)==0?G:c[H>>2]|0)>>2]|0))break b;o=c[b>>2]|0;f=o+12|0;g=c[f>>2]|0;if((g|0)==(c[o+16>>2]|0))rc[c[(c[o>>2]|0)+40>>2]&127](o)|0;else c[f>>2]=g+4;a[k>>0]=1;w=a[U>>0]|0;r=((w&1)==0?(w&255)>>>1:c[G>>2]|0)>>>0>1?U:r;break b}if((o|0)!=(c[((a[V>>0]&1)==0?F:c[I>>2]|0)>>2]|0)){a[k>>0]=1;break b}o=c[b>>2]|0;f=o+12|0;g=c[f>>2]|0;if((g|0)==(c[o+16>>2]|0))rc[c[(c[o>>2]|0)+40>>2]&127](o)|0;else c[f>>2]=g+4;w=a[V>>0]|0;r=((w&1)==0?(w&255)>>>1:c[F>>2]|0)>>>0>1?V:r;break b}if(f){h=rc[c[(c[q>>2]|0)+36>>2]&127](q)|0;o=c[b>>2]|0;p=a[V>>0]|0;q=o;g=c[o+12>>2]|0;o=c[o+16>>2]|0}else{h=c[t>>2]|0;g=t}f=q+12|0;o=(g|0)==(o|0);if((h|0)==(c[((p&1)==0?F:c[I>>2]|0)>>2]|0)){if(o)rc[c[(c[q>>2]|0)+40>>2]&127](q)|0;else c[f>>2]=g+4;w=a[V>>0]|0;r=((w&1)==0?(w&255)>>>1:c[F>>2]|0)>>>0>1?V:r;break b}if(o)o=rc[c[(c[q>>2]|0)+36>>2]&127](q)|0;else o=c[g>>2]|0;if((o|0)!=(c[((a[U>>0]&1)==0?G:c[H>>2]|0)>>2]|0)){Q=86;break a}o=c[b>>2]|0;f=o+12|0;g=c[f>>2]|0;if((g|0)==(c[o+16>>2]|0))rc[c[(c[o>>2]|0)+40>>2]&127](o)|0;else c[f>>2]=g+4;a[k>>0]=1;w=a[U>>0]|0;r=((w&1)==0?(w&255)>>>1:c[G>>2]|0)>>>0>1?U:r}break}case 2:{if(!(E>>>0<2|(r|0)!=0)?!(x|(E|0)==2&(a[C>>0]|0)!=0):0){r=0;break b}h=a[X>>0]|0;g=c[y>>2]|0;f=(h&1)==0?z:g;o=f;c:do if((E|0)!=0?(d[O+(E+-1)>>0]|0)<2:0){v=(h&1)==0;d:do if((f|0)!=((v?z:g)+((v?(h&255)>>>1:c[z>>2]|0)<<2)|0)){h=f;while(1){if(!(tc[c[(c[l>>2]|0)+12>>2]&63](l,8192,c[h>>2]|0)|0))break;h=h+4|0;o=h;f=a[X>>0]|0;g=c[y>>2]|0;v=(f&1)==0;if((h|0)==((v?z:g)+((v?(f&255)>>>1:c[z>>2]|0)<<2)|0)){h=f;break d}}h=a[X>>0]|0;g=c[y>>2]|0}while(0);q=(h&1)==0?z:g;f=q;t=o-f>>2;u=a[W>>0]|0;p=(u&1)==0;u=p?(u&255)>>>1:c[A>>2]|0;if(u>>>0>=t>>>0){p=p?A:c[B>>2]|0;v=p+(u<<2)|0;if(!t)f=o;else{p=p+(u-t<<2)|0;while(1){if((c[p>>2]|0)!=(c[q>>2]|0))break c;p=p+4|0;if((p|0)==(v|0)){f=o;break}else q=q+4|0}}}}else f=o;while(0);o=(h&1)==0;o=(o?z:g)+((o?(h&255)>>>1:c[z>>2]|0)<<2)|0;e:do if((f|0)!=(o|0)){p=w;h=w;o=f;while(1){f=c[b>>2]|0;do if(f){g=c[f+12>>2]|0;if((g|0)==(c[f+16>>2]|0))f=rc[c[(c[f>>2]|0)+36>>2]&127](f)|0;else f=c[g>>2]|0;if((f|0)==-1){c[b>>2]=0;g=1;break}else{g=(c[b>>2]|0)==0;break}}else g=1;while(0);do if(h){f=c[h+12>>2]|0;if((f|0)==(c[h+16>>2]|0))f=rc[c[(c[h>>2]|0)+36>>2]&127](h)|0;else f=c[f>>2]|0;if((f|0)!=-1)if(g^(p|0)==0){f=p;q=p;break}else break e;else{c[e>>2]=0;f=0;Q=114;break}}else{f=p;Q=114}while(0);if((Q|0)==114){Q=0;if(g)break e;else q=0}g=c[b>>2]|0;h=c[g+12>>2]|0;if((h|0)==(c[g+16>>2]|0))g=rc[c[(c[g>>2]|0)+36>>2]&127](g)|0;else g=c[h>>2]|0;if((g|0)!=(c[o>>2]|0))break e;g=c[b>>2]|0;h=g+12|0;p=c[h>>2]|0;if((p|0)==(c[g+16>>2]|0))rc[c[(c[g>>2]|0)+40>>2]&127](g)|0;else c[h>>2]=p+4;o=o+4|0;g=a[X>>0]|0;w=(g&1)==0;g=(w?z:c[y>>2]|0)+((w?(g&255)>>>1:c[z>>2]|0)<<2)|0;if((o|0)==(g|0)){o=g;break}else{p=f;h=q}}}while(0);if(x?(w=a[X>>0]|0,v=(w&1)==0,(o|0)!=((v?z:c[y>>2]|0)+((v?(w&255)>>>1:c[z>>2]|0)<<2)|0)):0){Q=126;break a}break}case 4:{t=c[P>>2]|0;h=w;p=w;o=0;f:while(1){f=c[b>>2]|0;do if(f){g=c[f+12>>2]|0;if((g|0)==(c[f+16>>2]|0))f=rc[c[(c[f>>2]|0)+36>>2]&127](f)|0;else f=c[g>>2]|0;if((f|0)==-1){c[b>>2]=0;g=1;break}else{g=(c[b>>2]|0)==0;break}}else g=1;while(0);do if(p){f=c[p+12>>2]|0;if((f|0)==(c[p+16>>2]|0))f=rc[c[(c[p>>2]|0)+36>>2]&127](p)|0;else f=c[f>>2]|0;if((f|0)!=-1)if(g^(h|0)==0){f=h;q=h;break}else break f;else{c[e>>2]=0;f=0;Q=140;break}}else{f=h;Q=140}while(0);if((Q|0)==140){Q=0;if(g){h=f;break}else q=0}g=c[b>>2]|0;h=c[g+12>>2]|0;if((h|0)==(c[g+16>>2]|0))h=rc[c[(c[g>>2]|0)+36>>2]&127](g)|0;else h=c[h>>2]|0;if(tc[c[(c[l>>2]|0)+12>>2]&63](l,2048,h)|0){g=c[n>>2]|0;if((g|0)==(c[J>>2]|0)){Daa(m,n,J);g=c[n>>2]|0}c[n>>2]=g+4;c[g>>2]=h;o=o+1|0}else{w=a[T>>0]|0;if(!((h|0)==(t|0)&((o|0)!=0?(((w&1)==0?(w&255)>>>1:c[D>>2]|0)|0)!=0:0))){h=f;break}if((s|0)==(c[M>>2]|0)){Baa(Y,N,M);s=c[N>>2]|0}w=s+4|0;c[N>>2]=w;c[s>>2]=o;s=w;o=0}g=c[b>>2]|0;h=g+12|0;p=c[h>>2]|0;if((p|0)==(c[g+16>>2]|0)){rc[c[(c[g>>2]|0)+40>>2]&127](g)|0;h=f;p=q;continue}else{c[h>>2]=p+4;h=f;p=q;continue}}if((o|0)!=0?(c[Y>>2]|0)!=(s|0):0){if((s|0)==(c[M>>2]|0)){Baa(Y,N,M);s=c[N>>2]|0}w=s+4|0;c[N>>2]=w;c[s>>2]=o;s=w}q=c[L>>2]|0;if((q|0)>0){o=c[b>>2]|0;do if(o){f=c[o+12>>2]|0;if((f|0)==(c[o+16>>2]|0))o=rc[c[(c[o>>2]|0)+36>>2]&127](o)|0;else o=c[f>>2]|0;if((o|0)==-1){c[b>>2]=0;f=1;break}else{f=(c[b>>2]|0)==0;break}}else f=1;while(0);do if(h){o=c[h+12>>2]|0;if((o|0)==(c[h+16>>2]|0))o=rc[c[(c[h>>2]|0)+36>>2]&127](h)|0;else o=c[o>>2]|0;if((o|0)!=-1)if(f)break;else{Q=180;break a}else{c[e>>2]=0;Q=174;break}}else Q=174;while(0);if((Q|0)==174){Q=0;if(f){Q=180;break a}else h=0}o=c[b>>2]|0;f=c[o+12>>2]|0;if((f|0)==(c[o+16>>2]|0))o=rc[c[(c[o>>2]|0)+36>>2]&127](o)|0;else o=c[f>>2]|0;if((o|0)!=(c[K>>2]|0)){Q=180;break a}o=c[b>>2]|0;f=o+12|0;g=c[f>>2]|0;if((g|0)==(c[o+16>>2]|0))rc[c[(c[o>>2]|0)+40>>2]&127](o)|0;else c[f>>2]=g+4;if((q|0)>0){p=h;g=h;t=q;while(1){o=c[b>>2]|0;do if(o){f=c[o+12>>2]|0;if((f|0)==(c[o+16>>2]|0))o=rc[c[(c[o>>2]|0)+36>>2]&127](o)|0;else o=c[f>>2]|0;if((o|0)==-1){c[b>>2]=0;f=1;break}else{f=(c[b>>2]|0)==0;break}}else f=1;while(0);do if(g){o=c[g+12>>2]|0;if((o|0)==(c[g+16>>2]|0))o=rc[c[(c[g>>2]|0)+36>>2]&127](g)|0;else o=c[o>>2]|0;if((o|0)!=-1)if(f^(p|0)==0){o=p;q=p;break}else{Q=204;break a}else{c[e>>2]=0;o=0;Q=198;break}}else{o=p;Q=198}while(0);if((Q|0)==198){Q=0;if(f){Q=204;break a}else q=0}f=c[b>>2]|0;g=c[f+12>>2]|0;if((g|0)==(c[f+16>>2]|0))f=rc[c[(c[f>>2]|0)+36>>2]&127](f)|0;else f=c[g>>2]|0;if(!(tc[c[(c[l>>2]|0)+12>>2]&63](l,2048,f)|0)){Q=204;break a}if((c[n>>2]|0)==(c[J>>2]|0))Daa(m,n,J);f=c[b>>2]|0;g=c[f+12>>2]|0;if((g|0)==(c[f+16>>2]|0))f=rc[c[(c[f>>2]|0)+36>>2]&127](f)|0;else f=c[g>>2]|0;g=c[n>>2]|0;c[n>>2]=g+4;c[g>>2]=f;f=t;t=t+-1|0;c[L>>2]=t;g=c[b>>2]|0;h=g+12|0;p=c[h>>2]|0;if((p|0)==(c[g+16>>2]|0))rc[c[(c[g>>2]|0)+40>>2]&127](g)|0;else c[h>>2]=p+4;if((f|0)<=1)break;else{p=o;g=q}}}}if((c[n>>2]|0)==(c[m>>2]|0)){Q=215;break a}break}default:{}}while(0);g:do if((Q|0)==30)while(1){Q=0;f=c[b>>2]|0;do if(f){g=c[f+12>>2]|0;if((g|0)==(c[f+16>>2]|0))f=rc[c[(c[f>>2]|0)+36>>2]&127](f)|0;else f=c[g>>2]|0;if((f|0)==-1){c[b>>2]=0;g=1;break}else{g=(c[b>>2]|0)==0;break}}else g=1;while(0);do if(h){f=c[h+12>>2]|0;if((f|0)==(c[h+16>>2]|0))f=rc[c[(c[h>>2]|0)+36>>2]&127](h)|0;else f=c[f>>2]|0;if((f|0)!=-1)if(g^(o|0)==0){p=o;h=o;break}else break g;else{c[e>>2]=0;o=0;Q=43;break}}else Q=43;while(0);if((Q|0)==43){Q=0;if(g)break g;else{p=o;h=0}}o=c[b>>2]|0;f=c[o+12>>2]|0;if((f|0)==(c[o+16>>2]|0))o=rc[c[(c[o>>2]|0)+36>>2]&127](o)|0;else o=c[f>>2]|0;if(!(tc[c[(c[l>>2]|0)+12>>2]&63](l,8192,o)|0))break g;o=c[b>>2]|0;f=o+12|0;g=c[f>>2]|0;if((g|0)==(c[o+16>>2]|0))o=rc[c[(c[o>>2]|0)+40>>2]&127](o)|0;else{c[f>>2]=g+4;o=c[g>>2]|0}I2(W,o);o=p;Q=30}while(0);E=E+1|0;if(E>>>0>=4){Q=217;break}}h:do if((Q|0)==28){c[j>>2]=c[j>>2]|4;f=0}else if((Q|0)==86){c[j>>2]=c[j>>2]|4;f=0}else if((Q|0)==126){c[j>>2]=c[j>>2]|4;f=0}else if((Q|0)==180){c[j>>2]=c[j>>2]|4;f=0}else if((Q|0)==204){c[j>>2]=c[j>>2]|4;f=0}else if((Q|0)==215){c[j>>2]=c[j>>2]|4;f=0}else if((Q|0)==217){i:do if(r){p=r+4|0;q=r+8|0;h=1;j:while(1){o=a[r>>0]|0;if(!(o&1))o=(o&255)>>>1;else o=c[p>>2]|0;if(h>>>0>=o>>>0)break i;o=c[b>>2]|0;do if(o){f=c[o+12>>2]|0;if((f|0)==(c[o+16>>2]|0))o=rc[c[(c[o>>2]|0)+36>>2]&127](o)|0;else o=c[f>>2]|0;if((o|0)==-1){c[b>>2]=0;g=1;break}else{g=(c[b>>2]|0)==0;break}}else g=1;while(0);o=c[e>>2]|0;do if(o){f=c[o+12>>2]|0;if((f|0)==(c[o+16>>2]|0))o=rc[c[(c[o>>2]|0)+36>>2]&127](o)|0;else o=c[f>>2]|0;if((o|0)!=-1)if(g)break;else break j;else{c[e>>2]=0;Q=236;break}}else Q=236;while(0);if((Q|0)==236?(Q=0,g):0)break;o=c[b>>2]|0;f=c[o+12>>2]|0;if((f|0)==(c[o+16>>2]|0))o=rc[c[(c[o>>2]|0)+36>>2]&127](o)|0;else o=c[f>>2]|0;if(!(a[r>>0]&1))f=p;else f=c[q>>2]|0;if((o|0)!=(c[f+(h<<2)>>2]|0))break;o=h+1|0;f=c[b>>2]|0;g=f+12|0;h=c[g>>2]|0;if((h|0)==(c[f+16>>2]|0)){rc[c[(c[f>>2]|0)+40>>2]&127](f)|0;h=o;continue}else{c[g>>2]=h+4;h=o;continue}}c[j>>2]=c[j>>2]|4;f=0;break h}while(0);o=c[Y>>2]|0;if((o|0)!=(s|0)?(c[R>>2]=0,B7(T,o,s,R),(c[R>>2]|0)!=0):0){c[j>>2]=c[j>>2]|4;f=0}else f=1}while(0);E2(W);E2(U);E2(V);E2(X);o2(T);o=c[Y>>2]|0;c[Y>>2]=0;if(o)oc[c[S>>2]&2047](o);i=Z;return f|0}function G7(b,d,e,f,g,h,j){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;j=j|0;var k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0;s=i;i=i+432|0;v=s+424|0;t=s+24|0;r=s+16|0;l=s+8|0;u=s+4|0;k=s+428|0;m=s;c[r>>2]=t;q=r+4|0;c[q>>2]=1495;o=S2(g)|0;c[u>>2]=o;b=o8(u,54544)|0;a[k>>0]=0;n=c[e>>2]|0;c[m>>2]=n;g=c[g+4>>2]|0;c[v>>2]=c[m>>2];m=n;if(F7(d,v,f,u,g,h,k,b,r,l,t+400|0)|0){if(!(a[j>>0]&1))a[j>>0]=0;else c[c[j+8>>2]>>2]=0;c[j+4>>2]=0;if(a[k>>0]|0)I2(j,zc[c[(c[b>>2]|0)+44>>2]&255](b,45)|0);k=zc[c[(c[b>>2]|0)+44>>2]&255](b,48)|0;b=c[r>>2]|0;f=c[l>>2]|0;g=f+-4|0;a:do if(b>>>0>>0)do{if((c[b>>2]|0)!=(k|0))break a;b=b+4|0}while(b>>>0>>0);while(0);Eaa(j,b,f)|0}b=c[d>>2]|0;do if(b){g=c[b+12>>2]|0;if((g|0)==(c[b+16>>2]|0))b=rc[c[(c[b>>2]|0)+36>>2]&127](b)|0;else b=c[g>>2]|0;if((b|0)==-1){c[d>>2]=0;g=1;break}else{g=(c[d>>2]|0)==0;break}}else g=1;while(0);do if(n){b=c[m+12>>2]|0;if((b|0)==(c[m+16>>2]|0))b=rc[c[(c[n>>2]|0)+36>>2]&127](m)|0;else b=c[b>>2]|0;if((b|0)!=-1)if(g)break;else{p=26;break}else{c[e>>2]=0;p=24;break}}else p=24;while(0);if((p|0)==24?g:0)p=26;if((p|0)==26)c[h>>2]=c[h>>2]|2;g=c[d>>2]|0;Mba(o)|0;b=c[r>>2]|0;c[r>>2]=0;if(b)oc[c[q>>2]&2047](b);i=s;return g|0}function H7(b,d,e,f,g,h,j,k,l,m){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;j=j|0;k=k|0;l=l|0;m=m|0;var n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0;x=i;i=i+112|0;n=x+100|0;o=x+88|0;p=x+76|0;q=x+64|0;r=x+52|0;s=x+48|0;t=x+36|0;u=x+24|0;v=x+12|0;w=x;if(b){b=o8(d,54288)|0;pc[c[(c[b>>2]|0)+44>>2]&1023](n,b);w=c[n>>2]|0;a[e>>0]=w;a[e+1>>0]=w>>8;a[e+2>>0]=w>>16;a[e+3>>0]=w>>24;pc[c[(c[b>>2]|0)+32>>2]&1023](o,b);if(!(a[l>>0]&1))a[l>>0]=0;else c[c[l+8>>2]>>2]=0;c[l+4>>2]=0;H2(l,0);c[l>>2]=c[o>>2];c[l+4>>2]=c[o+4>>2];c[l+8>>2]=c[o+8>>2];c[o>>2]=0;c[o+4>>2]=0;c[o+8>>2]=0;E2(o);pc[c[(c[b>>2]|0)+28>>2]&1023](p,b);if(!(a[k>>0]&1))a[k>>0]=0;else c[c[k+8>>2]>>2]=0;c[k+4>>2]=0;H2(k,0);c[k>>2]=c[p>>2];c[k+4>>2]=c[p+4>>2];c[k+8>>2]=c[p+8>>2];c[p>>2]=0;c[p+4>>2]=0;c[p+8>>2]=0;E2(p);c[f>>2]=rc[c[(c[b>>2]|0)+12>>2]&127](b)|0;c[g>>2]=rc[c[(c[b>>2]|0)+16>>2]&127](b)|0;pc[c[(c[b>>2]|0)+20>>2]&1023](q,b);if(!(a[h>>0]&1)){a[h+1>>0]=0;a[h>>0]=0}else{a[c[h+8>>2]>>0]=0;c[h+4>>2]=0}u2(h,0);c[h>>2]=c[q>>2];c[h+4>>2]=c[q+4>>2];c[h+8>>2]=c[q+8>>2];c[q>>2]=0;c[q+4>>2]=0;c[q+8>>2]=0;o2(q);pc[c[(c[b>>2]|0)+24>>2]&1023](r,b);if(!(a[j>>0]&1))a[j>>0]=0;else c[c[j+8>>2]>>2]=0;c[j+4>>2]=0;H2(j,0);c[j>>2]=c[r>>2];c[j+4>>2]=c[r+4>>2];c[j+8>>2]=c[r+8>>2];c[r>>2]=0;c[r+4>>2]=0;c[r+8>>2]=0;E2(r);b=rc[c[(c[b>>2]|0)+36>>2]&127](b)|0}else{b=o8(d,54224)|0;pc[c[(c[b>>2]|0)+44>>2]&1023](s,b);s=c[s>>2]|0;a[e>>0]=s;a[e+1>>0]=s>>8;a[e+2>>0]=s>>16;a[e+3>>0]=s>>24;pc[c[(c[b>>2]|0)+32>>2]&1023](t,b);if(!(a[l>>0]&1))a[l>>0]=0;else c[c[l+8>>2]>>2]=0;c[l+4>>2]=0;H2(l,0);c[l>>2]=c[t>>2];c[l+4>>2]=c[t+4>>2];c[l+8>>2]=c[t+8>>2];c[t>>2]=0;c[t+4>>2]=0;c[t+8>>2]=0;E2(t);pc[c[(c[b>>2]|0)+28>>2]&1023](u,b);if(!(a[k>>0]&1))a[k>>0]=0;else c[c[k+8>>2]>>2]=0;c[k+4>>2]=0;H2(k,0);c[k>>2]=c[u>>2];c[k+4>>2]=c[u+4>>2];c[k+8>>2]=c[u+8>>2];c[u>>2]=0;c[u+4>>2]=0;c[u+8>>2]=0;E2(u);c[f>>2]=rc[c[(c[b>>2]|0)+12>>2]&127](b)|0;c[g>>2]=rc[c[(c[b>>2]|0)+16>>2]&127](b)|0;pc[c[(c[b>>2]|0)+20>>2]&1023](v,b);if(!(a[h>>0]&1)){a[h+1>>0]=0;a[h>>0]=0}else{a[c[h+8>>2]>>0]=0;c[h+4>>2]=0}u2(h,0);c[h>>2]=c[v>>2];c[h+4>>2]=c[v+4>>2];c[h+8>>2]=c[v+8>>2];c[v>>2]=0;c[v+4>>2]=0;c[v+8>>2]=0;o2(v);pc[c[(c[b>>2]|0)+24>>2]&1023](w,b);if(!(a[j>>0]&1))a[j>>0]=0;else c[c[j+8>>2]>>2]=0;c[j+4>>2]=0;H2(j,0);c[j>>2]=c[w>>2];c[j+4>>2]=c[w+4>>2];c[j+8>>2]=c[w+8>>2];c[w>>2]=0;c[w+4>>2]=0;c[w+8>>2]=0;E2(w);b=rc[c[(c[b>>2]|0)+36>>2]&127](b)|0}c[m>>2]=b;i=x;return}function I7(a){a=a|0;return}function J7(a){a=a|0;P_(a);return}function K7(b,d,e,f,g,j){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;j=+j;var k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0;F=i;i=i+384|0;q=F+8|0;l=F;b=F+284|0;m=F+72|0;k=F+184|0;y=F+68|0;v=F+80|0;s=F+77|0;w=F+76|0;C=F+56|0;E=F+44|0;D=F+32|0;o=F+28|0;p=F+84|0;u=F+24|0;t=F+20|0;r=F+16|0;c[m>>2]=b;h[q>>3]=j;b=O0(b,100,89010,q)|0;if(b>>>0>99){b=E4()|0;h[l>>3]=j;b=waa(m,b,89010,l)|0;k=c[m>>2]|0;if(!k)A$();l=w1(b)|0;if(!l)A$();else{G=l;H=k;x=l;A=b}}else{G=0;H=0;x=k;A=b}b=S2(f)|0;c[y>>2]=b;n=o8(y,54552)|0;l=c[m>>2]|0;Cc[c[(c[n>>2]|0)+32>>2]&7](n,l,l+A|0,x)|0;if(!A)m=0;else m=(a[c[m>>2]>>0]|0)==45;c[C>>2]=0;c[C+4>>2]=0;c[C+8>>2]=0;c[E>>2]=0;c[E+4>>2]=0;c[E+8>>2]=0;c[D>>2]=0;c[D+4>>2]=0;c[D+8>>2]=0;L7(e,m,y,v,s,w,C,E,D,o);l=c[o>>2]|0;if((A|0)>(l|0)){e=a[D>>0]|0;k=a[E>>0]|0;k=(A-l<<1|1)+l+((e&1)==0?(e&255)>>>1:c[D+4>>2]|0)+((k&1)==0?(k&255)>>>1:c[E+4>>2]|0)|0}else{e=a[D>>0]|0;k=a[E>>0]|0;k=l+2+((e&1)==0?(e&255)>>>1:c[D+4>>2]|0)+((k&1)==0?(k&255)>>>1:c[E+4>>2]|0)|0}if(k>>>0>100){k=w1(k)|0;if(!k)A$();else{B=k;z=k}}else{B=0;z=p}M7(z,u,t,c[f+4>>2]|0,x,x+A|0,n,m,v,a[s>>0]|0,a[w>>0]|0,C,E,D,l);c[r>>2]=c[d>>2];d=c[u>>2]|0;k=c[t>>2]|0;c[q>>2]=c[r>>2];k=xE(q,z,d,k,f,g)|0;if(B){x1(B);b=c[y>>2]|0}o2(D);o2(E);o2(C);Mba(b)|0;if(G)x1(G);if(H)x1(H);i=F;return k|0}function L7(b,d,e,f,g,h,j,k,l,m){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;j=j|0;k=k|0;l=l|0;m=m|0;var n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0;z=i;i=i+112|0;n=z+108|0;o=z+96|0;p=z+92|0;q=z+80|0;x=z+68|0;y=z+56|0;r=z+52|0;s=z+40|0;t=z+36|0;u=z+24|0;v=z+12|0;w=z;if(b){e=o8(e,54160)|0;b=c[e>>2]|0;if(d){pc[c[b+44>>2]&1023](n,e);d=c[n>>2]|0;a[f>>0]=d;a[f+1>>0]=d>>8;a[f+2>>0]=d>>16;a[f+3>>0]=d>>24;pc[c[(c[e>>2]|0)+32>>2]&1023](o,e);if(!(a[l>>0]&1)){a[l+1>>0]=0;a[l>>0]=0}else{a[c[l+8>>2]>>0]=0;c[l+4>>2]=0}u2(l,0);c[l>>2]=c[o>>2];c[l+4>>2]=c[o+4>>2];c[l+8>>2]=c[o+8>>2];c[o>>2]=0;c[o+4>>2]=0;c[o+8>>2]=0;o2(o);b=e}else{pc[c[b+40>>2]&1023](p,e);d=c[p>>2]|0;a[f>>0]=d;a[f+1>>0]=d>>8;a[f+2>>0]=d>>16;a[f+3>>0]=d>>24;pc[c[(c[e>>2]|0)+28>>2]&1023](q,e);if(!(a[l>>0]&1)){a[l+1>>0]=0;a[l>>0]=0}else{a[c[l+8>>2]>>0]=0;c[l+4>>2]=0}u2(l,0);c[l>>2]=c[q>>2];c[l+4>>2]=c[q+4>>2];c[l+8>>2]=c[q+8>>2];c[q>>2]=0;c[q+4>>2]=0;c[q+8>>2]=0;o2(q);b=e}a[g>>0]=rc[c[(c[e>>2]|0)+12>>2]&127](e)|0;a[h>>0]=rc[c[(c[e>>2]|0)+16>>2]&127](e)|0;pc[c[(c[b>>2]|0)+20>>2]&1023](x,e);if(!(a[j>>0]&1)){a[j+1>>0]=0;a[j>>0]=0}else{a[c[j+8>>2]>>0]=0;c[j+4>>2]=0}u2(j,0);c[j>>2]=c[x>>2];c[j+4>>2]=c[x+4>>2];c[j+8>>2]=c[x+8>>2];c[x>>2]=0;c[x+4>>2]=0;c[x+8>>2]=0;o2(x);pc[c[(c[b>>2]|0)+24>>2]&1023](y,e);if(!(a[k>>0]&1)){a[k+1>>0]=0;a[k>>0]=0}else{a[c[k+8>>2]>>0]=0;c[k+4>>2]=0}u2(k,0);c[k>>2]=c[y>>2];c[k+4>>2]=c[y+4>>2];c[k+8>>2]=c[y+8>>2];c[y>>2]=0;c[y+4>>2]=0;c[y+8>>2]=0;o2(y);b=rc[c[(c[e>>2]|0)+36>>2]&127](e)|0}else{e=o8(e,54096)|0;b=c[e>>2]|0;if(d){pc[c[b+44>>2]&1023](r,e);d=c[r>>2]|0;a[f>>0]=d;a[f+1>>0]=d>>8;a[f+2>>0]=d>>16;a[f+3>>0]=d>>24;pc[c[(c[e>>2]|0)+32>>2]&1023](s,e);if(!(a[l>>0]&1)){a[l+1>>0]=0;a[l>>0]=0}else{a[c[l+8>>2]>>0]=0;c[l+4>>2]=0}u2(l,0);c[l>>2]=c[s>>2];c[l+4>>2]=c[s+4>>2];c[l+8>>2]=c[s+8>>2];c[s>>2]=0;c[s+4>>2]=0;c[s+8>>2]=0;o2(s);b=e}else{pc[c[b+40>>2]&1023](t,e);d=c[t>>2]|0;a[f>>0]=d;a[f+1>>0]=d>>8;a[f+2>>0]=d>>16;a[f+3>>0]=d>>24;pc[c[(c[e>>2]|0)+28>>2]&1023](u,e);if(!(a[l>>0]&1)){a[l+1>>0]=0;a[l>>0]=0}else{a[c[l+8>>2]>>0]=0;c[l+4>>2]=0}u2(l,0);c[l>>2]=c[u>>2];c[l+4>>2]=c[u+4>>2];c[l+8>>2]=c[u+8>>2];c[u>>2]=0;c[u+4>>2]=0;c[u+8>>2]=0;o2(u);b=e}a[g>>0]=rc[c[(c[e>>2]|0)+12>>2]&127](e)|0;a[h>>0]=rc[c[(c[e>>2]|0)+16>>2]&127](e)|0;pc[c[(c[b>>2]|0)+20>>2]&1023](v,e);if(!(a[j>>0]&1)){a[j+1>>0]=0;a[j>>0]=0}else{a[c[j+8>>2]>>0]=0;c[j+4>>2]=0}u2(j,0);c[j>>2]=c[v>>2];c[j+4>>2]=c[v+4>>2];c[j+8>>2]=c[v+8>>2];c[v>>2]=0;c[v+4>>2]=0;c[v+8>>2]=0;o2(v);pc[c[(c[b>>2]|0)+24>>2]&1023](w,e);if(!(a[k>>0]&1)){a[k+1>>0]=0;a[k>>0]=0}else{a[c[k+8>>2]>>0]=0;c[k+4>>2]=0}u2(k,0);c[k>>2]=c[w>>2];c[k+4>>2]=c[w+4>>2];c[k+8>>2]=c[w+8>>2];c[w>>2]=0;c[w+4>>2]=0;c[w+8>>2]=0;o2(w);b=rc[c[(c[e>>2]|0)+36>>2]&127](e)|0}c[m>>2]=b;i=z;return}function M7(d,e,f,g,h,i,j,k,l,m,n,o,p,q,r){d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;k=k|0;l=l|0;m=m|0;n=n|0;o=o|0;p=p|0;q=q|0;r=r|0;var s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0;c[f>>2]=d;N=q+4|0;O=q+8|0;P=q+1|0;H=p+4|0;I=(g&512|0)==0;J=p+8|0;K=p+1|0;L=j+8|0;M=(r|0)>0;A=o+4|0;B=o+8|0;C=o+1|0;D=r+1|0;F=-2-r-((r|0)<0?~r:-1)|0;G=(r|0)>0;z=0;do{switch(a[l+z>>0]|0){case 0:{c[e>>2]=c[f>>2];break}case 1:{c[e>>2]=c[f>>2];x=zc[c[(c[j>>2]|0)+28>>2]&255](j,32)|0;y=c[f>>2]|0;c[f>>2]=y+1;a[y>>0]=x;break}case 3:{y=a[q>>0]|0;s=(y&1)==0;if((s?(y&255)>>>1:c[N>>2]|0)|0){x=a[(s?P:c[O>>2]|0)>>0]|0;y=c[f>>2]|0;c[f>>2]=y+1;a[y>>0]=x}break}case 2:{u=a[p>>0]|0;s=(u&1)==0;u=s?(u&255)>>>1:c[H>>2]|0;if(!(I|(u|0)==0)){t=s?K:c[J>>2]|0;v=t+u|0;s=c[f>>2]|0;if(u)do{a[s>>0]=a[t>>0]|0;t=t+1|0;s=s+1|0}while((t|0)!=(v|0));c[f>>2]=s}break}case 4:{s=c[f>>2]|0;h=k?h+1|0:h;w=h;v=c[L>>2]|0;a:do if(h>>>0>>0){t=h;do{u=a[t>>0]|0;if(u<<24>>24<=-1)break a;if(!(b[v+(u<<24>>24<<1)>>1]&2048))break a;t=t+1|0}while(t>>>0>>0)}else t=h;while(0);u=t;if(M){x=-2-u-~(u>>>0>w>>>0?w:u)|0;x=F>>>0>x>>>0?F:x;if(t>>>0>h>>>0&G){u=t;w=r;while(1){u=u+-1|0;y=a[u>>0]|0;v=c[f>>2]|0;c[f>>2]=v+1;a[v>>0]=y;v=(w|0)>1;if(!(u>>>0>h>>>0&v))break;else w=w+-1|0}}else v=G;y=D+x|0;u=t+(x+1)|0;if(v)w=zc[c[(c[j>>2]|0)+28>>2]&255](j,48)|0;else w=0;t=c[f>>2]|0;c[f>>2]=t+1;if((y|0)>0){v=y;while(1){a[t>>0]=w;t=c[f>>2]|0;c[f>>2]=t+1;if((v|0)>1)v=v+-1|0;else break}}a[t>>0]=m}else u=t;if((u|0)!=(h|0)){y=a[o>>0]|0;t=(y&1)==0;if(!((t?(y&255)>>>1:c[A>>2]|0)|0))t=-1;else t=a[(t?C:c[B>>2]|0)>>0]|0;if((u|0)!=(h|0)){v=0;w=0;while(1){if((w|0)==(t|0)){y=c[f>>2]|0;c[f>>2]=y+1;a[y>>0]=n;v=v+1|0;y=a[o>>0]|0;t=(y&1)==0;if(v>>>0<(t?(y&255)>>>1:c[A>>2]|0)>>>0){t=a[(t?C:c[B>>2]|0)+v>>0]|0;t=t<<24>>24==127?-1:t<<24>>24;w=0}else{t=w;w=0}}u=u+-1|0;x=a[u>>0]|0;y=c[f>>2]|0;c[f>>2]=y+1;a[y>>0]=x;if((u|0)==(h|0))break;else w=w+1|0}}}else{x=zc[c[(c[j>>2]|0)+28>>2]&255](j,48)|0;y=c[f>>2]|0;c[f>>2]=y+1;a[y>>0]=x}t=c[f>>2]|0;if((s|0)!=(t|0)?(E=t+-1|0,s>>>0>>0):0){t=E;do{y=a[s>>0]|0;a[s>>0]=a[t>>0]|0;a[t>>0]=y;s=s+1|0;t=t+-1|0}while(s>>>0>>0)}break}default:{}}z=z+1|0}while((z|0)!=4);t=a[q>>0]|0;h=(t&1)==0;t=h?(t&255)>>>1:c[N>>2]|0;if(t>>>0>1){s=h?P:c[O>>2]|0;u=s+t|0;h=c[f>>2]|0;if((t|0)!=1){s=s+1|0;do{a[h>>0]=a[s>>0]|0;h=h+1|0;s=s+1|0}while((s|0)!=(u|0))}c[f>>2]=h}switch(g&176|0){case 32:{c[e>>2]=c[f>>2];break}case 16:break;default:c[e>>2]=d}return}function N7(b,d,e,f,g,h){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;var j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0;D=i;i=i+176|0;p=D+56|0;x=D+52|0;v=D+64|0;s=D+61|0;w=D+60|0;A=D+40|0;C=D+28|0;B=D+16|0;l=D+12|0;o=D+68|0;u=D+8|0;t=D+4|0;q=D;b=S2(f)|0;c[x>>2]=b;r=o8(x,54552)|0;n=a[h>>0]|0;j=(n&1)==0;k=h+4|0;if(!((j?(n&255)>>>1:c[k>>2]|0)|0))n=0;else{n=a[(j?h+1|0:c[h+8>>2]|0)>>0]|0;n=n<<24>>24==(zc[c[(c[r>>2]|0)+28>>2]&255](r,45)|0)<<24>>24}c[A>>2]=0;c[A+4>>2]=0;c[A+8>>2]=0;c[C>>2]=0;c[C+4>>2]=0;c[C+8>>2]=0;c[B>>2]=0;c[B+4>>2]=0;c[B+8>>2]=0;L7(e,n,x,v,s,w,A,C,B,l);m=a[h>>0]|0;e=c[k>>2]|0;j=(m&1)==0?(m&255)>>>1:e;k=c[l>>2]|0;if((j|0)>(k|0)){E=a[B>>0]|0;l=a[C>>0]|0;j=(j-k<<1|1)+k+((E&1)==0?(E&255)>>>1:c[B+4>>2]|0)+((l&1)==0?(l&255)>>>1:c[C+4>>2]|0)|0}else{E=a[B>>0]|0;j=a[C>>0]|0;j=k+2+((E&1)==0?(E&255)>>>1:c[B+4>>2]|0)+((j&1)==0?(j&255)>>>1:c[C+4>>2]|0)|0}if(j>>>0>100){j=w1(j)|0;if(!j)A$();else{z=j;y=j}}else{z=0;y=o}E=(m&1)==0;j=E?h+1|0:c[h+8>>2]|0;M7(y,u,t,c[f+4>>2]|0,j,j+(E?(m&255)>>>1:e)|0,r,n,v,a[s>>0]|0,a[w>>0]|0,A,C,B,k);c[q>>2]=c[d>>2];E=c[u>>2]|0;j=c[t>>2]|0;c[p>>2]=c[q>>2];j=xE(p,y,E,j,f,g)|0;if(z){x1(z);b=c[x>>2]|0}o2(B);o2(C);o2(A);Mba(b)|0;i=D;return j|0}function O7(a){a=a|0;return}function P7(a){a=a|0;P_(a);return}function Q7(b,d,e,f,g,j){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;j=+j;var k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0;F=i;i=i+992|0;q=F+8|0;l=F;b=F+888|0;m=F+880|0;k=F+480|0;y=F+76|0;v=F+884|0;s=F+72|0;w=F+68|0;C=F+56|0;E=F+44|0;D=F+32|0;o=F+28|0;p=F+80|0;u=F+24|0;t=F+20|0;r=F+16|0;c[m>>2]=b;h[q>>3]=j;b=O0(b,100,89010,q)|0;if(b>>>0>99){b=E4()|0;h[l>>3]=j;b=waa(m,b,89010,l)|0;k=c[m>>2]|0;if(!k)A$();l=w1(b<<2)|0;if(!l)A$();else{G=l;H=k;x=l;A=b}}else{G=0;H=0;x=k;A=b}b=S2(f)|0;c[y>>2]=b;n=o8(y,54544)|0;l=c[m>>2]|0;Cc[c[(c[n>>2]|0)+48>>2]&7](n,l,l+A|0,x)|0;if(!A)m=0;else m=(a[c[m>>2]>>0]|0)==45;c[C>>2]=0;c[C+4>>2]=0;c[C+8>>2]=0;c[E>>2]=0;c[E+4>>2]=0;c[E+8>>2]=0;c[D>>2]=0;c[D+4>>2]=0;c[D+8>>2]=0;R7(e,m,y,v,s,w,C,E,D,o);l=c[o>>2]|0;if((A|0)>(l|0)){e=a[D>>0]|0;k=a[E>>0]|0;k=(A-l<<1|1)+l+((e&1)==0?(e&255)>>>1:c[D+4>>2]|0)+((k&1)==0?(k&255)>>>1:c[E+4>>2]|0)|0}else{e=a[D>>0]|0;k=a[E>>0]|0;k=l+2+((e&1)==0?(e&255)>>>1:c[D+4>>2]|0)+((k&1)==0?(k&255)>>>1:c[E+4>>2]|0)|0}if(k>>>0>100){k=w1(k<<2)|0;if(!k)A$();else{B=k;z=k}}else{B=0;z=p}S7(z,u,t,c[f+4>>2]|0,x,x+(A<<2)|0,n,m,v,c[s>>2]|0,c[w>>2]|0,C,E,D,l);c[r>>2]=c[d>>2];d=c[u>>2]|0;k=c[t>>2]|0;c[q>>2]=c[r>>2];k=xaa(q,z,d,k,f,g)|0;if(B){x1(B);b=c[y>>2]|0}E2(D);E2(E);o2(C);Mba(b)|0;if(G)x1(G);if(H)x1(H);i=F;return k|0}function R7(b,d,e,f,g,h,j,k,l,m){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;j=j|0;k=k|0;l=l|0;m=m|0;var n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0;z=i;i=i+112|0;n=z+108|0;o=z+96|0;r=z+92|0;s=z+80|0;t=z+68|0;u=z+56|0;v=z+52|0;w=z+40|0;x=z+36|0;y=z+24|0;p=z+12|0;q=z;if(b){b=o8(e,54288)|0;e=c[b>>2]|0;if(d){pc[c[e+44>>2]&1023](n,b);d=c[n>>2]|0;a[f>>0]=d;a[f+1>>0]=d>>8;a[f+2>>0]=d>>16;a[f+3>>0]=d>>24;pc[c[(c[b>>2]|0)+32>>2]&1023](o,b);if(!(a[l>>0]&1))a[l>>0]=0;else c[c[l+8>>2]>>2]=0;c[l+4>>2]=0;H2(l,0);c[l>>2]=c[o>>2];c[l+4>>2]=c[o+4>>2];c[l+8>>2]=c[o+8>>2];c[o>>2]=0;c[o+4>>2]=0;c[o+8>>2]=0;E2(o)}else{pc[c[e+40>>2]&1023](r,b);d=c[r>>2]|0;a[f>>0]=d;a[f+1>>0]=d>>8;a[f+2>>0]=d>>16;a[f+3>>0]=d>>24;pc[c[(c[b>>2]|0)+28>>2]&1023](s,b);if(!(a[l>>0]&1))a[l>>0]=0;else c[c[l+8>>2]>>2]=0;c[l+4>>2]=0;H2(l,0);c[l>>2]=c[s>>2];c[l+4>>2]=c[s+4>>2];c[l+8>>2]=c[s+8>>2];c[s>>2]=0;c[s+4>>2]=0;c[s+8>>2]=0;E2(s)}c[g>>2]=rc[c[(c[b>>2]|0)+12>>2]&127](b)|0;c[h>>2]=rc[c[(c[b>>2]|0)+16>>2]&127](b)|0;pc[c[(c[b>>2]|0)+20>>2]&1023](t,b);if(!(a[j>>0]&1)){a[j+1>>0]=0;a[j>>0]=0}else{a[c[j+8>>2]>>0]=0;c[j+4>>2]=0}u2(j,0);c[j>>2]=c[t>>2];c[j+4>>2]=c[t+4>>2];c[j+8>>2]=c[t+8>>2];c[t>>2]=0;c[t+4>>2]=0;c[t+8>>2]=0;o2(t);pc[c[(c[b>>2]|0)+24>>2]&1023](u,b);if(!(a[k>>0]&1))a[k>>0]=0;else c[c[k+8>>2]>>2]=0;c[k+4>>2]=0;H2(k,0);c[k>>2]=c[u>>2];c[k+4>>2]=c[u+4>>2];c[k+8>>2]=c[u+8>>2];c[u>>2]=0;c[u+4>>2]=0;c[u+8>>2]=0;E2(u);b=rc[c[(c[b>>2]|0)+36>>2]&127](b)|0}else{b=o8(e,54224)|0;e=c[b>>2]|0;if(d){pc[c[e+44>>2]&1023](v,b);d=c[v>>2]|0;a[f>>0]=d;a[f+1>>0]=d>>8;a[f+2>>0]=d>>16;a[f+3>>0]=d>>24;pc[c[(c[b>>2]|0)+32>>2]&1023](w,b);if(!(a[l>>0]&1))a[l>>0]=0;else c[c[l+8>>2]>>2]=0;c[l+4>>2]=0;H2(l,0);c[l>>2]=c[w>>2];c[l+4>>2]=c[w+4>>2];c[l+8>>2]=c[w+8>>2];c[w>>2]=0;c[w+4>>2]=0;c[w+8>>2]=0;E2(w)}else{pc[c[e+40>>2]&1023](x,b);d=c[x>>2]|0;a[f>>0]=d;a[f+1>>0]=d>>8;a[f+2>>0]=d>>16;a[f+3>>0]=d>>24;pc[c[(c[b>>2]|0)+28>>2]&1023](y,b);if(!(a[l>>0]&1))a[l>>0]=0;else c[c[l+8>>2]>>2]=0;c[l+4>>2]=0;H2(l,0);c[l>>2]=c[y>>2];c[l+4>>2]=c[y+4>>2];c[l+8>>2]=c[y+8>>2];c[y>>2]=0;c[y+4>>2]=0;c[y+8>>2]=0;E2(y)}c[g>>2]=rc[c[(c[b>>2]|0)+12>>2]&127](b)|0;c[h>>2]=rc[c[(c[b>>2]|0)+16>>2]&127](b)|0;pc[c[(c[b>>2]|0)+20>>2]&1023](p,b);if(!(a[j>>0]&1)){a[j+1>>0]=0;a[j>>0]=0}else{a[c[j+8>>2]>>0]=0;c[j+4>>2]=0}u2(j,0);c[j>>2]=c[p>>2];c[j+4>>2]=c[p+4>>2];c[j+8>>2]=c[p+8>>2];c[p>>2]=0;c[p+4>>2]=0;c[p+8>>2]=0;o2(p);pc[c[(c[b>>2]|0)+24>>2]&1023](q,b);if(!(a[k>>0]&1))a[k>>0]=0;else c[c[k+8>>2]>>2]=0;c[k+4>>2]=0;H2(k,0);c[k>>2]=c[q>>2];c[k+4>>2]=c[q+4>>2];c[k+8>>2]=c[q+8>>2];c[q>>2]=0;c[q+4>>2]=0;c[q+8>>2]=0;E2(q);b=rc[c[(c[b>>2]|0)+36>>2]&127](b)|0}c[m>>2]=b;i=z;return}function S7(b,d,e,f,g,h,i,j,k,l,m,n,o,p,q){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;k=k|0;l=l|0;m=m|0;n=n|0;o=o|0;p=p|0;q=q|0;var r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0;c[e>>2]=b;J=p+4|0;K=p+8|0;C=o+4|0;D=(f&512|0)==0;E=o+8|0;F=(q|0)>0;G=n+4|0;H=n+8|0;I=n+1|0;A=(q|0)>0;z=0;do{switch(a[k+z>>0]|0){case 0:{c[d>>2]=c[e>>2];break}case 1:{c[d>>2]=c[e>>2];x=zc[c[(c[i>>2]|0)+44>>2]&255](i,32)|0;y=c[e>>2]|0;c[e>>2]=y+4;c[y>>2]=x;break}case 3:{y=a[p>>0]|0;r=(y&1)==0;if((r?(y&255)>>>1:c[J>>2]|0)|0){x=c[(r?J:c[K>>2]|0)>>2]|0;y=c[e>>2]|0;c[e>>2]=y+4;c[y>>2]=x}break}case 2:{v=a[o>>0]|0;r=(v&1)==0;v=r?(v&255)>>>1:c[C>>2]|0;if(!(D|(v|0)==0)){r=r?C:c[E>>2]|0;t=r+(v<<2)|0;u=c[e>>2]|0;if(v){s=u;while(1){c[s>>2]=c[r>>2];r=r+4|0;if((r|0)==(t|0))break;else s=s+4|0}}c[e>>2]=u+(v<<2)}break}case 4:{r=c[e>>2]|0;g=j?g+4|0:g;a:do if(g>>>0>>0){s=g;do{if(!(tc[c[(c[i>>2]|0)+12>>2]&63](i,2048,c[s>>2]|0)|0))break a;s=s+4|0}while(s>>>0>>0)}else s=g;while(0);if(F){if(s>>>0>g>>>0&A){v=c[e>>2]|0;u=q;while(1){s=s+-4|0;t=v+4|0;c[v>>2]=c[s>>2];w=u+-1|0;u=(u|0)>1;if(s>>>0>g>>>0&u){v=t;u=w}else{v=w;break}}c[e>>2]=t;t=v}else{u=A;t=q}if(u)w=zc[c[(c[i>>2]|0)+44>>2]&255](i,48)|0;else w=0;x=c[e>>2]|0;u=t+((t|0)<0?~t:-1)|0;if((t|0)>0){v=x;while(1){c[v>>2]=w;if((t|0)>1){v=v+4|0;t=t+-1|0}else break}}c[e>>2]=x+(u+2<<2);c[x+(u+1<<2)>>2]=l}if((s|0)==(g|0)){x=zc[c[(c[i>>2]|0)+44>>2]&255](i,48)|0;y=c[e>>2]|0;s=y+4|0;c[e>>2]=s;c[y>>2]=x}else{x=a[n>>0]|0;t=(x&1)==0;y=c[G>>2]|0;if(!((t?(x&255)>>>1:y)|0))t=-1;else t=a[(t?I:c[H>>2]|0)>>0]|0;if((s|0)!=(g|0)){w=0;x=0;while(1){u=c[e>>2]|0;if((x|0)==(t|0)){v=u+4|0;c[e>>2]=v;c[u>>2]=m;w=w+1|0;u=a[n>>0]|0;t=(u&1)==0;if(w>>>0<(t?(u&255)>>>1:y)>>>0){t=a[(t?I:c[H>>2]|0)+w>>0]|0;u=v;t=t<<24>>24==127?-1:t<<24>>24;v=0}else{u=v;t=x;v=0}}else v=x;s=s+-4|0;x=c[s>>2]|0;c[e>>2]=u+4;c[u>>2]=x;if((s|0)==(g|0))break;else x=v+1|0}}s=c[e>>2]|0}if((r|0)!=(s|0)?(B=s+-4|0,r>>>0>>0):0){s=B;do{y=c[r>>2]|0;c[r>>2]=c[s>>2];c[s>>2]=y;r=r+4|0;s=s+-4|0}while(r>>>0>>0)}break}default:{}}z=z+1|0}while((z|0)!=4);r=a[p>>0]|0;g=(r&1)==0;r=g?(r&255)>>>1:c[J>>2]|0;if(r>>>0>1){s=g?J:c[K>>2]|0;g=s+4|0;s=s+(r<<2)|0;t=c[e>>2]|0;u=s-g|0;if((r|0)!=1){r=t;while(1){c[r>>2]=c[g>>2];g=g+4|0;if((g|0)==(s|0))break;else r=r+4|0}}c[e>>2]=t+(u>>>2<<2)}switch(f&176|0){case 32:{c[d>>2]=c[e>>2];break}case 16:break;default:c[d>>2]=b}return}function T7(b,d,e,f,g,h){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;var j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0;E=i;i=i+480|0;p=E+468|0;y=E+464|0;w=E+472|0;t=E+56|0;x=E+52|0;B=E+40|0;D=E+28|0;C=E+16|0;k=E+12|0;o=E+64|0;v=E+8|0;u=E+4|0;q=E;b=S2(f)|0;c[y>>2]=b;r=o8(y,54544)|0;n=a[h>>0]|0;j=(n&1)==0;s=h+4|0;if(!((j?(n&255)>>>1:c[s>>2]|0)|0))n=0;else{n=c[(j?s:c[h+8>>2]|0)>>2]|0;n=(n|0)==(zc[c[(c[r>>2]|0)+44>>2]&255](r,45)|0)}c[B>>2]=0;c[B+4>>2]=0;c[B+8>>2]=0;c[D>>2]=0;c[D+4>>2]=0;c[D+8>>2]=0;c[C>>2]=0;c[C+4>>2]=0;c[C+8>>2]=0;R7(e,n,y,w,t,x,B,D,C,k);l=a[h>>0]|0;m=c[s>>2]|0;j=(l&1)==0?(l&255)>>>1:m;e=c[k>>2]|0;if((j|0)>(e|0)){F=a[C>>0]|0;k=a[D>>0]|0;j=(j-e<<1|1)+e+((F&1)==0?(F&255)>>>1:c[C+4>>2]|0)+((k&1)==0?(k&255)>>>1:c[D+4>>2]|0)|0}else{F=a[C>>0]|0;j=a[D>>0]|0;j=e+2+((F&1)==0?(F&255)>>>1:c[C+4>>2]|0)+((j&1)==0?(j&255)>>>1:c[D+4>>2]|0)|0}if(j>>>0>100){j=w1(j<<2)|0;if(!j)A$();else{A=j;z=j}}else{A=0;z=o}F=(l&1)==0;j=F?s:c[h+8>>2]|0;S7(z,v,u,c[f+4>>2]|0,j,j+((F?(l&255)>>>1:m)<<2)|0,r,n,w,c[t>>2]|0,c[x>>2]|0,B,D,C,e);c[q>>2]=c[d>>2];F=c[v>>2]|0;j=c[u>>2]|0;c[p>>2]=c[q>>2];j=xaa(p,z,F,j,f,g)|0;if(A){x1(A);b=c[y>>2]|0}E2(C);E2(D);o2(B);Mba(b)|0;i=E;return j|0}function U7(a){a=a|0;return}function V7(a){a=a|0;P_(a);return}function W7(b,d,e){b=b|0;d=d|0;e=e|0;b=V$((a[d>>0]&1)==0?d+1|0:c[d+8>>2]|0,1)|0;return b>>>((b|0)!=(-1|0)&1)|0}function X7(b,d,e,f,g,h){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;var j=0,k=0,l=0,m=0;k=i;i=i+16|0;j=k;c[j>>2]=0;c[j+4>>2]=0;c[j+8>>2]=0;l=a[h>>0]|0;m=(l&1)==0;d=m?h+1|0:c[h+8>>2]|0;l=m?(l&255)>>>1:c[h+4>>2]|0;h=d+l|0;if((l|0)>0)do{v2(j,a[d>>0]|0);d=d+1|0}while(d>>>0>>0);d=U$((e|0)==-1?-1:e<<1,f,g,(a[j>>0]&1)==0?j+1|0:c[j+8>>2]|0)|0;c[b>>2]=0;c[b+4>>2]=0;c[b+8>>2]=0;m=f1(d)|0;h=d+m|0;if((m|0)>0)do{v2(b,a[d>>0]|0);d=d+1|0}while(d>>>0>>0);o2(j);i=k;return}function Y7(a,b){a=a|0;b=b|0;return}function Z7(a){a=a|0;return}function _7(a){a=a|0;P_(a);return}function $7(b,d,e){b=b|0;d=d|0;e=e|0;b=V$((a[d>>0]&1)==0?d+1|0:c[d+8>>2]|0,1)|0;return b>>>((b|0)!=(-1|0)&1)|0}function a8(b,d,e,f,g,h){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;var j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0;s=i;i=i+176|0;p=s+168|0;o=s+40|0;n=s+32|0;r=s+28|0;q=s+16|0;l=s+8|0;m=s;c[q>>2]=0;c[q+4>>2]=0;c[q+8>>2]=0;c[l+4>>2]=0;c[l>>2]=55028;k=a[h>>0]|0;t=(k&1)==0;j=h+4|0;d=t?j:c[h+8>>2]|0;h=t?(k&255)>>>1:c[j>>2]|0;j=d+(h<<2)|0;k=o+32|0;if((h|0)>0)do{c[r>>2]=d;h=uc[c[(c[l>>2]|0)+12>>2]&15](l,p,d,j,r,o,k,n)|0;if(o>>>0<(c[n>>2]|0)>>>0){d=o;do{v2(q,a[d>>0]|0);d=d+1|0}while(d>>>0<(c[n>>2]|0)>>>0)}d=c[r>>2]|0}while((h|0)!=2&d>>>0>>0);d=U$((e|0)==-1?-1:e<<1,f,g,(a[q>>0]&1)==0?q+1|0:c[q+8>>2]|0)|0;c[b>>2]=0;c[b+4>>2]=0;c[b+8>>2]=0;c[m+4>>2]=0;c[m>>2]=55076;t=f1(d)|0;j=d+t|0;k=j;l=o+128|0;if((t|0)>0)do{c[r>>2]=d;h=uc[c[(c[m>>2]|0)+16>>2]&15](m,p,d,(k-d|0)>32?d+32|0:j,r,o,l,n)|0;if(o>>>0<(c[n>>2]|0)>>>0){d=o;do{I2(b,c[d>>2]|0);d=d+4|0}while(d>>>0<(c[n>>2]|0)>>>0)}d=c[r>>2]|0}while((h|0)!=2&d>>>0>>0);o2(q);i=s;return}function b8(a,b){a=a|0;b=b|0;return}function c8(a,b){a=a|0;b=b|0;var d=0,e=0;c[a+4>>2]=b+-1;c[a>>2]=54528;d=a+8|0;Faa(d,28);l2(a+144|0,88914,1);d=c[d>>2]|0;e=a+12|0;b=c[e>>2]|0;if((b|0)!=(d|0)){do b=b+-4|0;while((b|0)!=(d|0));c[e>>2]=b}c[2881]=0;c[2880]=53456;Gaa(a,11520);c[2883]=0;c[2882]=53496;Haa(a,11528);F8(11536,0,0,1);Iaa(a,11536);c[2889]=0;c[2888]=54816;Jaa(a,11552);c[2891]=0;c[2890]=54884;Kaa(a,11560);c[2893]=0;c[2892]=54636;c[2894]=E4()|0;Laa(a,11568);c[2897]=0;c[2896]=54932;Maa(a,11584);c[2899]=0;c[2898]=54980;Naa(a,11592);w9(11600,1);Oaa(a,11600);x9(11624,1);Paa(a,11624);c[2915]=0;c[2914]=53536;Qaa(a,11656);c[2917]=0;c[2916]=53608;Raa(a,11664);c[2919]=0;c[2918]=53680;Saa(a,11672);c[2921]=0;c[2920]=53740;Taa(a,11680);c[2923]=0;c[2922]=54048;Uaa(a,11688);c[2925]=0;c[2924]=54112;Vaa(a,11696);c[2927]=0;c[2926]=54176;Waa(a,11704);c[2929]=0;c[2928]=54240;Xaa(a,11712);c[2931]=0;c[2930]=54304;Yaa(a,11720);c[2933]=0;c[2932]=54340;Zaa(a,11728);c[2935]=0;c[2934]=54376;_aa(a,11736);c[2937]=0;c[2936]=54412;$aa(a,11744);c[2939]=0;c[2938]=53800;c[2940]=53848;aba(a,11752);c[2943]=0;c[2942]=53892;c[2944]=53940;bba(a,11768);c[2947]=0;c[2946]=54796;c[2948]=E4()|0;c[2946]=53984;cba(a,11784);c[2951]=0;c[2950]=54796;c[2952]=E4()|0;c[2950]=54016;dba(a,11800);c[2955]=0;c[2954]=54448;eba(a,11816);c[2957]=0;c[2956]=54488;fba(a,11824);return}function d8(){if((a[11832]|0)==0?(Ga(11832)|0)!=0:0){h8()|0;c[13829]=55312;$a(11832)}return c[13829]|0}function e8(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;Lba(b);f=a+8|0;e=c[f>>2]|0;if((c[a+12>>2]|0)-e>>2>>>0<=d>>>0){gba(f,d+1|0);e=c[f>>2]|0}a=c[e+(d<<2)>>2]|0;if(a){Mba(a)|0;e=c[f>>2]|0}c[e+(d<<2)>>2]=b;return}function f8(a){a=a|0;var b=0,d=0,e=0,f=0;c[a>>2]=54528;e=a+8|0;f=a+12|0;b=c[e>>2]|0;if((c[f>>2]|0)!=(b|0)){d=0;do{b=c[b+(d<<2)>>2]|0;if(b)Mba(b)|0;d=d+1|0;b=c[e>>2]|0}while(d>>>0<(c[f>>2]|0)-b>>2>>>0)}o2(a+144|0);hba(e);return}function g8(a){a=a|0;f8(a);P_(a);return}function h8(){c8(11840,1);c[13828]=11840;return 55312}function i8(){var a=0;a=c[(d8()|0)>>2]|0;c[13830]=a;Lba(a);return 55320}function j8(){if((a[12e3]|0)==0?(Ga(12e3)|0)!=0:0){i8()|0;c[13831]=55320;$a(12e3)}return c[13831]|0}function k8(a){a=a|0;var b=0;b=c[(j8()|0)>>2]|0;c[a>>2]=b;Lba(b);return}function l8(a,b){a=a|0;b=b|0;b=c[b>>2]|0;c[a>>2]=b;Lba(b);return}function m8(a){a=a|0;Mba(c[a>>2]|0)|0;return}function n8(a){a=a|0;var b=0,d=0;d=i;i=i+16|0;b=d;if((c[a>>2]|0)!=-1){c[b>>2]=a;c[b+4>>2]=1496;c[b+8>>2]=0;Nba(a,b,1497)}i=d;return (c[a+4>>2]|0)+-1|0}function o8(a,b){a=a|0;b=b|0;a=c[a>>2]|0;b=n8(b)|0;return c[(c[a+8>>2]|0)+(b<<2)>>2]|0}function p8(a){a=a|0;P_(a);return}function q8(a){a=a|0;if(a)oc[c[(c[a>>2]|0)+4>>2]&2047](a);return}function r8(a){a=a|0;var b=0;b=c[13635]|0;c[13635]=b+1;c[a+4>>2]=b+1;return}function s8(a){a=a|0;P_(a);return}function t8(a,d,e){a=a|0;d=d|0;e=e|0;if(e>>>0<128)e=(b[(c[(H$()|0)>>2]|0)+(e<<1)>>1]&d)<<16>>16!=0;else e=0;return e|0}function u8(a,d,f,g){a=a|0;d=d|0;f=f|0;g=g|0;var h=0,i=0;i=(f-d|0)>>>2;if((d|0)!=(f|0)){h=d;while(1){a=c[h>>2]|0;if(a>>>0<128)a=e[(c[(H$()|0)>>2]|0)+(a<<1)>>1]|0;else a=0;b[g>>1]=a;h=h+4|0;if((h|0)==(f|0))break;else g=g+2|0}}return d+(i<<2)|0}function v8(a,d,e,f){a=a|0;d=d|0;e=e|0;f=f|0;a:do if((e|0)==(f|0))e=f;else while(1){a=c[e>>2]|0;if(a>>>0<128?(b[(c[(H$()|0)>>2]|0)+(a<<1)>>1]&d)<<16>>16!=0:0)break a;e=e+4|0;if((e|0)==(f|0)){e=f;break}}while(0);return e|0}function w8(a,d,e,f){a=a|0;d=d|0;e=e|0;f=f|0;a:do if((e|0)==(f|0))e=f;else while(1){a=c[e>>2]|0;if(a>>>0>=128)break a;if(!((b[(c[(H$()|0)>>2]|0)+(a<<1)>>1]&d)<<16>>16))break a;e=e+4|0;if((e|0)==(f|0)){e=f;break}}while(0);return e|0}function x8(a,b){a=a|0;b=b|0;if(b>>>0<128)b=c[(c[(J$()|0)>>2]|0)+(b<<2)>>2]|0;return b|0}function y8(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;f=(d-b|0)>>>2;if((b|0)!=(d|0)){e=b;do{a=c[e>>2]|0;if(a>>>0<128)a=c[(c[(J$()|0)>>2]|0)+(a<<2)>>2]|0;c[e>>2]=a;e=e+4|0}while((e|0)!=(d|0))}return b+(f<<2)|0}function z8(a,b){a=a|0;b=b|0;if(b>>>0<128)b=c[(c[(I$()|0)>>2]|0)+(b<<2)>>2]|0;return b|0}function A8(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;f=(d-b|0)>>>2;if((b|0)!=(d|0)){e=b;do{a=c[e>>2]|0;if(a>>>0<128)a=c[(c[(I$()|0)>>2]|0)+(a<<2)>>2]|0;c[e>>2]=a;e=e+4|0}while((e|0)!=(d|0))}return b+(f<<2)|0}function B8(a,b){a=a|0;b=b|0;return b<<24>>24|0}function C8(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;if((d|0)!=(e|0))while(1){c[f>>2]=a[d>>0];d=d+1|0;if((d|0)==(e|0))break;else f=f+4|0}return e|0}function D8(a,b,c){a=a|0;b=b|0;c=c|0;return (b>>>0<128?b&255:c)|0}function E8(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;i=(e-d|0)>>>2;if((d|0)!=(e|0)){h=d;b=g;while(1){g=c[h>>2]|0;a[b>>0]=g>>>0<128?g&255:f;h=h+4|0;if((h|0)==(e|0))break;else b=b+1|0}}return d+(i<<2)|0}function F8(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;c[b+4>>2]=f+-1;c[b>>2]=54568;f=b+8|0;c[f>>2]=d;a[b+12>>0]=e&1;if(!d)c[f>>2]=c[(H$()|0)>>2];return}function G8(b){b=b|0;var d=0;c[b>>2]=54568;d=c[b+8>>2]|0;if((d|0)!=0?(a[b+12>>0]|0)!=0:0)Q_(d);return}function H8(a){a=a|0;G8(a);P_(a);return}function I8(a,b){a=a|0;b=b|0;if(b<<24>>24>-1)b=c[(c[(J$()|0)>>2]|0)+((b&255)<<2)>>2]&255;return b|0}function J8(b,d,e){b=b|0;d=d|0;e=e|0;if((d|0)!=(e|0)){b=d;do{d=a[b>>0]|0;if(d<<24>>24>-1)d=c[(c[(J$()|0)>>2]|0)+(d<<24>>24<<2)>>2]&255;a[b>>0]=d;b=b+1|0}while((b|0)!=(e|0))}return e|0}function K8(a,b){a=a|0;b=b|0;if(b<<24>>24>-1)b=c[(c[(I$()|0)>>2]|0)+(b<<24>>24<<2)>>2]&255;return b|0}function L8(b,d,e){b=b|0;d=d|0;e=e|0;if((d|0)!=(e|0)){b=d;do{d=a[b>>0]|0;if(d<<24>>24>-1)d=c[(c[(I$()|0)>>2]|0)+(d<<24>>24<<2)>>2]&255;a[b>>0]=d;b=b+1|0}while((b|0)!=(e|0))}return e|0}function M8(a,b){a=a|0;b=b|0;return b|0}function N8(b,c,d,e){b=b|0;c=c|0;d=d|0;e=e|0;if((c|0)!=(d|0))while(1){a[e>>0]=a[c>>0]|0;c=c+1|0;if((c|0)==(d|0))break;else e=e+1|0}return d|0}function O8(a,b,c){a=a|0;b=b|0;c=c|0;return (b<<24>>24>-1?b:c)|0}function P8(b,c,d,e,f){b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;if((c|0)!=(d|0))while(1){b=a[c>>0]|0;a[f>>0]=b<<24>>24>-1?b:e;c=c+1|0;if((c|0)==(d|0))break;else f=f+1|0}return d|0}function Q8(a){a=a|0;P_(a);return}function R8(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;c[f>>2]=d;c[i>>2]=g;return 3}function S8(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;c[f>>2]=d;c[i>>2]=g;return 3}function T8(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;c[f>>2]=d;return 3}function U8(a){a=a|0;return 1}function V8(a){a=a|0;return 1}function W8(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;a=d-c|0;return (a>>>0>>0?a:e)|0}function X8(a){a=a|0;return 1}function Y8(a){a=a|0;$9(a);P_(a);return}function Z8(b,d,e,f,g,h,j,k){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;j=j|0;k=k|0;var l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0;s=i;i=i+16|0;q=s;o=s+8|0;a:do if((e|0)==(f|0))l=f;else{l=e;while(1){if(!(c[l>>2]|0))break a;l=l+4|0;if((l|0)==(f|0)){l=f;break}}}while(0);c[k>>2]=h;c[g>>2]=e;n=j;p=b+8|0;b:do if((h|0)==(j|0)|(e|0)==(f|0))r=29;else{c:while(1){t=d;m=c[t+4>>2]|0;b=q;c[b>>2]=c[t>>2];c[b+4>>2]=m;b=$$(c[p>>2]|0)|0;m=p0(h,g,l-e>>2,n-h|0,d)|0;if(b)$$(b)|0;switch(m|0){case 0:{e=1;break b}case -1:break c;default:{}}h=(c[k>>2]|0)+m|0;c[k>>2]=h;if((h|0)==(j|0)){r=15;break}if((l|0)==(f|0)){e=c[g>>2]|0;l=f}else{e=$$(c[p>>2]|0)|0;h=o0(o,0,d)|0;if(e)$$(e)|0;if((h|0)==-1){e=2;break b}if(h>>>0>(n-(c[k>>2]|0)|0)>>>0){e=1;break b}if(h){e=o;while(1){m=a[e>>0]|0;t=c[k>>2]|0;c[k>>2]=t+1;a[t>>0]=m;h=h+-1|0;if(!h)break;else e=e+1|0}}e=(c[g>>2]|0)+4|0;c[g>>2]=e;d:do if((e|0)==(f|0))l=f;else{l=e;while(1){if(!(c[l>>2]|0))break d;l=l+4|0;if((l|0)==(f|0)){l=f;break}}}while(0);h=c[k>>2]|0}if((h|0)==(j|0)|(e|0)==(f|0)){r=29;break b}}if((r|0)==15){e=c[g>>2]|0;r=29;break}c[k>>2]=h;e:do if((e|0)!=(c[g>>2]|0))do{t=c[e>>2]|0;l=$$(c[p>>2]|0)|0;h=o0(h,t,q)|0;if(l)$$(l)|0;if((h|0)==-1)break e;h=(c[k>>2]|0)+h|0;c[k>>2]=h;e=e+4|0}while((e|0)!=(c[g>>2]|0));while(0);c[g>>2]=e;e=2}while(0);if((r|0)==29)e=(e|0)!=(f|0)&1;i=s;return e|0}function _8(b,d,e,f,g,h,j,k){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;j=j|0;k=k|0;var l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0;s=i;i=i+16|0;q=s;a:do if((e|0)==(f|0))l=f;else{l=e;while(1){if(!(a[l>>0]|0))break a;l=l+1|0;if((l|0)==(f|0)){l=f;break}}}while(0);c[k>>2]=h;c[g>>2]=e;o=j;p=b+8|0;b:do if((h|0)==(j|0)|(e|0)==(f|0))r=29;else{c:while(1){n=d;m=c[n+4>>2]|0;b=q;c[b>>2]=c[n>>2];c[b+4>>2]=m;b=l;m=$$(c[p>>2]|0)|0;n=l0(h,g,b-e|0,o-h>>2,d)|0;if(m)$$(m)|0;switch(n|0){case 0:{e=2;break b}case -1:break c;default:{}}h=(c[k>>2]|0)+(n<<2)|0;c[k>>2]=h;if((h|0)==(j|0)){r=19;break}e=c[g>>2]|0;if((l|0)==(f|0))l=f;else{l=$$(c[p>>2]|0)|0;e=j0(h,e,1,d)|0;if(l)$$(l)|0;if(e){e=2;break b}c[k>>2]=(c[k>>2]|0)+4;e=(c[g>>2]|0)+1|0;c[g>>2]=e;d:do if((e|0)==(f|0))l=f;else{l=e;while(1){if(!(a[l>>0]|0))break d;l=l+1|0;if((l|0)==(f|0)){l=f;break}}}while(0);h=c[k>>2]|0}if((h|0)==(j|0)|(e|0)==(f|0)){r=29;break b}}if((r|0)==19){e=c[g>>2]|0;r=29;break}c[k>>2]=h;e:do if((e|0)!=(c[g>>2]|0)){f:while(1){l=$$(c[p>>2]|0)|0;h=j0(h,e,b-e|0,q)|0;if(l)$$(l)|0;switch(h|0){case -1:{r=13;break f}case -2:{r=14;break f}case 0:{e=e+1|0;break}default:e=e+h|0}h=(c[k>>2]|0)+4|0;c[k>>2]=h;if((e|0)==(c[g>>2]|0))break e}if((r|0)==13){c[g>>2]=e;e=2;break b}else if((r|0)==14){c[g>>2]=e;e=1;break b}}while(0);c[g>>2]=e;e=(e|0)!=(f|0)&1}while(0);if((r|0)==29)e=(e|0)!=(f|0)&1;i=s;return e|0}function $8(b,d,e,f,g){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,j=0;j=i;i=i+16|0;h=j;c[g>>2]=e;e=$$(c[b+8>>2]|0)|0;b=o0(h,0,d)|0;if(e)$$(e)|0;switch(b|0){case 0:case -1:{h=2;break}default:{b=b+-1|0;if(b>>>0<=(f-(c[g>>2]|0)|0)>>>0)if(!b)h=0;else while(1){d=a[h>>0]|0;f=c[g>>2]|0;c[g>>2]=f+1;a[f>>0]=d;b=b+-1|0;if(!b){h=0;break}else h=h+1|0}else h=1}}i=j;return h|0}function a9(a){a=a|0;var b=0,d=0;a=a+8|0;b=$$(c[a>>2]|0)|0;d=n0(0,0,4)|0;if(b)$$(b)|0;if(!d){a=c[a>>2]|0;if(a){a=$$(a)|0;if(!a)a=0;else{$$(a)|0;a=0}}else a=1}else a=-1;return a|0}function b9(a){a=a|0;return 0}function c9(a,b,d,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;k=e;j=a+8|0;a:do if((d|0)==(e|0)|(f|0)==0)a=0;else{a=0;i=0;while(1){h=$$(c[j>>2]|0)|0;g=i0(d,k-d|0,b)|0;if(h)$$(h)|0;switch(g|0){case -2:case -1:break a;case 0:{d=d+1|0;g=1;break}default:d=d+g|0}a=g+a|0;i=i+1|0;if((d|0)==(e|0)|i>>>0>=f>>>0)break a}}while(0);return a|0}function d9(a){a=a|0;a=c[a+8>>2]|0;if(a){a=$$(a)|0;if(!a)a=4;else{$$(a)|0;a=4}}else a=1;return a|0}function e9(a){a=a|0;P_(a);return}function f9(a,b,d,e,f,g,h,j){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;j=j|0;var k=0;a=i;i=i+16|0;k=a+4|0;b=a;c[k>>2]=d;c[b>>2]=g;h=jba(d,e,k,g,h,b,1114111,0)|0;c[f>>2]=c[k>>2];c[j>>2]=c[b>>2];i=a;return h|0}function g9(a,b,d,e,f,g,h,j){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;j=j|0;var k=0;a=i;i=i+16|0;k=a+4|0;b=a;c[k>>2]=d;c[b>>2]=g;h=kba(d,e,k,g,h,b,1114111,0)|0;c[f>>2]=c[k>>2];c[j>>2]=c[b>>2];i=a;return h|0}function h9(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;c[f>>2]=d;return 3}function i9(a){a=a|0;return 0}function j9(a){a=a|0;return 0}function k9(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return lba(c,d,e,1114111,0)|0}function l9(a){a=a|0;return 4}function m9(a){a=a|0;P_(a);return}function n9(a,b,d,e,f,g,h,j){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;j=j|0;var k=0;a=i;i=i+16|0;k=a+4|0;b=a;c[k>>2]=d;c[b>>2]=g;h=mba(d,e,k,g,h,b,1114111,0)|0;c[f>>2]=c[k>>2];c[j>>2]=c[b>>2];i=a;return h|0}function o9(a,b,d,e,f,g,h,j){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;j=j|0;var k=0;a=i;i=i+16|0;k=a+4|0;b=a;c[k>>2]=d;c[b>>2]=g;h=nba(d,e,k,g,h,b,1114111,0)|0;c[f>>2]=c[k>>2];c[j>>2]=c[b>>2];i=a;return h|0}function p9(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;c[f>>2]=d;return 3}function q9(a){a=a|0;return 0}function r9(a){a=a|0;return 0}function s9(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return oba(c,d,e,1114111,0)|0}function t9(a){a=a|0;return 4}function u9(a){a=a|0;P_(a);return}function v9(a){a=a|0;P_(a);return}function w9(b,d){b=b|0;d=d|0;c[b+4>>2]=d+-1;c[b>>2]=54716;a[b+8>>0]=46;a[b+9>>0]=44;b=b+12|0;c[b>>2]=0;c[b+4>>2]=0;c[b+8>>2]=0;return}function x9(a,b){a=a|0;b=b|0;c[a+4>>2]=b+-1;c[a>>2]=54756;c[a+8>>2]=46;c[a+12>>2]=44;a=a+16|0;c[a>>2]=0;c[a+4>>2]=0;c[a+8>>2]=0;return}function y9(a){a=a|0;c[a>>2]=54716;o2(a+12|0);return}function z9(a){a=a|0;y9(a);P_(a);return}function A9(a){a=a|0;c[a>>2]=54756;o2(a+16|0);return}function B9(a){a=a|0;A9(a);P_(a);return}function C9(b){b=b|0;return a[b+8>>0]|0}function D9(a){a=a|0;return c[a+8>>2]|0}function E9(b){b=b|0;return a[b+9>>0]|0}function F9(a){a=a|0;return c[a+12>>2]|0}function G9(a,b){a=a|0;b=b|0;k2(a,b+12|0);return}function H9(a,b){a=a|0;b=b|0;k2(a,b+16|0);return}function I9(a,b){a=a|0;b=b|0;l2(a,89016,4);return}function J9(a,b){a=a|0;b=b|0;C2(a,55328,g1(55328)|0);return}function K9(a,b){a=a|0;b=b|0;l2(a,89021,5);return}function L9(a,b){a=a|0;b=b|0;C2(a,55348,g1(55348)|0);return}function M9(a){a=a|0;switch(c[a+4>>2]&74|0){case 64:{a=8;break}case 8:{a=16;break}case 0:{a=0;break}default:a=10}return a|0}function N9(b){b=b|0;if((a[12008]|0)==0?(Ga(12008)|0)!=0:0){if((a[12016]|0)==0?(Ga(12016)|0)!=0:0){b=55372;do{c[b>>2]=0;c[b+4>>2]=0;c[b+8>>2]=0;b=b+12|0}while((b|0)!=55540);Ta(1498,0,n|0)|0;$a(12016)}q2(55372,89027)|0;q2(55384,89034)|0;q2(55396,89041)|0;q2(55408,89049)|0;q2(55420,89059)|0;q2(55432,89068)|0;q2(55444,89075)|0;q2(55456,89084)|0;q2(55468,89088)|0;q2(55480,89092)|0;q2(55492,89096)|0;q2(55504,89100)|0;q2(55516,89104)|0;q2(55528,89108)|0;c[13885]=55372;$a(12008)}return c[13885]|0}function O9(b){b=b|0;if((a[12024]|0)==0?(Ga(12024)|0)!=0:0){if((a[12032]|0)==0?(Ga(12032)|0)!=0:0){b=55544;do{c[b>>2]=0;c[b+4>>2]=0;c[b+8>>2]=0;b=b+12|0}while((b|0)!=55712);Ta(1499,0,n|0)|0;$a(12032)}F2(55544,55712)|0;F2(55556,55740)|0;F2(55568,55768)|0;F2(55580,55800)|0;F2(55592,55840)|0;F2(55604,55876)|0;F2(55616,55904)|0;F2(55628,55940)|0;F2(55640,55956)|0;F2(55652,55972)|0;F2(55664,55988)|0;F2(55676,56004)|0;F2(55688,56020)|0;F2(55700,56036)|0;c[14013]=55544;$a(12024)}return c[14013]|0}function P9(b){b=b|0;if((a[12040]|0)==0?(Ga(12040)|0)!=0:0){if((a[12048]|0)==0?(Ga(12048)|0)!=0:0){b=56056;do{c[b>>2]=0;c[b+4>>2]=0;c[b+8>>2]=0;b=b+12|0}while((b|0)!=56344);Ta(1500,0,n|0)|0;$a(12048)}q2(56056,89112)|0;q2(56068,89120)|0;q2(56080,89129)|0;q2(56092,89135)|0;q2(56104,89141)|0;q2(56116,89145)|0;q2(56128,89150)|0;q2(56140,89155)|0;q2(56152,89162)|0;q2(56164,89172)|0;q2(56176,89180)|0;q2(56188,89189)|0;q2(56200,89198)|0;q2(56212,89202)|0;q2(56224,89206)|0;q2(56236,89210)|0;q2(56248,89141)|0;q2(56260,89214)|0;q2(56272,89218)|0;q2(56284,89222)|0;q2(56296,89226)|0;q2(56308,89230)|0;q2(56320,89234)|0;q2(56332,89238)|0;c[14086]=56056;$a(12040)}return c[14086]|0}function Q9(b){b=b|0;if((a[12056]|0)==0?(Ga(12056)|0)!=0:0){if((a[12064]|0)==0?(Ga(12064)|0)!=0:0){b=56348;do{c[b>>2]=0;c[b+4>>2]=0;c[b+8>>2]=0;b=b+12|0}while((b|0)!=56636);Ta(1501,0,n|0)|0;$a(12064)}F2(56348,56636)|0;F2(56360,56668)|0;F2(56372,56704)|0;F2(56384,56728)|0;F2(56396,56752)|0;F2(56408,56768)|0;F2(56420,56788)|0;F2(56432,56808)|0;F2(56444,56836)|0;F2(56456,56876)|0;F2(56468,56908)|0;F2(56480,56944)|0;F2(56492,56980)|0;F2(56504,56996)|0;F2(56516,57012)|0;F2(56528,57028)|0;F2(56540,56752)|0;F2(56552,57044)|0;F2(56564,57060)|0;F2(56576,57076)|0;F2(56588,57092)|0;F2(56600,57108)|0;F2(56612,57124)|0;F2(56624,57140)|0;c[14289]=56348;$a(12056)}return c[14289]|0}function R9(b){b=b|0;if((a[12072]|0)==0?(Ga(12072)|0)!=0:0){if((a[12080]|0)==0?(Ga(12080)|0)!=0:0){b=57160;do{c[b>>2]=0;c[b+4>>2]=0;c[b+8>>2]=0;b=b+12|0}while((b|0)!=57448);Ta(1502,0,n|0)|0;$a(12080)}q2(57160,89242)|0;q2(57172,89245)|0;c[14362]=57160;$a(12072)}return c[14362]|0}function S9(b){b=b|0;if((a[12088]|0)==0?(Ga(12088)|0)!=0:0){if((a[12096]|0)==0?(Ga(12096)|0)!=0:0){b=57452;do{c[b>>2]=0;c[b+4>>2]=0;c[b+8>>2]=0;b=b+12|0}while((b|0)!=57740);Ta(1503,0,n|0)|0;$a(12096)}F2(57452,57740)|0;F2(57464,57752)|0;c[14441]=57452;$a(12088)}return c[14441]|0}function T9(b){b=b|0;if((a[12104]|0)==0?(Ga(12104)|0)!=0:0){l2(57768,89248,8);Ta(1504,57768,n|0)|0;$a(12104)}return 57768}function U9(b){b=b|0;if((a[12112]|0)==0?(Ga(12112)|0)!=0:0){C2(57816,57780,g1(57780)|0);Ta(1505,57816,n|0)|0;$a(12112)}return 57816}function V9(b){b=b|0;if((a[12120]|0)==0?(Ga(12120)|0)!=0:0){l2(57828,89257,8);Ta(1504,57828,n|0)|0;$a(12120)}return 57828}function W9(b){b=b|0;if((a[12128]|0)==0?(Ga(12128)|0)!=0:0){C2(57876,57840,g1(57840)|0);Ta(1505,57876,n|0)|0;$a(12128)}return 57876}function X9(b){b=b|0;if((a[12136]|0)==0?(Ga(12136)|0)!=0:0){l2(57888,89266,20);Ta(1504,57888,n|0)|0;$a(12136)}return 57888}function Y9(b){b=b|0;if((a[12144]|0)==0?(Ga(12144)|0)!=0:0){C2(57984,57900,g1(57900)|0);Ta(1505,57984,n|0)|0;$a(12144)}return 57984}function Z9(b){b=b|0;if((a[12152]|0)==0?(Ga(12152)|0)!=0:0){l2(57996,89287,11);Ta(1504,57996,n|0)|0;$a(12152)}return 57996}function _9(b){b=b|0;if((a[12160]|0)==0?(Ga(12160)|0)!=0:0){C2(58056,58008,g1(58008)|0);Ta(1505,58056,n|0)|0;$a(12160)}return 58056}function $9(a){a=a|0;var b=0;c[a>>2]=54636;a=a+8|0;b=c[a>>2]|0;if((b|0)!=(E4()|0))W$(c[a>>2]|0);return}function aaa(b,e,f,g,h,j,k){b=b|0;e=e|0;f=f|0;g=g|0;h=h|0;j=j|0;k=k|0;var l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0;A=i;i=i+112|0;m=A;n=(g-f|0)/12|0;if(n>>>0>100){m=w1(n)|0;if(!m)A$();else{y=m;l=m}}else{y=0;l=m}if((f|0)==(g|0))m=0;else{q=f;o=0;p=l;while(1){m=a[q>>0]|0;if(!(m&1))m=(m&255)>>>1;else m=c[q+4>>2]|0;if(!m){a[p>>0]=2;m=o+1|0;n=n+-1|0}else{a[p>>0]=1;m=o}q=q+12|0;if((q|0)==(g|0))break;else{o=m;p=p+1|0}}}w=(f|0)==(g|0);x=(f|0)==(g|0);v=0;r=m;t=n;a:while(1){m=c[b>>2]|0;do if(m){if((c[m+12>>2]|0)==(c[m+16>>2]|0))if((rc[c[(c[m>>2]|0)+36>>2]&127](m)|0)==-1){c[b>>2]=0;m=0;break}else{m=c[b>>2]|0;break}}else m=0;while(0);p=(m|0)==0;n=c[e>>2]|0;if(n){if((c[n+12>>2]|0)==(c[n+16>>2]|0)?(rc[c[(c[n>>2]|0)+36>>2]&127](n)|0)==-1:0){c[e>>2]=0;n=0}}else n=0;o=(n|0)==0;m=c[b>>2]|0;if(!((t|0)!=0&(p^o)))break;n=c[m+12>>2]|0;if((n|0)==(c[m+16>>2]|0))m=rc[c[(c[m>>2]|0)+36>>2]&127](m)|0;else m=d[n>>0]|0;m=m&255;if(!k)m=zc[c[(c[h>>2]|0)+12>>2]&255](h,m)|0;u=v+1|0;if(w){m=0;p=r;q=t}else{q=0;s=f;p=r;o=t;r=l;while(1){do if((a[r>>0]|0)==1){if(!(a[s>>0]&1))n=s+1|0;else n=c[s+8>>2]|0;n=a[n+v>>0]|0;if(!k)n=zc[c[(c[h>>2]|0)+12>>2]&255](h,n)|0;if(m<<24>>24!=n<<24>>24){a[r>>0]=0;n=q;o=o+-1|0;break}n=a[s>>0]|0;if(!(n&1))n=(n&255)>>>1;else n=c[s+4>>2]|0;if((n|0)==(u|0)){a[r>>0]=2;n=1;p=p+1|0;o=o+-1|0}else n=1}else n=q;while(0);s=s+12|0;if((s|0)==(g|0)){m=n;q=o;break}else{q=n;r=r+1|0}}}if(!m){v=u;r=p;t=q;continue}m=c[b>>2]|0;n=m+12|0;o=c[n>>2]|0;if((o|0)==(c[m+16>>2]|0))rc[c[(c[m>>2]|0)+40>>2]&127](m)|0;else c[n>>2]=o+1;if((p+q|0)>>>0<2|x){v=u;r=p;t=q;continue}else{m=f;o=p;p=l}while(1){if((a[p>>0]|0)==2){n=a[m>>0]|0;if(!(n&1))n=(n&255)>>>1;else n=c[m+4>>2]|0;if((n|0)!=(u|0)){a[p>>0]=0;o=o+-1|0}}m=m+12|0;if((m|0)==(g|0)){v=u;r=o;t=q;continue a}else p=p+1|0}}do if(m){if((c[m+12>>2]|0)==(c[m+16>>2]|0))if((rc[c[(c[m>>2]|0)+36>>2]&127](m)|0)==-1){c[b>>2]=0;m=0;break}else{m=c[b>>2]|0;break}}else m=0;while(0);m=(m|0)==0;do if(!o){if((c[n+12>>2]|0)==(c[n+16>>2]|0)?(rc[c[(c[n>>2]|0)+36>>2]&127](n)|0)==-1:0){c[e>>2]=0;z=65;break}if(!m)z=66}else z=65;while(0);if((z|0)==65?m:0)z=66;if((z|0)==66)c[j>>2]=c[j>>2]|2;b:do if((f|0)==(g|0))z=70;else while(1){if((a[l>>0]|0)==2)break b;f=f+12|0;if((f|0)==(g|0)){z=70;break}else l=l+1|0}while(0);if((z|0)==70){c[j>>2]=c[j>>2]|4;f=g}x1(y);i=A;return f|0}function baa(b,e,f,g,h,j){b=b|0;e=e|0;f=f|0;g=g|0;h=h|0;j=j|0;var k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0;A=i;i=i+240|0;s=A+202|0;k=A+200|0;z=A+24|0;y=A+12|0;w=A+8|0;x=A+40|0;u=A+4|0;t=A;v=M9(g)|0;T4(z,g,s,k);c[y>>2]=0;c[y+4>>2]=0;c[y+8>>2]=0;if(!(a[y>>0]&1))b=10;else b=(c[y>>2]&-2)+-1|0;s2(y,b,0);p=y+8|0;q=y+1|0;n=(a[y>>0]&1)==0?q:c[p>>2]|0;c[w>>2]=n;c[u>>2]=x;c[t>>2]=0;r=y+4|0;o=a[k>>0]|0;b=c[e>>2]|0;k=n;a:while(1){if(b){if((c[b+12>>2]|0)==(c[b+16>>2]|0)?(rc[c[(c[b>>2]|0)+36>>2]&127](b)|0)==-1:0){c[e>>2]=0;b=0}}else b=0;g=(b|0)==0;l=c[f>>2]|0;do if(l){if((c[l+12>>2]|0)!=(c[l+16>>2]|0))if(g)break;else break a;if((rc[c[(c[l>>2]|0)+36>>2]&127](l)|0)!=-1)if(g)break;else break a;else{c[f>>2]=0;B=13;break}}else B=13;while(0);if((B|0)==13){B=0;if(g){l=0;break}else l=0}m=a[y>>0]|0;m=(m&1)==0?(m&255)>>>1:c[r>>2]|0;if((c[w>>2]|0)==(k+m|0)){s2(y,m<<1,0);if(!(a[y>>0]&1))g=10;else g=(c[y>>2]&-2)+-1|0;s2(y,g,0);k=(a[y>>0]&1)==0?q:c[p>>2]|0;c[w>>2]=k+m}m=b+12|0;g=c[m>>2]|0;n=b+16|0;if((g|0)==(c[n>>2]|0))g=rc[c[(c[b>>2]|0)+36>>2]&127](b)|0;else g=d[g>>0]|0;if(D4(g&255,v,k,w,t,o,z,x,u,s)|0)break;g=c[m>>2]|0;if((g|0)==(c[n>>2]|0)){rc[c[(c[b>>2]|0)+40>>2]&127](b)|0;continue}else{c[m>>2]=g+1;continue}}s=a[z>>0]|0;g=c[u>>2]|0;if((((s&1)==0?(s&255)>>>1:c[z+4>>2]|0)|0)!=0?(g-x|0)<160:0){s=c[t>>2]|0;t=g+4|0;c[u>>2]=t;c[g>>2]=s;g=t}c[j>>2]=Jba(k,c[w>>2]|0,h,v)|0;B7(z,x,g,h);if(b){if((c[b+12>>2]|0)==(c[b+16>>2]|0)?(rc[c[(c[b>>2]|0)+36>>2]&127](b)|0)==-1:0){c[e>>2]=0;b=0}}else b=0;b=(b|0)==0;do if(l){if((c[l+12>>2]|0)==(c[l+16>>2]|0)?(rc[c[(c[l>>2]|0)+36>>2]&127](l)|0)==-1:0){c[f>>2]=0;B=38;break}if(!b)B=39}else B=38;while(0);if((B|0)==38?b:0)B=39;if((B|0)==39)c[h>>2]=c[h>>2]|2;B=c[e>>2]|0;o2(y);o2(z);i=A;return B|0}function caa(b,e,f,g,h,j){b=b|0;e=e|0;f=f|0;g=g|0;h=h|0;j=j|0;var k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0;A=i;i=i+240|0;s=A+202|0;k=A+200|0;z=A+24|0;y=A+12|0;w=A+8|0;x=A+40|0;u=A+4|0;t=A;v=M9(g)|0;T4(z,g,s,k);c[y>>2]=0;c[y+4>>2]=0;c[y+8>>2]=0;if(!(a[y>>0]&1))b=10;else b=(c[y>>2]&-2)+-1|0;s2(y,b,0);p=y+8|0;q=y+1|0;n=(a[y>>0]&1)==0?q:c[p>>2]|0;c[w>>2]=n;c[u>>2]=x;c[t>>2]=0;r=y+4|0;o=a[k>>0]|0;b=c[e>>2]|0;k=n;a:while(1){if(b){if((c[b+12>>2]|0)==(c[b+16>>2]|0)?(rc[c[(c[b>>2]|0)+36>>2]&127](b)|0)==-1:0){c[e>>2]=0;b=0}}else b=0;g=(b|0)==0;l=c[f>>2]|0;do if(l){if((c[l+12>>2]|0)!=(c[l+16>>2]|0))if(g)break;else break a;if((rc[c[(c[l>>2]|0)+36>>2]&127](l)|0)!=-1)if(g)break;else break a;else{c[f>>2]=0;B=13;break}}else B=13;while(0);if((B|0)==13){B=0;if(g){l=0;break}else l=0}m=a[y>>0]|0;m=(m&1)==0?(m&255)>>>1:c[r>>2]|0;if((c[w>>2]|0)==(k+m|0)){s2(y,m<<1,0);if(!(a[y>>0]&1))g=10;else g=(c[y>>2]&-2)+-1|0;s2(y,g,0);k=(a[y>>0]&1)==0?q:c[p>>2]|0;c[w>>2]=k+m}m=b+12|0;g=c[m>>2]|0;n=b+16|0;if((g|0)==(c[n>>2]|0))g=rc[c[(c[b>>2]|0)+36>>2]&127](b)|0;else g=d[g>>0]|0;if(D4(g&255,v,k,w,t,o,z,x,u,s)|0)break;g=c[m>>2]|0;if((g|0)==(c[n>>2]|0)){rc[c[(c[b>>2]|0)+40>>2]&127](b)|0;continue}else{c[m>>2]=g+1;continue}}s=a[z>>0]|0;g=c[u>>2]|0;if((((s&1)==0?(s&255)>>>1:c[z+4>>2]|0)|0)!=0?(g-x|0)<160:0){s=c[t>>2]|0;t=g+4|0;c[u>>2]=t;c[g>>2]=s;g=t}w=Iba(k,c[w>>2]|0,h,v)|0;c[j>>2]=w;c[j+4>>2]=D;B7(z,x,g,h);if(b){if((c[b+12>>2]|0)==(c[b+16>>2]|0)?(rc[c[(c[b>>2]|0)+36>>2]&127](b)|0)==-1:0){c[e>>2]=0;b=0}}else b=0;b=(b|0)==0;do if(l){if((c[l+12>>2]|0)==(c[l+16>>2]|0)?(rc[c[(c[l>>2]|0)+36>>2]&127](l)|0)==-1:0){c[f>>2]=0;B=38;break}if(!b)B=39}else B=38;while(0);if((B|0)==38?b:0)B=39;if((B|0)==39)c[h>>2]=c[h>>2]|2;B=c[e>>2]|0;o2(y);o2(z);i=A;return B|0}function daa(e,f,g,h,j,k){e=e|0;f=f|0;g=g|0;h=h|0;j=j|0;k=k|0;var l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0;B=i;i=i+240|0;t=B+202|0;l=B+200|0;A=B+24|0;z=B+12|0;x=B+8|0;y=B+40|0;v=B+4|0;u=B;w=M9(h)|0;T4(A,h,t,l);c[z>>2]=0;c[z+4>>2]=0;c[z+8>>2]=0;if(!(a[z>>0]&1))e=10;else e=(c[z>>2]&-2)+-1|0;s2(z,e,0);q=z+8|0;r=z+1|0;o=(a[z>>0]&1)==0?r:c[q>>2]|0;c[x>>2]=o;c[v>>2]=y;c[u>>2]=0;s=z+4|0;p=a[l>>0]|0;e=c[f>>2]|0;l=o;a:while(1){if(e){if((c[e+12>>2]|0)==(c[e+16>>2]|0)?(rc[c[(c[e>>2]|0)+36>>2]&127](e)|0)==-1:0){c[f>>2]=0;e=0}}else e=0;h=(e|0)==0;m=c[g>>2]|0;do if(m){if((c[m+12>>2]|0)!=(c[m+16>>2]|0))if(h)break;else break a;if((rc[c[(c[m>>2]|0)+36>>2]&127](m)|0)!=-1)if(h)break;else break a;else{c[g>>2]=0;C=13;break}}else C=13;while(0);if((C|0)==13){C=0;if(h){m=0;break}else m=0}n=a[z>>0]|0;n=(n&1)==0?(n&255)>>>1:c[s>>2]|0;if((c[x>>2]|0)==(l+n|0)){s2(z,n<<1,0);if(!(a[z>>0]&1))h=10;else h=(c[z>>2]&-2)+-1|0;s2(z,h,0);l=(a[z>>0]&1)==0?r:c[q>>2]|0;c[x>>2]=l+n}n=e+12|0;h=c[n>>2]|0;o=e+16|0;if((h|0)==(c[o>>2]|0))h=rc[c[(c[e>>2]|0)+36>>2]&127](e)|0;else h=d[h>>0]|0;if(D4(h&255,w,l,x,u,p,A,y,v,t)|0)break;h=c[n>>2]|0;if((h|0)==(c[o>>2]|0)){rc[c[(c[e>>2]|0)+40>>2]&127](e)|0;continue}else{c[n>>2]=h+1;continue}}t=a[A>>0]|0;h=c[v>>2]|0;if((((t&1)==0?(t&255)>>>1:c[A+4>>2]|0)|0)!=0?(h-y|0)<160:0){t=c[u>>2]|0;u=h+4|0;c[v>>2]=u;c[h>>2]=t;h=u}b[k>>1]=Hba(l,c[x>>2]|0,j,w)|0;B7(A,y,h,j);if(e){if((c[e+12>>2]|0)==(c[e+16>>2]|0)?(rc[c[(c[e>>2]|0)+36>>2]&127](e)|0)==-1:0){c[f>>2]=0;e=0}}else e=0;e=(e|0)==0;do if(m){if((c[m+12>>2]|0)==(c[m+16>>2]|0)?(rc[c[(c[m>>2]|0)+36>>2]&127](m)|0)==-1:0){c[g>>2]=0;C=38;break}if(!e)C=39}else C=38;while(0);if((C|0)==38?e:0)C=39;if((C|0)==39)c[j>>2]=c[j>>2]|2;C=c[f>>2]|0;o2(z);o2(A);i=B;return C|0}function eaa(b,e,f,g,h,j){b=b|0;e=e|0;f=f|0;g=g|0;h=h|0;j=j|0;var k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0;A=i;i=i+240|0;s=A+202|0;k=A+200|0;z=A+24|0;y=A+12|0;w=A+8|0;x=A+40|0;u=A+4|0;t=A;v=M9(g)|0;T4(z,g,s,k);c[y>>2]=0;c[y+4>>2]=0;c[y+8>>2]=0;if(!(a[y>>0]&1))b=10;else b=(c[y>>2]&-2)+-1|0;s2(y,b,0);p=y+8|0;q=y+1|0;n=(a[y>>0]&1)==0?q:c[p>>2]|0;c[w>>2]=n;c[u>>2]=x;c[t>>2]=0;r=y+4|0;o=a[k>>0]|0;b=c[e>>2]|0;k=n;a:while(1){if(b){if((c[b+12>>2]|0)==(c[b+16>>2]|0)?(rc[c[(c[b>>2]|0)+36>>2]&127](b)|0)==-1:0){c[e>>2]=0;b=0}}else b=0;g=(b|0)==0;l=c[f>>2]|0;do if(l){if((c[l+12>>2]|0)!=(c[l+16>>2]|0))if(g)break;else break a;if((rc[c[(c[l>>2]|0)+36>>2]&127](l)|0)!=-1)if(g)break;else break a;else{c[f>>2]=0;B=13;break}}else B=13;while(0);if((B|0)==13){B=0;if(g){l=0;break}else l=0}m=a[y>>0]|0;m=(m&1)==0?(m&255)>>>1:c[r>>2]|0;if((c[w>>2]|0)==(k+m|0)){s2(y,m<<1,0);if(!(a[y>>0]&1))g=10;else g=(c[y>>2]&-2)+-1|0;s2(y,g,0);k=(a[y>>0]&1)==0?q:c[p>>2]|0;c[w>>2]=k+m}m=b+12|0;g=c[m>>2]|0;n=b+16|0;if((g|0)==(c[n>>2]|0))g=rc[c[(c[b>>2]|0)+36>>2]&127](b)|0;else g=d[g>>0]|0;if(D4(g&255,v,k,w,t,o,z,x,u,s)|0)break;g=c[m>>2]|0;if((g|0)==(c[n>>2]|0)){rc[c[(c[b>>2]|0)+40>>2]&127](b)|0;continue}else{c[m>>2]=g+1;continue}}s=a[z>>0]|0;g=c[u>>2]|0;if((((s&1)==0?(s&255)>>>1:c[z+4>>2]|0)|0)!=0?(g-x|0)<160:0){s=c[t>>2]|0;t=g+4|0;c[u>>2]=t;c[g>>2]=s;g=t}c[j>>2]=Gba(k,c[w>>2]|0,h,v)|0;B7(z,x,g,h);if(b){if((c[b+12>>2]|0)==(c[b+16>>2]|0)?(rc[c[(c[b>>2]|0)+36>>2]&127](b)|0)==-1:0){c[e>>2]=0;b=0}}else b=0;b=(b|0)==0;do if(l){if((c[l+12>>2]|0)==(c[l+16>>2]|0)?(rc[c[(c[l>>2]|0)+36>>2]&127](l)|0)==-1:0){c[f>>2]=0;B=38;break}if(!b)B=39}else B=38;while(0);if((B|0)==38?b:0)B=39;if((B|0)==39)c[h>>2]=c[h>>2]|2;B=c[e>>2]|0;o2(y);o2(z);i=A;return B|0}function faa(b,e,f,g,h,j){b=b|0;e=e|0;f=f|0;g=g|0;h=h|0;j=j|0;var k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0;A=i;i=i+240|0;s=A+202|0;k=A+200|0;z=A+24|0;y=A+12|0;w=A+8|0;x=A+40|0;u=A+4|0;t=A;v=M9(g)|0;T4(z,g,s,k);c[y>>2]=0;c[y+4>>2]=0;c[y+8>>2]=0;if(!(a[y>>0]&1))b=10;else b=(c[y>>2]&-2)+-1|0;s2(y,b,0);p=y+8|0;q=y+1|0;n=(a[y>>0]&1)==0?q:c[p>>2]|0;c[w>>2]=n;c[u>>2]=x;c[t>>2]=0;r=y+4|0;o=a[k>>0]|0;b=c[e>>2]|0;k=n;a:while(1){if(b){if((c[b+12>>2]|0)==(c[b+16>>2]|0)?(rc[c[(c[b>>2]|0)+36>>2]&127](b)|0)==-1:0){c[e>>2]=0;b=0}}else b=0;g=(b|0)==0;l=c[f>>2]|0;do if(l){if((c[l+12>>2]|0)!=(c[l+16>>2]|0))if(g)break;else break a;if((rc[c[(c[l>>2]|0)+36>>2]&127](l)|0)!=-1)if(g)break;else break a;else{c[f>>2]=0;B=13;break}}else B=13;while(0);if((B|0)==13){B=0;if(g){l=0;break}else l=0}m=a[y>>0]|0;m=(m&1)==0?(m&255)>>>1:c[r>>2]|0;if((c[w>>2]|0)==(k+m|0)){s2(y,m<<1,0);if(!(a[y>>0]&1))g=10;else g=(c[y>>2]&-2)+-1|0;s2(y,g,0);k=(a[y>>0]&1)==0?q:c[p>>2]|0;c[w>>2]=k+m}m=b+12|0;g=c[m>>2]|0;n=b+16|0;if((g|0)==(c[n>>2]|0))g=rc[c[(c[b>>2]|0)+36>>2]&127](b)|0;else g=d[g>>0]|0;if(D4(g&255,v,k,w,t,o,z,x,u,s)|0)break;g=c[m>>2]|0;if((g|0)==(c[n>>2]|0)){rc[c[(c[b>>2]|0)+40>>2]&127](b)|0;continue}else{c[m>>2]=g+1;continue}}s=a[z>>0]|0;g=c[u>>2]|0;if((((s&1)==0?(s&255)>>>1:c[z+4>>2]|0)|0)!=0?(g-x|0)<160:0){s=c[t>>2]|0;t=g+4|0;c[u>>2]=t;c[g>>2]=s;g=t}c[j>>2]=Fba(k,c[w>>2]|0,h,v)|0;B7(z,x,g,h);if(b){if((c[b+12>>2]|0)==(c[b+16>>2]|0)?(rc[c[(c[b>>2]|0)+36>>2]&127](b)|0)==-1:0){c[e>>2]=0;b=0}}else b=0;b=(b|0)==0;do if(l){if((c[l+12>>2]|0)==(c[l+16>>2]|0)?(rc[c[(c[l>>2]|0)+36>>2]&127](l)|0)==-1:0){c[f>>2]=0;B=38;break}if(!b)B=39}else B=38;while(0);if((B|0)==38?b:0)B=39;if((B|0)==39)c[h>>2]=c[h>>2]|2;B=c[e>>2]|0;o2(y);o2(z);i=A;return B|0}function gaa(b,e,f,g,h,j){b=b|0;e=e|0;f=f|0;g=g|0;h=h|0;j=j|0;var k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0;A=i;i=i+240|0;s=A+202|0;k=A+200|0;z=A+24|0;y=A+12|0;w=A+8|0;x=A+40|0;u=A+4|0;t=A;v=M9(g)|0;T4(z,g,s,k);c[y>>2]=0;c[y+4>>2]=0;c[y+8>>2]=0;if(!(a[y>>0]&1))b=10;else b=(c[y>>2]&-2)+-1|0;s2(y,b,0);p=y+8|0;q=y+1|0;n=(a[y>>0]&1)==0?q:c[p>>2]|0;c[w>>2]=n;c[u>>2]=x;c[t>>2]=0;r=y+4|0;o=a[k>>0]|0;b=c[e>>2]|0;k=n;a:while(1){if(b){if((c[b+12>>2]|0)==(c[b+16>>2]|0)?(rc[c[(c[b>>2]|0)+36>>2]&127](b)|0)==-1:0){c[e>>2]=0;b=0}}else b=0;g=(b|0)==0;l=c[f>>2]|0;do if(l){if((c[l+12>>2]|0)!=(c[l+16>>2]|0))if(g)break;else break a;if((rc[c[(c[l>>2]|0)+36>>2]&127](l)|0)!=-1)if(g)break;else break a;else{c[f>>2]=0;B=13;break}}else B=13;while(0);if((B|0)==13){B=0;if(g){l=0;break}else l=0}m=a[y>>0]|0;m=(m&1)==0?(m&255)>>>1:c[r>>2]|0;if((c[w>>2]|0)==(k+m|0)){s2(y,m<<1,0);if(!(a[y>>0]&1))g=10;else g=(c[y>>2]&-2)+-1|0;s2(y,g,0);k=(a[y>>0]&1)==0?q:c[p>>2]|0;c[w>>2]=k+m}m=b+12|0;g=c[m>>2]|0;n=b+16|0;if((g|0)==(c[n>>2]|0))g=rc[c[(c[b>>2]|0)+36>>2]&127](b)|0;else g=d[g>>0]|0;if(D4(g&255,v,k,w,t,o,z,x,u,s)|0)break;g=c[m>>2]|0;if((g|0)==(c[n>>2]|0)){rc[c[(c[b>>2]|0)+40>>2]&127](b)|0;continue}else{c[m>>2]=g+1;continue}}s=a[z>>0]|0;g=c[u>>2]|0;if((((s&1)==0?(s&255)>>>1:c[z+4>>2]|0)|0)!=0?(g-x|0)<160:0){s=c[t>>2]|0;t=g+4|0;c[u>>2]=t;c[g>>2]=s;g=t}w=Eba(k,c[w>>2]|0,h,v)|0;c[j>>2]=w;c[j+4>>2]=D;B7(z,x,g,h);if(b){if((c[b+12>>2]|0)==(c[b+16>>2]|0)?(rc[c[(c[b>>2]|0)+36>>2]&127](b)|0)==-1:0){c[e>>2]=0;b=0}}else b=0;b=(b|0)==0;do if(l){if((c[l+12>>2]|0)==(c[l+16>>2]|0)?(rc[c[(c[l>>2]|0)+36>>2]&127](l)|0)==-1:0){c[f>>2]=0;B=38;break}if(!b)B=39}else B=38;while(0);if((B|0)==38?b:0)B=39;if((B|0)==39)c[h>>2]=c[h>>2]|2;B=c[e>>2]|0;o2(y);o2(z);i=A;return B|0}function haa(b,e,f,h,j,k){b=b|0;e=e|0;f=f|0;h=h|0;j=j|0;k=k|0;var l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0;D=i;i=i+240|0;u=D+208|0;l=D+203|0;m=D+202|0;C=D+24|0;B=D+12|0;z=D+8|0;A=D+40|0;x=D+4|0;w=D;y=D+201|0;v=D+200|0;U4(C,h,u,l,m);c[B>>2]=0;c[B+4>>2]=0;c[B+8>>2]=0;if(!(a[B>>0]&1))b=10;else b=(c[B>>2]&-2)+-1|0;s2(B,b,0);r=B+8|0;s=B+1|0;o=(a[B>>0]&1)==0?s:c[r>>2]|0;c[z>>2]=o;c[x>>2]=A;c[w>>2]=0;a[y>>0]=1;a[v>>0]=69;t=B+4|0;q=a[l>>0]|0;p=a[m>>0]|0;b=c[e>>2]|0;l=o;a:while(1){if(b){if((c[b+12>>2]|0)==(c[b+16>>2]|0)?(rc[c[(c[b>>2]|0)+36>>2]&127](b)|0)==-1:0){c[e>>2]=0;b=0}}else b=0;h=(b|0)==0;m=c[f>>2]|0;do if(m){if((c[m+12>>2]|0)!=(c[m+16>>2]|0))if(h)break;else break a;if((rc[c[(c[m>>2]|0)+36>>2]&127](m)|0)!=-1)if(h)break;else break a;else{c[f>>2]=0;E=13;break}}else E=13;while(0);if((E|0)==13){E=0;if(h){m=0;break}else m=0}n=a[B>>0]|0;n=(n&1)==0?(n&255)>>>1:c[t>>2]|0;if((c[z>>2]|0)==(l+n|0)){s2(B,n<<1,0);if(!(a[B>>0]&1))h=10;else h=(c[B>>2]&-2)+-1|0;s2(B,h,0);l=(a[B>>0]&1)==0?s:c[r>>2]|0;c[z>>2]=l+n}n=b+12|0;h=c[n>>2]|0;o=b+16|0;if((h|0)==(c[o>>2]|0))h=rc[c[(c[b>>2]|0)+36>>2]&127](b)|0;else h=d[h>>0]|0;if(V4(h&255,y,v,l,z,q,p,C,A,x,w,u)|0)break;h=c[n>>2]|0;if((h|0)==(c[o>>2]|0)){rc[c[(c[b>>2]|0)+40>>2]&127](b)|0;continue}else{c[n>>2]=h+1;continue}}v=a[C>>0]|0;h=c[x>>2]|0;if(!((a[y>>0]|0)==0?1:(((v&1)==0?(v&255)>>>1:c[C+4>>2]|0)|0)==0)?(h-A|0)<160:0){w=c[w>>2]|0;y=h+4|0;c[x>>2]=y;c[h>>2]=w;h=y}g[k>>2]=+Dba(l,c[z>>2]|0,j);B7(C,A,h,j);if(b){if((c[b+12>>2]|0)==(c[b+16>>2]|0)?(rc[c[(c[b>>2]|0)+36>>2]&127](b)|0)==-1:0){c[e>>2]=0;b=0}}else b=0;b=(b|0)==0;do if(m){if((c[m+12>>2]|0)==(c[m+16>>2]|0)?(rc[c[(c[m>>2]|0)+36>>2]&127](m)|0)==-1:0){c[f>>2]=0;E=38;break}if(!b)E=39}else E=38;while(0);if((E|0)==38?b:0)E=39;if((E|0)==39)c[j>>2]=c[j>>2]|2;E=c[e>>2]|0;o2(B);o2(C);i=D;return E|0}function iaa(b,e,f,g,j,k){b=b|0;e=e|0;f=f|0;g=g|0;j=j|0;k=k|0;var l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0;D=i;i=i+240|0;u=D+208|0;l=D+203|0;m=D+202|0;C=D+24|0;B=D+12|0;z=D+8|0;A=D+40|0;x=D+4|0;w=D;y=D+201|0;v=D+200|0;U4(C,g,u,l,m);c[B>>2]=0;c[B+4>>2]=0;c[B+8>>2]=0;if(!(a[B>>0]&1))b=10;else b=(c[B>>2]&-2)+-1|0;s2(B,b,0);r=B+8|0;s=B+1|0;o=(a[B>>0]&1)==0?s:c[r>>2]|0;c[z>>2]=o;c[x>>2]=A;c[w>>2]=0;a[y>>0]=1;a[v>>0]=69;t=B+4|0;q=a[l>>0]|0;p=a[m>>0]|0;b=c[e>>2]|0;l=o;a:while(1){if(b){if((c[b+12>>2]|0)==(c[b+16>>2]|0)?(rc[c[(c[b>>2]|0)+36>>2]&127](b)|0)==-1:0){c[e>>2]=0;b=0}}else b=0;g=(b|0)==0;m=c[f>>2]|0;do if(m){if((c[m+12>>2]|0)!=(c[m+16>>2]|0))if(g)break;else break a;if((rc[c[(c[m>>2]|0)+36>>2]&127](m)|0)!=-1)if(g)break;else break a;else{c[f>>2]=0;E=13;break}}else E=13;while(0);if((E|0)==13){E=0;if(g){m=0;break}else m=0}n=a[B>>0]|0;n=(n&1)==0?(n&255)>>>1:c[t>>2]|0;if((c[z>>2]|0)==(l+n|0)){s2(B,n<<1,0);if(!(a[B>>0]&1))g=10;else g=(c[B>>2]&-2)+-1|0;s2(B,g,0);l=(a[B>>0]&1)==0?s:c[r>>2]|0;c[z>>2]=l+n}n=b+12|0;g=c[n>>2]|0;o=b+16|0;if((g|0)==(c[o>>2]|0))g=rc[c[(c[b>>2]|0)+36>>2]&127](b)|0;else g=d[g>>0]|0;if(V4(g&255,y,v,l,z,q,p,C,A,x,w,u)|0)break;g=c[n>>2]|0;if((g|0)==(c[o>>2]|0)){rc[c[(c[b>>2]|0)+40>>2]&127](b)|0;continue}else{c[n>>2]=g+1;continue}}v=a[C>>0]|0;g=c[x>>2]|0;if(!((a[y>>0]|0)==0?1:(((v&1)==0?(v&255)>>>1:c[C+4>>2]|0)|0)==0)?(g-A|0)<160:0){w=c[w>>2]|0;y=g+4|0;c[x>>2]=y;c[g>>2]=w;g=y}h[k>>3]=+Cba(l,c[z>>2]|0,j);B7(C,A,g,j);if(b){if((c[b+12>>2]|0)==(c[b+16>>2]|0)?(rc[c[(c[b>>2]|0)+36>>2]&127](b)|0)==-1:0){c[e>>2]=0;b=0}}else b=0;b=(b|0)==0;do if(m){if((c[m+12>>2]|0)==(c[m+16>>2]|0)?(rc[c[(c[m>>2]|0)+36>>2]&127](m)|0)==-1:0){c[f>>2]=0;E=38;break}if(!b)E=39}else E=38;while(0);if((E|0)==38?b:0)E=39;if((E|0)==39)c[j>>2]=c[j>>2]|2;E=c[e>>2]|0;o2(B);o2(C);i=D;return E|0}function jaa(b,e,f,g,j,k){b=b|0;e=e|0;f=f|0;g=g|0;j=j|0;k=k|0;var l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0;D=i;i=i+240|0;u=D+208|0;l=D+203|0;m=D+202|0;C=D+24|0;B=D+12|0;z=D+8|0;A=D+40|0;x=D+4|0;w=D;y=D+201|0;v=D+200|0;U4(C,g,u,l,m);c[B>>2]=0;c[B+4>>2]=0;c[B+8>>2]=0;if(!(a[B>>0]&1))b=10;else b=(c[B>>2]&-2)+-1|0;s2(B,b,0);r=B+8|0;s=B+1|0;o=(a[B>>0]&1)==0?s:c[r>>2]|0;c[z>>2]=o;c[x>>2]=A;c[w>>2]=0;a[y>>0]=1;a[v>>0]=69;t=B+4|0;q=a[l>>0]|0;p=a[m>>0]|0;b=c[e>>2]|0;l=o;a:while(1){if(b){if((c[b+12>>2]|0)==(c[b+16>>2]|0)?(rc[c[(c[b>>2]|0)+36>>2]&127](b)|0)==-1:0){c[e>>2]=0;b=0}}else b=0;g=(b|0)==0;m=c[f>>2]|0;do if(m){if((c[m+12>>2]|0)!=(c[m+16>>2]|0))if(g)break;else break a;if((rc[c[(c[m>>2]|0)+36>>2]&127](m)|0)!=-1)if(g)break;else break a;else{c[f>>2]=0;E=13;break}}else E=13;while(0);if((E|0)==13){E=0;if(g){m=0;break}else m=0}n=a[B>>0]|0;n=(n&1)==0?(n&255)>>>1:c[t>>2]|0;if((c[z>>2]|0)==(l+n|0)){s2(B,n<<1,0);if(!(a[B>>0]&1))g=10;else g=(c[B>>2]&-2)+-1|0;s2(B,g,0);l=(a[B>>0]&1)==0?s:c[r>>2]|0;c[z>>2]=l+n}n=b+12|0;g=c[n>>2]|0;o=b+16|0;if((g|0)==(c[o>>2]|0))g=rc[c[(c[b>>2]|0)+36>>2]&127](b)|0;else g=d[g>>0]|0;if(V4(g&255,y,v,l,z,q,p,C,A,x,w,u)|0)break;g=c[n>>2]|0;if((g|0)==(c[o>>2]|0)){rc[c[(c[b>>2]|0)+40>>2]&127](b)|0;continue}else{c[n>>2]=g+1;continue}}v=a[C>>0]|0;g=c[x>>2]|0;if(!((a[y>>0]|0)==0?1:(((v&1)==0?(v&255)>>>1:c[C+4>>2]|0)|0)==0)?(g-A|0)<160:0){w=c[w>>2]|0;y=g+4|0;c[x>>2]=y;c[g>>2]=w;g=y}h[k>>3]=+Bba(l,c[z>>2]|0,j);B7(C,A,g,j);if(b){if((c[b+12>>2]|0)==(c[b+16>>2]|0)?(rc[c[(c[b>>2]|0)+36>>2]&127](b)|0)==-1:0){c[e>>2]=0;b=0}}else b=0;b=(b|0)==0;do if(m){if((c[m+12>>2]|0)==(c[m+16>>2]|0)?(rc[c[(c[m>>2]|0)+36>>2]&127](m)|0)==-1:0){c[f>>2]=0;E=38;break}if(!b)E=39}else E=38;while(0);if((E|0)==38?b:0)E=39;if((E|0)==39)c[j>>2]=c[j>>2]|2;E=c[e>>2]|0;o2(B);o2(C);i=D;return E|0}function kaa(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0;f=i;i=i+16|0;g=f;c[g>>2]=e;e=$$(b)|0;b=V0(a,d,g)|0;if(e)$$(e)|0;i=f;return b|0}function laa(b,d,e,f,g,h,j){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;j=j|0;var k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0;y=i;i=i+112|0;l=y;m=(f-e|0)/12|0;if(m>>>0>100){l=w1(m)|0;if(!l)A$();else{w=l;k=l}}else{w=0;k=l}if((e|0)==(f|0))l=0;else{p=e;n=0;o=k;while(1){l=a[p>>0]|0;if(!(l&1))l=(l&255)>>>1;else l=c[p+4>>2]|0;if(!l){a[o>>0]=2;l=n+1|0;m=m+-1|0}else{a[o>>0]=1;l=n}p=p+12|0;if((p|0)==(f|0))break;else{n=l;o=o+1|0}}}u=(e|0)==(f|0);v=(e|0)==(f|0);t=0;q=m;a:while(1){m=c[b>>2]|0;do if(m){n=c[m+12>>2]|0;if((n|0)==(c[m+16>>2]|0))m=rc[c[(c[m>>2]|0)+36>>2]&127](m)|0;else m=c[n>>2]|0;if((m|0)==-1){c[b>>2]=0;p=1;break}else{p=(c[b>>2]|0)==0;break}}else p=1;while(0);n=c[d>>2]|0;if(n){m=c[n+12>>2]|0;if((m|0)==(c[n+16>>2]|0))m=rc[c[(c[n>>2]|0)+36>>2]&127](n)|0;else m=c[m>>2]|0;if((m|0)==-1){c[d>>2]=0;n=0;o=1}else o=0}else{n=0;o=1}m=c[b>>2]|0;if(!((q|0)!=0&(p^o)))break;n=c[m+12>>2]|0;if((n|0)==(c[m+16>>2]|0))m=rc[c[(c[m>>2]|0)+36>>2]&127](m)|0;else m=c[n>>2]|0;if(!j)m=zc[c[(c[g>>2]|0)+28>>2]&255](g,m)|0;s=t+1|0;if(u){m=0;p=q}else{p=0;r=e;o=q;q=k;while(1){do if((a[q>>0]|0)==1){if(!(a[r>>0]&1))n=r+4|0;else n=c[r+8>>2]|0;n=c[n+(t<<2)>>2]|0;if(!j)n=zc[c[(c[g>>2]|0)+28>>2]&255](g,n)|0;if((m|0)!=(n|0)){a[q>>0]=0;n=p;o=o+-1|0;break}n=a[r>>0]|0;if(!(n&1))n=(n&255)>>>1;else n=c[r+4>>2]|0;if((n|0)==(s|0)){a[q>>0]=2;n=1;l=l+1|0;o=o+-1|0}else n=1}else n=p;while(0);r=r+12|0;if((r|0)==(f|0)){m=n;p=o;break}else{p=n;q=q+1|0}}}if(!m){t=s;q=p;continue}m=c[b>>2]|0;n=m+12|0;o=c[n>>2]|0;if((o|0)==(c[m+16>>2]|0))rc[c[(c[m>>2]|0)+40>>2]&127](m)|0;else c[n>>2]=o+4;if((l+p|0)>>>0<2|v){t=s;q=p;continue}else{m=e;o=k}while(1){if((a[o>>0]|0)==2){n=a[m>>0]|0;if(!(n&1))n=(n&255)>>>1;else n=c[m+4>>2]|0;if((n|0)!=(s|0)){a[o>>0]=0;l=l+-1|0}}m=m+12|0;if((m|0)==(f|0)){t=s;q=p;continue a}else o=o+1|0}}do if(m){l=c[m+12>>2]|0;if((l|0)==(c[m+16>>2]|0))l=rc[c[(c[m>>2]|0)+36>>2]&127](m)|0;else l=c[l>>2]|0;if((l|0)==-1){c[b>>2]=0;m=1;break}else{m=(c[b>>2]|0)==0;break}}else m=1;while(0);do if(n){l=c[n+12>>2]|0;if((l|0)==(c[n+16>>2]|0))l=rc[c[(c[n>>2]|0)+36>>2]&127](n)|0;else l=c[l>>2]|0;if((l|0)!=-1)if(m)break;else{x=74;break}else{c[d>>2]=0;x=72;break}}else x=72;while(0);if((x|0)==72?m:0)x=74;if((x|0)==74)c[h>>2]=c[h>>2]|2;b:do if((e|0)==(f|0))x=78;else while(1){if((a[k>>0]|0)==2)break b;e=e+12|0;if((e|0)==(f|0)){x=78;break}else k=k+1|0}while(0);if((x|0)==78){c[h>>2]=c[h>>2]|4;e=f}x1(w);i=y;return e|0}function maa(b,d,e,f,g,h){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;var j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0;z=i;i=i+320|0;r=z+208|0;j=z+200|0;y=z+24|0;x=z+12|0;v=z+8|0;w=z+40|0;t=z+4|0;s=z;u=M9(f)|0;W4(y,f,r,j);c[x>>2]=0;c[x+4>>2]=0;c[x+8>>2]=0;if(!(a[x>>0]&1))b=10;else b=(c[x>>2]&-2)+-1|0;s2(x,b,0);o=x+8|0;p=x+1|0;f=(a[x>>0]&1)==0?p:c[o>>2]|0;c[v>>2]=f;c[t>>2]=w;c[s>>2]=0;q=x+4|0;n=c[j>>2]|0;j=c[d>>2]|0;a:while(1){if(j){b=c[j+12>>2]|0;if((b|0)==(c[j+16>>2]|0))b=rc[c[(c[j>>2]|0)+36>>2]&127](j)|0;else b=c[b>>2]|0;if((b|0)==-1){c[d>>2]=0;j=0;l=1}else l=0}else{j=0;l=1}k=c[e>>2]|0;do if(k){b=c[k+12>>2]|0;if((b|0)==(c[k+16>>2]|0))b=rc[c[(c[k>>2]|0)+36>>2]&127](k)|0;else b=c[b>>2]|0;if((b|0)!=-1)if(l){m=k;break}else break a;else{c[e>>2]=0;A=16;break}}else A=16;while(0);if((A|0)==16){A=0;if(l){k=0;break}else m=0}k=a[x>>0]|0;k=(k&1)==0?(k&255)>>>1:c[q>>2]|0;if((c[v>>2]|0)==(f+k|0)){s2(x,k<<1,0);if(!(a[x>>0]&1))b=10;else b=(c[x>>2]&-2)+-1|0;s2(x,b,0);f=(a[x>>0]&1)==0?p:c[o>>2]|0;c[v>>2]=f+k}k=j+12|0;b=c[k>>2]|0;l=j+16|0;if((b|0)==(c[l>>2]|0))b=rc[c[(c[j>>2]|0)+36>>2]&127](j)|0;else b=c[b>>2]|0;if(S4(b,u,f,v,s,n,y,w,t,r)|0){k=m;break}b=c[k>>2]|0;if((b|0)==(c[l>>2]|0)){rc[c[(c[j>>2]|0)+40>>2]&127](j)|0;continue}else{c[k>>2]=b+4;continue}}r=a[y>>0]|0;b=c[t>>2]|0;if((((r&1)==0?(r&255)>>>1:c[y+4>>2]|0)|0)!=0?(b-w|0)<160:0){r=c[s>>2]|0;s=b+4|0;c[t>>2]=s;c[b>>2]=r;b=s}c[h>>2]=Jba(f,c[v>>2]|0,g,u)|0;B7(y,w,b,g);if(j){b=c[j+12>>2]|0;if((b|0)==(c[j+16>>2]|0))b=rc[c[(c[j>>2]|0)+36>>2]&127](j)|0;else b=c[b>>2]|0;if((b|0)==-1){c[d>>2]=0;f=1}else f=0}else f=1;do if(k){b=c[k+12>>2]|0;if((b|0)==(c[k+16>>2]|0))b=rc[c[(c[k>>2]|0)+36>>2]&127](k)|0;else b=c[b>>2]|0;if((b|0)!=-1)if(f)break;else{A=46;break}else{c[e>>2]=0;A=44;break}}else A=44;while(0);if((A|0)==44?f:0)A=46;if((A|0)==46)c[g>>2]=c[g>>2]|2;A=c[d>>2]|0;o2(x);o2(y);i=z;return A|0}function naa(b,d,e,f,g,h){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;var j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0;z=i;i=i+320|0;r=z+208|0;j=z+200|0;y=z+24|0;x=z+12|0;v=z+8|0;w=z+40|0;t=z+4|0;s=z;u=M9(f)|0;W4(y,f,r,j);c[x>>2]=0;c[x+4>>2]=0;c[x+8>>2]=0;if(!(a[x>>0]&1))b=10;else b=(c[x>>2]&-2)+-1|0;s2(x,b,0);o=x+8|0;p=x+1|0;f=(a[x>>0]&1)==0?p:c[o>>2]|0;c[v>>2]=f;c[t>>2]=w;c[s>>2]=0;q=x+4|0;n=c[j>>2]|0;j=c[d>>2]|0;a:while(1){if(j){b=c[j+12>>2]|0;if((b|0)==(c[j+16>>2]|0))b=rc[c[(c[j>>2]|0)+36>>2]&127](j)|0;else b=c[b>>2]|0;if((b|0)==-1){c[d>>2]=0;j=0;l=1}else l=0}else{j=0;l=1}k=c[e>>2]|0;do if(k){b=c[k+12>>2]|0;if((b|0)==(c[k+16>>2]|0))b=rc[c[(c[k>>2]|0)+36>>2]&127](k)|0;else b=c[b>>2]|0;if((b|0)!=-1)if(l){m=k;break}else break a;else{c[e>>2]=0;A=16;break}}else A=16;while(0);if((A|0)==16){A=0;if(l){k=0;break}else m=0}k=a[x>>0]|0;k=(k&1)==0?(k&255)>>>1:c[q>>2]|0;if((c[v>>2]|0)==(f+k|0)){s2(x,k<<1,0);if(!(a[x>>0]&1))b=10;else b=(c[x>>2]&-2)+-1|0;s2(x,b,0);f=(a[x>>0]&1)==0?p:c[o>>2]|0;c[v>>2]=f+k}k=j+12|0;b=c[k>>2]|0;l=j+16|0;if((b|0)==(c[l>>2]|0))b=rc[c[(c[j>>2]|0)+36>>2]&127](j)|0;else b=c[b>>2]|0;if(S4(b,u,f,v,s,n,y,w,t,r)|0){k=m;break}b=c[k>>2]|0;if((b|0)==(c[l>>2]|0)){rc[c[(c[j>>2]|0)+40>>2]&127](j)|0;continue}else{c[k>>2]=b+4;continue}}r=a[y>>0]|0;b=c[t>>2]|0;if((((r&1)==0?(r&255)>>>1:c[y+4>>2]|0)|0)!=0?(b-w|0)<160:0){r=c[s>>2]|0;s=b+4|0;c[t>>2]=s;c[b>>2]=r;b=s}v=Iba(f,c[v>>2]|0,g,u)|0;c[h>>2]=v;c[h+4>>2]=D;B7(y,w,b,g);if(j){b=c[j+12>>2]|0;if((b|0)==(c[j+16>>2]|0))b=rc[c[(c[j>>2]|0)+36>>2]&127](j)|0;else b=c[b>>2]|0;if((b|0)==-1){c[d>>2]=0;f=1}else f=0}else f=1;do if(k){b=c[k+12>>2]|0;if((b|0)==(c[k+16>>2]|0))b=rc[c[(c[k>>2]|0)+36>>2]&127](k)|0;else b=c[b>>2]|0;if((b|0)!=-1)if(f)break;else{A=46;break}else{c[e>>2]=0;A=44;break}}else A=44;while(0);if((A|0)==44?f:0)A=46;if((A|0)==46)c[g>>2]=c[g>>2]|2;A=c[d>>2]|0;o2(x);o2(y);i=z;return A|0}function oaa(d,e,f,g,h,j){d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;j=j|0;var k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0;A=i;i=i+320|0;s=A+208|0;k=A+200|0;z=A+24|0;y=A+12|0;w=A+8|0;x=A+40|0;u=A+4|0;t=A;v=M9(g)|0;W4(z,g,s,k);c[y>>2]=0;c[y+4>>2]=0;c[y+8>>2]=0;if(!(a[y>>0]&1))d=10;else d=(c[y>>2]&-2)+-1|0;s2(y,d,0);p=y+8|0;q=y+1|0;g=(a[y>>0]&1)==0?q:c[p>>2]|0;c[w>>2]=g;c[u>>2]=x;c[t>>2]=0;r=y+4|0;o=c[k>>2]|0;k=c[e>>2]|0;a:while(1){if(k){d=c[k+12>>2]|0;if((d|0)==(c[k+16>>2]|0))d=rc[c[(c[k>>2]|0)+36>>2]&127](k)|0;else d=c[d>>2]|0;if((d|0)==-1){c[e>>2]=0;k=0;m=1}else m=0}else{k=0;m=1}l=c[f>>2]|0;do if(l){d=c[l+12>>2]|0;if((d|0)==(c[l+16>>2]|0))d=rc[c[(c[l>>2]|0)+36>>2]&127](l)|0;else d=c[d>>2]|0;if((d|0)!=-1)if(m){n=l;break}else break a;else{c[f>>2]=0;B=16;break}}else B=16;while(0);if((B|0)==16){B=0;if(m){l=0;break}else n=0}l=a[y>>0]|0;l=(l&1)==0?(l&255)>>>1:c[r>>2]|0;if((c[w>>2]|0)==(g+l|0)){s2(y,l<<1,0);if(!(a[y>>0]&1))d=10;else d=(c[y>>2]&-2)+-1|0;s2(y,d,0);g=(a[y>>0]&1)==0?q:c[p>>2]|0;c[w>>2]=g+l}l=k+12|0;d=c[l>>2]|0;m=k+16|0;if((d|0)==(c[m>>2]|0))d=rc[c[(c[k>>2]|0)+36>>2]&127](k)|0;else d=c[d>>2]|0;if(S4(d,v,g,w,t,o,z,x,u,s)|0){l=n;break}d=c[l>>2]|0;if((d|0)==(c[m>>2]|0)){rc[c[(c[k>>2]|0)+40>>2]&127](k)|0;continue}else{c[l>>2]=d+4;continue}}s=a[z>>0]|0;d=c[u>>2]|0;if((((s&1)==0?(s&255)>>>1:c[z+4>>2]|0)|0)!=0?(d-x|0)<160:0){s=c[t>>2]|0;t=d+4|0;c[u>>2]=t;c[d>>2]=s;d=t}b[j>>1]=Hba(g,c[w>>2]|0,h,v)|0;B7(z,x,d,h);if(k){d=c[k+12>>2]|0;if((d|0)==(c[k+16>>2]|0))d=rc[c[(c[k>>2]|0)+36>>2]&127](k)|0;else d=c[d>>2]|0;if((d|0)==-1){c[e>>2]=0;g=1}else g=0}else g=1;do if(l){d=c[l+12>>2]|0;if((d|0)==(c[l+16>>2]|0))d=rc[c[(c[l>>2]|0)+36>>2]&127](l)|0;else d=c[d>>2]|0;if((d|0)!=-1)if(g)break;else{B=46;break}else{c[f>>2]=0;B=44;break}}else B=44;while(0);if((B|0)==44?g:0)B=46;if((B|0)==46)c[h>>2]=c[h>>2]|2;B=c[e>>2]|0;o2(y);o2(z);i=A;return B|0}function paa(b,d,e,f,g,h){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;var j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0;z=i;i=i+320|0;r=z+208|0;j=z+200|0;y=z+24|0;x=z+12|0;v=z+8|0;w=z+40|0;t=z+4|0;s=z;u=M9(f)|0;W4(y,f,r,j);c[x>>2]=0;c[x+4>>2]=0;c[x+8>>2]=0;if(!(a[x>>0]&1))b=10;else b=(c[x>>2]&-2)+-1|0;s2(x,b,0);o=x+8|0;p=x+1|0;f=(a[x>>0]&1)==0?p:c[o>>2]|0;c[v>>2]=f;c[t>>2]=w;c[s>>2]=0;q=x+4|0;n=c[j>>2]|0;j=c[d>>2]|0;a:while(1){if(j){b=c[j+12>>2]|0;if((b|0)==(c[j+16>>2]|0))b=rc[c[(c[j>>2]|0)+36>>2]&127](j)|0;else b=c[b>>2]|0;if((b|0)==-1){c[d>>2]=0;j=0;l=1}else l=0}else{j=0;l=1}k=c[e>>2]|0;do if(k){b=c[k+12>>2]|0;if((b|0)==(c[k+16>>2]|0))b=rc[c[(c[k>>2]|0)+36>>2]&127](k)|0;else b=c[b>>2]|0;if((b|0)!=-1)if(l){m=k;break}else break a;else{c[e>>2]=0;A=16;break}}else A=16;while(0);if((A|0)==16){A=0;if(l){k=0;break}else m=0}k=a[x>>0]|0;k=(k&1)==0?(k&255)>>>1:c[q>>2]|0;if((c[v>>2]|0)==(f+k|0)){s2(x,k<<1,0);if(!(a[x>>0]&1))b=10;else b=(c[x>>2]&-2)+-1|0;s2(x,b,0);f=(a[x>>0]&1)==0?p:c[o>>2]|0;c[v>>2]=f+k}k=j+12|0;b=c[k>>2]|0;l=j+16|0;if((b|0)==(c[l>>2]|0))b=rc[c[(c[j>>2]|0)+36>>2]&127](j)|0;else b=c[b>>2]|0;if(S4(b,u,f,v,s,n,y,w,t,r)|0){k=m;break}b=c[k>>2]|0;if((b|0)==(c[l>>2]|0)){rc[c[(c[j>>2]|0)+40>>2]&127](j)|0;continue}else{c[k>>2]=b+4;continue}}r=a[y>>0]|0;b=c[t>>2]|0;if((((r&1)==0?(r&255)>>>1:c[y+4>>2]|0)|0)!=0?(b-w|0)<160:0){r=c[s>>2]|0;s=b+4|0;c[t>>2]=s;c[b>>2]=r;b=s}c[h>>2]=Gba(f,c[v>>2]|0,g,u)|0;B7(y,w,b,g);if(j){b=c[j+12>>2]|0;if((b|0)==(c[j+16>>2]|0))b=rc[c[(c[j>>2]|0)+36>>2]&127](j)|0;else b=c[b>>2]|0;if((b|0)==-1){c[d>>2]=0;f=1}else f=0}else f=1;do if(k){b=c[k+12>>2]|0;if((b|0)==(c[k+16>>2]|0))b=rc[c[(c[k>>2]|0)+36>>2]&127](k)|0;else b=c[b>>2]|0;if((b|0)!=-1)if(f)break;else{A=46;break}else{c[e>>2]=0;A=44;break}}else A=44;while(0);if((A|0)==44?f:0)A=46;if((A|0)==46)c[g>>2]=c[g>>2]|2;A=c[d>>2]|0;o2(x);o2(y);i=z;return A|0}function qaa(b,d,e,f,g,h){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;var j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0;z=i;i=i+320|0;r=z+208|0;j=z+200|0;y=z+24|0;x=z+12|0;v=z+8|0;w=z+40|0;t=z+4|0;s=z;u=M9(f)|0;W4(y,f,r,j);c[x>>2]=0;c[x+4>>2]=0;c[x+8>>2]=0;if(!(a[x>>0]&1))b=10;else b=(c[x>>2]&-2)+-1|0;s2(x,b,0);o=x+8|0;p=x+1|0;f=(a[x>>0]&1)==0?p:c[o>>2]|0;c[v>>2]=f;c[t>>2]=w;c[s>>2]=0;q=x+4|0;n=c[j>>2]|0;j=c[d>>2]|0;a:while(1){if(j){b=c[j+12>>2]|0;if((b|0)==(c[j+16>>2]|0))b=rc[c[(c[j>>2]|0)+36>>2]&127](j)|0;else b=c[b>>2]|0;if((b|0)==-1){c[d>>2]=0;j=0;l=1}else l=0}else{j=0;l=1}k=c[e>>2]|0;do if(k){b=c[k+12>>2]|0;if((b|0)==(c[k+16>>2]|0))b=rc[c[(c[k>>2]|0)+36>>2]&127](k)|0;else b=c[b>>2]|0;if((b|0)!=-1)if(l){m=k;break}else break a;else{c[e>>2]=0;A=16;break}}else A=16;while(0);if((A|0)==16){A=0;if(l){k=0;break}else m=0}k=a[x>>0]|0;k=(k&1)==0?(k&255)>>>1:c[q>>2]|0;if((c[v>>2]|0)==(f+k|0)){s2(x,k<<1,0);if(!(a[x>>0]&1))b=10;else b=(c[x>>2]&-2)+-1|0;s2(x,b,0);f=(a[x>>0]&1)==0?p:c[o>>2]|0;c[v>>2]=f+k}k=j+12|0;b=c[k>>2]|0;l=j+16|0;if((b|0)==(c[l>>2]|0))b=rc[c[(c[j>>2]|0)+36>>2]&127](j)|0;else b=c[b>>2]|0;if(S4(b,u,f,v,s,n,y,w,t,r)|0){k=m;break}b=c[k>>2]|0;if((b|0)==(c[l>>2]|0)){rc[c[(c[j>>2]|0)+40>>2]&127](j)|0;continue}else{c[k>>2]=b+4;continue}}r=a[y>>0]|0;b=c[t>>2]|0;if((((r&1)==0?(r&255)>>>1:c[y+4>>2]|0)|0)!=0?(b-w|0)<160:0){r=c[s>>2]|0;s=b+4|0;c[t>>2]=s;c[b>>2]=r;b=s}c[h>>2]=Fba(f,c[v>>2]|0,g,u)|0;B7(y,w,b,g);if(j){b=c[j+12>>2]|0;if((b|0)==(c[j+16>>2]|0))b=rc[c[(c[j>>2]|0)+36>>2]&127](j)|0;else b=c[b>>2]|0;if((b|0)==-1){c[d>>2]=0;f=1}else f=0}else f=1;do if(k){b=c[k+12>>2]|0;if((b|0)==(c[k+16>>2]|0))b=rc[c[(c[k>>2]|0)+36>>2]&127](k)|0;else b=c[b>>2]|0;if((b|0)!=-1)if(f)break;else{A=46;break}else{c[e>>2]=0;A=44;break}}else A=44;while(0);if((A|0)==44?f:0)A=46;if((A|0)==46)c[g>>2]=c[g>>2]|2;A=c[d>>2]|0;o2(x);o2(y);i=z;return A|0} +function cH(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0;g=c[b>>2]|0;c[a>>2]=g;i=a+4|0;c[i>>2]=c[b+68>>2];c[a+(c[g+-12>>2]|0)>>2]=c[b+72>>2];g=a+8|0;c[g>>2]=c[b+76>>2];e=a+12|0;c[e>>2]=c[b+80>>2];d=a+16|0;c[d>>2]=c[b+84>>2];f=a+20|0;c[f>>2]=c[b+88>>2];ZG(a+140|0,c[a+144>>2]|0);ZG(a+128|0,c[a+132>>2]|0);h=c[b+4>>2]|0;c[i>>2]=h;c[i+(c[h+-16>>2]|0)>>2]=c[b+48>>2];c[g>>2]=c[b+52>>2];c[e>>2]=c[b+56>>2];c[d>>2]=c[b+60>>2];c[f>>2]=c[b+64>>2];f=a+24|0;pG(f);d=a+28|0;b=c[d>>2]|0;e=a+32|0;a=c[e>>2]|0;if((b|0)!=(a|0)){do{P_(c[b>>2]|0);b=b+4|0}while((b|0)!=(a|0));b=c[d>>2]|0;a=c[e>>2]|0;if((a|0)!=(b|0))c[e>>2]=a+(~((a+-4-b|0)>>>2)<<2)}b=c[f>>2]|0;if(!b)return;P_(b);return}function dH(b){b=b|0;var d=0,e=0,f=0;d=b+4|0;c[b>>2]=33388;e=c[9909]|0;c[d>>2]=e;c[d+(c[e+-16>>2]|0)>>2]=c[9910];e=b+8|0;f=c[9911]|0;c[e>>2]=f;c[e+(c[f+-16>>2]|0)>>2]=c[9912];f=b+12|0;e=c[9913]|0;c[f>>2]=e;c[f+(c[e+-16>>2]|0)>>2]=c[9914];e=b+16|0;f=c[9915]|0;c[e>>2]=f;c[e+(c[f+-16>>2]|0)>>2]=c[9916];f=b+20|0;e=c[9917]|0;c[f>>2]=e;c[f+(c[e+-16>>2]|0)>>2]=c[9918];e=c[9908]|0;c[d>>2]=e;c[d+(c[e+-16>>2]|0)>>2]=c[9919];e=b+24|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[b>>2]=60;c[b+4>>2]=116;c[b+8>>2]=208;c[b+12>>2]=240;c[b+16>>2]=272;c[b+20>>2]=304;kM(b+48|0,0,1);e=b+56|0;d=c[10958]|0;c[e>>2]=d;c[e+(c[d+-16>>2]|0)>>2]=c[10959];d=b+60|0;f=c[10960]|0;c[d>>2]=f;c[d+(c[f+-16>>2]|0)>>2]=c[10961];f=b+64|0;d=c[10962]|0;c[f>>2]=d;c[f+(c[d+-16>>2]|0)>>2]=c[10963];c[e>>2]=1360;c[b+60>>2]=1428;c[b+64>>2]=1460;kM(b+68|0,0,1);kM(b+76|0,0,1);kM(b+84|0,0,1);kM(b+96|0,0,1);c[b+108>>2]=12880;d=b+112|0;c[d>>2]=0;a[b+116>>0]=0;c[d>>2]=e+(c[(c[e>>2]|0)+-16>>2]|0);c[b+132>>2]=0;c[b+136>>2]=0;c[b+128>>2]=b+132;c[b+144>>2]=0;c[b+148>>2]=0;c[b+140>>2]=b+144;d=b+(c[(c[b>>2]|0)+-12>>2]|0)|0;c[b+152>>2]=12880;c[b+156>>2]=d;a[b+160>>0]=0;return}function eH(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0;c[b>>2]=33388;j=b+4|0;i=c[d+12>>2]|0;c[j>>2]=i;c[j+(c[i+-16>>2]|0)>>2]=c[d+16>>2];i=b+8|0;h=c[d+20>>2]|0;c[i>>2]=h;c[i+(c[h+-16>>2]|0)>>2]=c[d+24>>2];h=b+12|0;g=c[d+28>>2]|0;c[h>>2]=g;c[h+(c[g+-16>>2]|0)>>2]=c[d+32>>2];g=b+16|0;f=c[d+36>>2]|0;c[g>>2]=f;c[g+(c[f+-16>>2]|0)>>2]=c[d+40>>2];f=b+20|0;k=c[d+44>>2]|0;c[f>>2]=k;c[f+(c[k+-16>>2]|0)>>2]=c[d+48>>2];k=c[d+8>>2]|0;c[j>>2]=k;c[j+(c[k+-16>>2]|0)>>2]=c[d+52>>2];c[i>>2]=c[d+56>>2];c[h>>2]=c[d+60>>2];c[g>>2]=c[d+64>>2];c[f>>2]=c[d+68>>2];k=b+24|0;c[k>>2]=0;c[k+4>>2]=0;c[k+8>>2]=0;c[k+12>>2]=0;c[k+16>>2]=0;c[k+20>>2]=0;k=c[d+4>>2]|0;c[b>>2]=k;c[j>>2]=c[d+72>>2];c[b+(c[k+-12>>2]|0)>>2]=c[d+76>>2];c[i>>2]=c[d+80>>2];c[h>>2]=c[d+84>>2];c[g>>2]=c[d+88>>2];c[f>>2]=c[d+92>>2];c[b+52>>2]=e;c[b+56>>2]=12880;e=b+60|0;c[e>>2]=0;a[b+64>>0]=0;c[e>>2]=b+(c[(c[b>>2]|0)+-12>>2]|0);e=c[d>>2]|0;c[b>>2]=e;c[j>>2]=c[d+96>>2];c[b+(c[e+-12>>2]|0)>>2]=c[d+100>>2];c[i>>2]=c[d+104>>2];c[h>>2]=c[d+108>>2];c[g>>2]=c[d+112>>2];c[f>>2]=c[d+116>>2];c[b+84>>2]=33872;a[b+100>>0]=1;c[b+104>>2]=33872;a[b+120>>0]=1;return}function fH(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0;q=i;i=i+96|0;p=q+24|0;l=q+8|0;f=q+4|0;j=q;h=c[b+52>>2]|0;o=c[11306]|0;c[p>>2]=o;c[p+(c[o+-16>>2]|0)>>2]=c[11307];o=p+4|0;m=c[11308]|0;c[o>>2]=m;c[o+(c[m+-16>>2]|0)>>2]=c[11309];m=p+8|0;n=c[11310]|0;c[m>>2]=n;c[m+(c[n+-16>>2]|0)>>2]=c[11311];c[p>>2]=45116;c[p+4>>2]=45172;c[p+8>>2]=45204;n=p+20|0;c[n>>2]=0;c[n+4>>2]=0;c[n+8>>2]=0;c[n+12>>2]=0;c[p+48>>2]=h;c[p+60>>2]=12880;a[p+68>>0]=0;c[p+64>>2]=p+(c[11275]|0);h=l+4|0;c[h>>2]=0;n=l+8|0;c[n>>2]=0;c[l+12>>2]=0;c[l>>2]=33856;e=c[e>>2]|0;c[f>>2]=e;if((e|0)!=0?(r=e+((c[(c[e>>2]|0)+-12>>2]|0)+4)|0,e=(c[r>>2]|0)+1|0,c[r>>2]=e,(e|0)==0):0)Ha(79054,79014,48,79068);tW(p,f,0,l+4|0);e=c[f>>2]|0;if((e|0)!=0?(f=c[(c[e>>2]|0)+-12>>2]|0,g=e+f|0,f=e+(f+4)|0,r=(c[f>>2]|0)+-1|0,c[f>>2]=r,!((g|0)==0|(r|0)!=0)):0)oc[c[(c[g>>2]|0)+4>>2]&2047](g);e=c[d>>2]|0;c[j>>2]=e;if((e|0)!=0?(d=e+((c[(c[e>>2]|0)+-12>>2]|0)+4)|0,r=(c[d>>2]|0)+1|0,c[d>>2]=r,(r|0)==0):0)Ha(79054,79014,48,79068);h=c[h>>2]|0;e=h;r=c[n>>2]|0;g=r;c[b+88>>2]=e;c[b+92>>2]=e;c[b+96>>2]=g;a[b+100>>0]=(h|0)!=(r|0)&1;c[b+108>>2]=g;c[b+112>>2]=e;c[b+116>>2]=g;a[b+120>>0]=0;g=vP(b,j)|0;e=c[j>>2]|0;if((e|0)!=0?(j=c[(c[e>>2]|0)+-12>>2]|0,k=e+j|0,j=e+(j+4)|0,r=(c[j>>2]|0)+-1|0,c[j>>2]=r,!((k|0)==0|(r|0)!=0)):0)oc[c[(c[k>>2]|0)+4>>2]&2047](k);if(g){f=o$(g,1576,8200,0)|0;if((f|0)!=0?(k=f+((c[(c[f>>2]|0)+-12>>2]|0)+4)|0,r=(c[k>>2]|0)+1|0,c[k>>2]=r,(r|0)==0):0)Ha(79054,79014,48,79068);k=c[(c[g>>2]|0)+-12>>2]|0;e=g+k|0;k=g+(k+4)|0;r=(c[k>>2]|0)+-1|0;c[k>>2]=r;if((e|0)==0|(r|0)!=0)d=f;else{oc[c[(c[e>>2]|0)+4>>2]&2047](e);d=f}}else d=0;e=l+4|0;f=c[e>>2]|0;if(!f){r=c[11305]|0;c[p>>2]=r;n=c[11312]|0;r=r+-16|0;r=c[r>>2]|0;r=p+r|0;c[r>>2]=n;r=c[11313]|0;c[o>>2]=r;r=c[11314]|0;c[m>>2]=r;r=p+24|0;o2(r);i=q;return d|0}while(1){g=c[n>>2]|0;if((g|0)==(f|0))break;r=g+-20|0;c[n>>2]=r;o2(r)}P_(c[e>>2]|0);r=c[11305]|0;c[p>>2]=r;n=c[11312]|0;r=r+-16|0;r=c[r>>2]|0;r=p+r|0;c[r>>2]=n;r=c[11313]|0;c[o>>2]=r;r=c[11314]|0;c[m>>2]=r;r=p+24|0;o2(r);i=q;return d|0}function gH(a){a=a|0;var b=0,d=0,e=0,f=0,g=0;g=c[10856]|0;c[a>>2]=g;c[a+(c[g+-16>>2]|0)>>2]=c[10867];c[a+4>>2]=c[10868];c[a+8>>2]=c[10869];c[a+12>>2]=c[10870];c[a+16>>2]=c[10871];g=a+20|0;pG(g);e=a+24|0;b=c[e>>2]|0;f=a+28|0;d=c[f>>2]|0;if((b|0)!=(d|0)){a=b;do{P_(c[a>>2]|0);a=a+4|0}while((a|0)!=(d|0));a=c[e>>2]|0;b=c[f>>2]|0;if((b|0)!=(a|0))c[f>>2]=b+(~((b+-4-a|0)>>>2)<<2)}a=c[g>>2]|0;if(!a)return;P_(a);return}function hH(a){a=a|0;var b=0,d=0,e=0,f=0,g=0;f=c[10856]|0;c[a>>2]=f;c[a+(c[f+-16>>2]|0)>>2]=c[10867];c[a+4>>2]=c[10868];c[a+8>>2]=c[10869];c[a+12>>2]=c[10870];c[a+16>>2]=c[10871];f=a+20|0;pG(f);d=a+24|0;b=c[d>>2]|0;g=a+28|0;e=c[g>>2]|0;if((b|0)!=(e|0)){do{P_(c[b>>2]|0);b=b+4|0}while((b|0)!=(e|0));b=c[d>>2]|0;d=c[g>>2]|0;if((d|0)!=(b|0))c[g>>2]=d+(~((d+-4-b|0)>>>2)<<2)}b=c[f>>2]|0;if(!b){P_(a);return}P_(b);P_(a);return}function iH(a,b){a=a|0;b=b|0;return}function jH(a){a=a|0;return 1}function kH(a){a=a|0;var b=0,d=0,e=0,f=0;f=a+-4|0;e=c[10856]|0;c[f>>2]=e;c[f+(c[e+-16>>2]|0)>>2]=c[10867];c[f+4>>2]=c[10868];c[f+8>>2]=c[10869];c[f+12>>2]=c[10870];c[f+16>>2]=c[10871];e=f+20|0;pG(e);b=f+24|0;a=c[b>>2]|0;f=f+28|0;d=c[f>>2]|0;if((a|0)!=(d|0)){do{P_(c[a>>2]|0);a=a+4|0}while((a|0)!=(d|0));a=c[b>>2]|0;b=c[f>>2]|0;if((b|0)!=(a|0))c[f>>2]=b+(~((b+-4-a|0)>>>2)<<2)}a=c[e>>2]|0;if(!a)return;P_(a);return}function lH(a){a=a|0;hH(a+-4|0);return}function mH(a){a=a|0;var b=0,d=0,e=0,f=0;f=a+-8|0;e=c[10856]|0;c[f>>2]=e;c[f+(c[e+-16>>2]|0)>>2]=c[10867];c[f+4>>2]=c[10868];c[f+8>>2]=c[10869];c[f+12>>2]=c[10870];c[f+16>>2]=c[10871];e=f+20|0;pG(e);b=f+24|0;a=c[b>>2]|0;f=f+28|0;d=c[f>>2]|0;if((a|0)!=(d|0)){do{P_(c[a>>2]|0);a=a+4|0}while((a|0)!=(d|0));a=c[b>>2]|0;b=c[f>>2]|0;if((b|0)!=(a|0))c[f>>2]=b+(~((b+-4-a|0)>>>2)<<2)}a=c[e>>2]|0;if(!a)return;P_(a);return}function nH(a){a=a|0;hH(a+-8|0);return}function oH(a){a=a|0;var b=0,d=0,e=0,f=0;f=a+-12|0;e=c[10856]|0;c[f>>2]=e;c[f+(c[e+-16>>2]|0)>>2]=c[10867];c[f+4>>2]=c[10868];c[f+8>>2]=c[10869];c[f+12>>2]=c[10870];c[f+16>>2]=c[10871];e=f+20|0;pG(e);b=f+24|0;a=c[b>>2]|0;f=f+28|0;d=c[f>>2]|0;if((a|0)!=(d|0)){do{P_(c[a>>2]|0);a=a+4|0}while((a|0)!=(d|0));a=c[b>>2]|0;b=c[f>>2]|0;if((b|0)!=(a|0))c[f>>2]=b+(~((b+-4-a|0)>>>2)<<2)}a=c[e>>2]|0;if(!a)return;P_(a);return}function pH(a){a=a|0;hH(a+-12|0);return}function qH(a){a=a|0;var b=0,d=0,e=0,f=0;f=a+-16|0;e=c[10856]|0;c[f>>2]=e;c[f+(c[e+-16>>2]|0)>>2]=c[10867];c[f+4>>2]=c[10868];c[f+8>>2]=c[10869];c[f+12>>2]=c[10870];c[f+16>>2]=c[10871];e=f+20|0;pG(e);b=f+24|0;a=c[b>>2]|0;f=f+28|0;d=c[f>>2]|0;if((a|0)!=(d|0)){do{P_(c[a>>2]|0);a=a+4|0}while((a|0)!=(d|0));a=c[b>>2]|0;b=c[f>>2]|0;if((b|0)!=(a|0))c[f>>2]=b+(~((b+-4-a|0)>>>2)<<2)}a=c[e>>2]|0;if(!a)return;P_(a);return}function rH(a){a=a|0;hH(a+-16|0);return}function sH(a){a=a|0;var b=0,d=0,e=0;d=a+4|0;e=c[d>>2]|0;if(!e)return;a=a+8|0;while(1){b=c[a>>2]|0;if((b|0)==(e|0))break;b=b+-20|0;c[a>>2]=b;o2(b)}P_(c[d>>2]|0);return}function tH(a){a=a|0;var b=0,d=0,e=0,f=0;b=a+4|0;d=c[b>>2]|0;if(!d){P_(a);return}e=a+8|0;while(1){f=c[e>>2]|0;if((f|0)==(d|0))break;f=f+-20|0;c[e>>2]=f;o2(f)}P_(c[b>>2]|0);P_(a);return}function uH(a){a=a|0;var b=0,d=0,e=0,f=0,g=0;c[a+4>>2]=1136;c[a+8>>2]=1228;c[a+12>>2]=1260;c[a+16>>2]=1292;c[a+20>>2]=1324;g=a+24|0;pG(g);e=a+28|0;b=c[e>>2]|0;f=a+32|0;d=c[f>>2]|0;if((b|0)!=(d|0)){a=b;do{P_(c[a>>2]|0);a=a+4|0}while((a|0)!=(d|0));a=c[e>>2]|0;b=c[f>>2]|0;if((b|0)!=(a|0))c[f>>2]=b+(~((b+-4-a|0)>>>2)<<2)}a=c[g>>2]|0;if(!a)return;P_(a);return}function vH(a){a=a|0;var b=0,d=0,e=0,f=0,g=0;c[a+4>>2]=1136;c[a+8>>2]=1228;c[a+12>>2]=1260;c[a+16>>2]=1292;c[a+20>>2]=1324;f=a+24|0;pG(f);d=a+28|0;b=c[d>>2]|0;g=a+32|0;e=c[g>>2]|0;if((b|0)!=(e|0)){do{P_(c[b>>2]|0);b=b+4|0}while((b|0)!=(e|0));b=c[d>>2]|0;d=c[g>>2]|0;if((d|0)!=(b|0))c[g>>2]=d+(~((d+-4-b|0)>>>2)<<2)}b=c[f>>2]|0;if(!b){P_(a);return}P_(b);P_(a);return}function wH(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,j=0,k=0;k=i;i=i+32|0;h=k+20|0;j=k;g=zc[c[(c[b>>2]|0)+36>>2]&255](b,d)|0;c[h>>2]=g;if(!g){i=k;return}e=c[b+88>>2]|0;if((e|0)==(c[b+108>>2]|0)){pc[c[(c[b>>2]|0)+32>>2]&1023](b,h);b=b+4|0;Dc[c[(c[b>>2]|0)+56>>2]&63](b,h,0)}else{k2(j,e);e=e+12|0;f=c[e+4>>2]|0;g=j+12|0;c[g>>2]=c[e>>2];c[g+4>>2]=f;do if(!(a[b+48>>0]|0)){Hc[c[(c[b>>2]|0)+16>>2]&15](b,h,j,b+72|0);f=b+4|0;Dc[c[(c[f>>2]|0)+56>>2]&63](f,h,0);f=b+88|0;g=b+100|0;e=c[f>>2]|0;if(!(a[g>>0]|0)){e=e+-20|0;if((e|0)==(c[b+92>>2]|0)){c[f>>2]=e;a[g>>0]=1;break}else{c[f>>2]=e;break}}else{d=e+20|0;if((d|0)==(c[b+96>>2]|0)){c[f>>2]=e+-20;a[g>>0]=0;break}else{c[f>>2]=d;break}}}else pc[c[(c[b>>2]|0)+28>>2]&1023](b,d);while(0);o2(j)}e=c[h>>2]|0;if(!e){i=k;return}j=c[(c[e>>2]|0)+-12>>2]|0;d=e+j|0;j=e+(j+4)|0;b=(c[j>>2]|0)+-1|0;c[j>>2]=b;if((d|0)==0|(b|0)!=0){i=k;return}oc[c[(c[d>>2]|0)+4>>2]&2047](d);i=k;return}function xH(a,b){a=a|0;b=b|0;Dc[c[(c[a>>2]|0)+20>>2]&63](a,b,(c[a+88>>2]|0)==(c[a+108>>2]|0));return}function yH(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,j=0,k=0;h=i;i=i+32|0;e=h;f=c[b+88>>2]|0;g=c[(c[b>>2]|0)+24>>2]|0;if((f|0)==(c[b+108>>2]|0)){Hc[g&15](b,d,0,1);i=h;return}k2(e,f);k=f+12|0;j=c[k+4>>2]|0;f=e+12|0;c[f>>2]=c[k>>2];c[f+4>>2]=j;f=DW(e)|0;Hc[g&15](b,d,f,0);o2(e);g=b+88|0;d=b+100|0;e=c[g>>2]|0;if(!(a[d>>0]|0)){e=e+-20|0;if((e|0)==(c[b+92>>2]|0)){c[g>>2]=e;a[d>>0]=1;i=h;return}else{c[g>>2]=e;i=h;return}}else{f=e+20|0;if((f|0)==(c[b+96>>2]|0)){c[g>>2]=e+-20;a[d>>0]=0;i=h;return}else{c[g>>2]=f;i=h;return}}}function zH(a){a=a|0;var b=0,d=0,e=0,f=0;f=a+-4|0;c[f+4>>2]=1136;c[f+8>>2]=1228;c[f+12>>2]=1260;c[f+16>>2]=1292;c[f+20>>2]=1324;e=f+24|0;pG(e);d=f+28|0;a=c[d>>2]|0;f=f+32|0;b=c[f>>2]|0;if((a|0)!=(b|0)){do{P_(c[a>>2]|0);a=a+4|0}while((a|0)!=(b|0));a=c[d>>2]|0;b=c[f>>2]|0;if((b|0)!=(a|0))c[f>>2]=b+(~((b+-4-a|0)>>>2)<<2)}a=c[e>>2]|0;if(!a)return;P_(a);return}function AH(a){a=a|0;var b=0,d=0,e=0,f=0,g=0;g=a+-4|0;c[g+4>>2]=1136;c[g+8>>2]=1228;c[g+12>>2]=1260;c[g+16>>2]=1292;c[g+20>>2]=1324;e=g+24|0;pG(e);d=g+28|0;a=c[d>>2]|0;f=g+32|0;b=c[f>>2]|0;if((a|0)!=(b|0)){do{P_(c[a>>2]|0);a=a+4|0}while((a|0)!=(b|0));a=c[d>>2]|0;b=c[f>>2]|0;if((b|0)!=(a|0))c[f>>2]=b+(~((b+-4-a|0)>>>2)<<2)}a=c[e>>2]|0;if(!a){P_(g);return}P_(a);P_(g);return}function BH(a,b){a=a|0;b=b|0;a=a+-4|0;Dc[c[(c[a>>2]|0)+20>>2]&63](a,b,(c[a+88>>2]|0)==(c[a+108>>2]|0));return}function CH(a,b){a=a|0;b=b|0;wH(a+-4|0,b);return}function DH(a,b){a=a|0;b=b|0;yH(a+-4|0,b);return}function EH(a){a=a|0;var b=0,d=0,e=0,f=0;f=a+-8|0;c[f+4>>2]=1136;c[f+8>>2]=1228;c[f+12>>2]=1260;c[f+16>>2]=1292;c[f+20>>2]=1324;e=f+24|0;pG(e);d=f+28|0;a=c[d>>2]|0;f=f+32|0;b=c[f>>2]|0;if((a|0)!=(b|0)){do{P_(c[a>>2]|0);a=a+4|0}while((a|0)!=(b|0));a=c[d>>2]|0;b=c[f>>2]|0;if((b|0)!=(a|0))c[f>>2]=b+(~((b+-4-a|0)>>>2)<<2)}a=c[e>>2]|0;if(!a)return;P_(a);return}function FH(a){a=a|0;var b=0,d=0,e=0,f=0,g=0;g=a+-8|0;c[g+4>>2]=1136;c[g+8>>2]=1228;c[g+12>>2]=1260;c[g+16>>2]=1292;c[g+20>>2]=1324;e=g+24|0;pG(e);d=g+28|0;a=c[d>>2]|0;f=g+32|0;b=c[f>>2]|0;if((a|0)!=(b|0)){do{P_(c[a>>2]|0);a=a+4|0}while((a|0)!=(b|0));a=c[d>>2]|0;b=c[f>>2]|0;if((b|0)!=(a|0))c[f>>2]=b+(~((b+-4-a|0)>>>2)<<2)}a=c[e>>2]|0;if(!a){P_(g);return}P_(a);P_(g);return}function GH(a){a=a|0;var b=0,d=0,e=0,f=0;f=a+-12|0;c[f+4>>2]=1136;c[f+8>>2]=1228;c[f+12>>2]=1260;c[f+16>>2]=1292;c[f+20>>2]=1324;e=f+24|0;pG(e);d=f+28|0;a=c[d>>2]|0;f=f+32|0;b=c[f>>2]|0;if((a|0)!=(b|0)){do{P_(c[a>>2]|0);a=a+4|0}while((a|0)!=(b|0));a=c[d>>2]|0;b=c[f>>2]|0;if((b|0)!=(a|0))c[f>>2]=b+(~((b+-4-a|0)>>>2)<<2)}a=c[e>>2]|0;if(!a)return;P_(a);return}function HH(a){a=a|0;var b=0,d=0,e=0,f=0,g=0;g=a+-12|0;c[g+4>>2]=1136;c[g+8>>2]=1228;c[g+12>>2]=1260;c[g+16>>2]=1292;c[g+20>>2]=1324;e=g+24|0;pG(e);d=g+28|0;a=c[d>>2]|0;f=g+32|0;b=c[f>>2]|0;if((a|0)!=(b|0)){do{P_(c[a>>2]|0);a=a+4|0}while((a|0)!=(b|0));a=c[d>>2]|0;b=c[f>>2]|0;if((b|0)!=(a|0))c[f>>2]=b+(~((b+-4-a|0)>>>2)<<2)}a=c[e>>2]|0;if(!a){P_(g);return}P_(a);P_(g);return}function IH(a,b){a=a|0;b=b|0;a=a+-12|0;Dc[c[(c[a>>2]|0)+20>>2]&63](a,b,(c[a+88>>2]|0)==(c[a+108>>2]|0));return}function JH(a,b){a=a|0;b=b|0;yH(a+-12|0,b);return}function KH(a){a=a|0;var b=0,d=0,e=0,f=0;f=a+-16|0;c[f+4>>2]=1136;c[f+8>>2]=1228;c[f+12>>2]=1260;c[f+16>>2]=1292;c[f+20>>2]=1324;e=f+24|0;pG(e);d=f+28|0;a=c[d>>2]|0;f=f+32|0;b=c[f>>2]|0;if((a|0)!=(b|0)){do{P_(c[a>>2]|0);a=a+4|0}while((a|0)!=(b|0));a=c[d>>2]|0;b=c[f>>2]|0;if((b|0)!=(a|0))c[f>>2]=b+(~((b+-4-a|0)>>>2)<<2)}a=c[e>>2]|0;if(!a)return;P_(a);return}function LH(a){a=a|0;var b=0,d=0,e=0,f=0,g=0;g=a+-16|0;c[g+4>>2]=1136;c[g+8>>2]=1228;c[g+12>>2]=1260;c[g+16>>2]=1292;c[g+20>>2]=1324;e=g+24|0;pG(e);d=g+28|0;a=c[d>>2]|0;f=g+32|0;b=c[f>>2]|0;if((a|0)!=(b|0)){do{P_(c[a>>2]|0);a=a+4|0}while((a|0)!=(b|0));a=c[d>>2]|0;b=c[f>>2]|0;if((b|0)!=(a|0))c[f>>2]=b+(~((b+-4-a|0)>>>2)<<2)}a=c[e>>2]|0;if(!a){P_(g);return}P_(a);P_(g);return}function MH(a,b){a=a|0;b=b|0;wH(a+-16|0,b);return}function NH(a){a=a|0;var b=0,d=0,e=0,f=0;f=a+-20|0;c[a+-16>>2]=1136;c[a+-12>>2]=1228;c[a+-8>>2]=1260;c[a+-4>>2]=1292;c[f+20>>2]=1324;e=f+24|0;pG(e);d=f+28|0;a=c[d>>2]|0;f=f+32|0;b=c[f>>2]|0;if((a|0)!=(b|0)){do{P_(c[a>>2]|0);a=a+4|0}while((a|0)!=(b|0));a=c[d>>2]|0;b=c[f>>2]|0;if((b|0)!=(a|0))c[f>>2]=b+(~((b+-4-a|0)>>>2)<<2)}a=c[e>>2]|0;if(!a)return;P_(a);return}function OH(a){a=a|0;var b=0,d=0,e=0,f=0,g=0;g=a+-20|0;c[a+-16>>2]=1136;c[a+-12>>2]=1228;c[a+-8>>2]=1260;c[a+-4>>2]=1292;c[g+20>>2]=1324;e=g+24|0;pG(e);d=g+28|0;a=c[d>>2]|0;f=g+32|0;b=c[f>>2]|0;if((a|0)!=(b|0)){do{P_(c[a>>2]|0);a=a+4|0}while((a|0)!=(b|0));a=c[d>>2]|0;b=c[f>>2]|0;if((b|0)!=(a|0))c[f>>2]=b+(~((b+-4-a|0)>>>2)<<2)}a=c[e>>2]|0;if(!a){P_(g);return}P_(a);P_(g);return}function PH(a){a=a|0;return}function QH(a){a=a|0;P_(a);return}function RH(a){a=a|0;return}function SH(a){a=a|0;P_(a);return}function TH(a,b){a=a|0;b=b|0;return}function UH(a,b){a=a|0;b=b|0;return}function VH(a){a=a|0;return}function WH(a){a=a|0;P_(a+(c[(c[a>>2]|0)+-12>>2]|0)|0);return}function XH(a){a=a|0;return}function YH(a){a=a|0;P_(a);return}function ZH(a){a=a|0;return}function _H(a){a=a|0;P_(a+(c[(c[a>>2]|0)+-12>>2]|0)|0);return}function $H(a){a=a|0;return}function aI(a){a=a|0;P_(a);return}function bI(a,b){a=a|0;b=b|0;return}function cI(a,b){a=a|0;b=b|0;return}function dI(a){a=a|0;return}function eI(a){a=a|0;P_(a+(c[(c[a>>2]|0)+-12>>2]|0)|0);return}function fI(a){a=a|0;return}function gI(a){a=a|0;P_(a);return}function hI(a,b){a=a|0;b=b|0;return}function iI(a,b){a=a|0;b=b|0;return}function jI(a){a=a|0;return}function kI(a){a=a|0;P_(a+(c[(c[a>>2]|0)+-12>>2]|0)|0);return}function lI(a){a=a|0;return}function mI(a){a=a|0;P_(a);return}function nI(a,b){a=a|0;b=b|0;return}function oI(a){a=a|0;var b=0,d=0,e=0,f=0,g=0;e=a+4|0;g=c[10020]|0;c[e>>2]=g;c[e+(c[g+-16>>2]|0)>>2]=c[10031];c[a+8>>2]=c[10032];c[a+12>>2]=c[10033];c[a+16>>2]=c[10034];c[a+20>>2]=c[10035];g=a+24|0;pG(g);e=a+28|0;b=c[e>>2]|0;f=a+32|0;d=c[f>>2]|0;if((b|0)!=(d|0)){a=b;do{P_(c[a>>2]|0);a=a+4|0}while((a|0)!=(d|0));a=c[e>>2]|0;b=c[f>>2]|0;if((b|0)!=(a|0))c[f>>2]=b+(~((b+-4-a|0)>>>2)<<2)}a=c[g>>2]|0;if(!a)return;P_(a);return}function pI(a){a=a|0;var b=0,d=0,e=0,f=0,g=0;d=a+4|0;f=c[10020]|0;c[d>>2]=f;c[d+(c[f+-16>>2]|0)>>2]=c[10031];c[a+8>>2]=c[10032];c[a+12>>2]=c[10033];c[a+16>>2]=c[10034];c[a+20>>2]=c[10035];f=a+24|0;pG(f);d=a+28|0;b=c[d>>2]|0;g=a+32|0;e=c[g>>2]|0;if((b|0)!=(e|0)){do{P_(c[b>>2]|0);b=b+4|0}while((b|0)!=(e|0));b=c[d>>2]|0;d=c[g>>2]|0;if((d|0)!=(b|0))c[g>>2]=d+(~((d+-4-b|0)>>>2)<<2)}b=c[f>>2]|0;if(!b){P_(a);return}P_(b);P_(a);return}function qI(a){a=a|0;var b=0,d=0,e=0,f=0;f=a+-4|0;b=f+4|0;e=c[10020]|0;c[b>>2]=e;c[b+(c[e+-16>>2]|0)>>2]=c[10031];c[f+8>>2]=c[10032];c[f+12>>2]=c[10033];c[f+16>>2]=c[10034];c[f+20>>2]=c[10035];e=f+24|0;pG(e);b=f+28|0;a=c[b>>2]|0;f=f+32|0;d=c[f>>2]|0;if((a|0)!=(d|0)){do{P_(c[a>>2]|0);a=a+4|0}while((a|0)!=(d|0));a=c[b>>2]|0;b=c[f>>2]|0;if((b|0)!=(a|0))c[f>>2]=b+(~((b+-4-a|0)>>>2)<<2)}a=c[e>>2]|0;if(!a)return;P_(a);return}function rI(a){a=a|0;pI(a+-4|0);return}function sI(a){a=a|0;var b=0,d=0,e=0,f=0;f=a+-8|0;b=f+4|0;e=c[10020]|0;c[b>>2]=e;c[b+(c[e+-16>>2]|0)>>2]=c[10031];c[f+8>>2]=c[10032];c[f+12>>2]=c[10033];c[f+16>>2]=c[10034];c[f+20>>2]=c[10035];e=f+24|0;pG(e);b=f+28|0;a=c[b>>2]|0;f=f+32|0;d=c[f>>2]|0;if((a|0)!=(d|0)){do{P_(c[a>>2]|0);a=a+4|0}while((a|0)!=(d|0));a=c[b>>2]|0;b=c[f>>2]|0;if((b|0)!=(a|0))c[f>>2]=b+(~((b+-4-a|0)>>>2)<<2)}a=c[e>>2]|0;if(!a)return;P_(a);return}function tI(a){a=a|0;pI(a+-8|0);return}function uI(a){a=a|0;var b=0,d=0,e=0,f=0;f=a+-12|0;b=f+4|0;e=c[10020]|0;c[b>>2]=e;c[b+(c[e+-16>>2]|0)>>2]=c[10031];c[f+8>>2]=c[10032];c[f+12>>2]=c[10033];c[f+16>>2]=c[10034];c[f+20>>2]=c[10035];e=f+24|0;pG(e);b=f+28|0;a=c[b>>2]|0;f=f+32|0;d=c[f>>2]|0;if((a|0)!=(d|0)){do{P_(c[a>>2]|0);a=a+4|0}while((a|0)!=(d|0));a=c[b>>2]|0;b=c[f>>2]|0;if((b|0)!=(a|0))c[f>>2]=b+(~((b+-4-a|0)>>>2)<<2)}a=c[e>>2]|0;if(!a)return;P_(a);return}function vI(a){a=a|0;pI(a+-12|0);return}function wI(a){a=a|0;var b=0,d=0,e=0,f=0;f=a+-16|0;b=f+4|0;e=c[10020]|0;c[b>>2]=e;c[b+(c[e+-16>>2]|0)>>2]=c[10031];c[f+8>>2]=c[10032];c[f+12>>2]=c[10033];c[f+16>>2]=c[10034];c[f+20>>2]=c[10035];e=f+24|0;pG(e);b=f+28|0;a=c[b>>2]|0;f=f+32|0;d=c[f>>2]|0;if((a|0)!=(d|0)){do{P_(c[a>>2]|0);a=a+4|0}while((a|0)!=(d|0));a=c[b>>2]|0;b=c[f>>2]|0;if((b|0)!=(a|0))c[f>>2]=b+(~((b+-4-a|0)>>>2)<<2)}a=c[e>>2]|0;if(!a)return;P_(a);return}function xI(a){a=a|0;pI(a+-16|0);return}function yI(a){a=a|0;var b=0,d=0,e=0,f=0;f=a+-20|0;e=c[10020]|0;c[f+4>>2]=e;c[f+((c[e+-16>>2]|0)+4)>>2]=c[10031];c[f+8>>2]=c[10032];c[f+12>>2]=c[10033];c[f+16>>2]=c[10034];c[f+20>>2]=c[10035];e=f+24|0;pG(e);b=f+28|0;a=c[b>>2]|0;f=f+32|0;d=c[f>>2]|0;if((a|0)!=(d|0)){do{P_(c[a>>2]|0);a=a+4|0}while((a|0)!=(d|0));a=c[b>>2]|0;b=c[f>>2]|0;if((b|0)!=(a|0))c[f>>2]=b+(~((b+-4-a|0)>>>2)<<2)}a=c[e>>2]|0;if(!a)return;P_(a);return}function zI(a){a=a|0;pI(a+-20|0);return}function AI(a){a=a|0;var b=0,d=0,e=0,f=0,g=0;c[a+4>>2]=1136;c[a+8>>2]=1228;c[a+12>>2]=1260;c[a+16>>2]=1292;c[a+20>>2]=1324;g=a+24|0;pG(g);e=a+28|0;b=c[e>>2]|0;f=a+32|0;d=c[f>>2]|0;if((b|0)!=(d|0)){a=b;do{P_(c[a>>2]|0);a=a+4|0}while((a|0)!=(d|0));a=c[e>>2]|0;b=c[f>>2]|0;if((b|0)!=(a|0))c[f>>2]=b+(~((b+-4-a|0)>>>2)<<2)}a=c[g>>2]|0;if(!a)return;P_(a);return}function BI(a){a=a|0;var b=0,d=0,e=0,f=0,g=0;c[a+4>>2]=1136;c[a+8>>2]=1228;c[a+12>>2]=1260;c[a+16>>2]=1292;c[a+20>>2]=1324;f=a+24|0;pG(f);d=a+28|0;b=c[d>>2]|0;g=a+32|0;e=c[g>>2]|0;if((b|0)!=(e|0)){do{P_(c[b>>2]|0);b=b+4|0}while((b|0)!=(e|0));b=c[d>>2]|0;d=c[g>>2]|0;if((d|0)!=(b|0))c[g>>2]=d+(~((d+-4-b|0)>>>2)<<2)}b=c[f>>2]|0;if(!b){P_(a);return}P_(b);P_(a);return}function CI(a){a=a|0;var b=0,d=0,e=0,f=0;f=a+-4|0;c[f+4>>2]=1136;c[f+8>>2]=1228;c[f+12>>2]=1260;c[f+16>>2]=1292;c[f+20>>2]=1324;e=f+24|0;pG(e);d=f+28|0;a=c[d>>2]|0;f=f+32|0;b=c[f>>2]|0;if((a|0)!=(b|0)){do{P_(c[a>>2]|0);a=a+4|0}while((a|0)!=(b|0));a=c[d>>2]|0;b=c[f>>2]|0;if((b|0)!=(a|0))c[f>>2]=b+(~((b+-4-a|0)>>>2)<<2)}a=c[e>>2]|0;if(!a)return;P_(a);return}function DI(a){a=a|0;var b=0,d=0,e=0,f=0,g=0;g=a+-4|0;c[g+4>>2]=1136;c[g+8>>2]=1228;c[g+12>>2]=1260;c[g+16>>2]=1292;c[g+20>>2]=1324;e=g+24|0;pG(e);d=g+28|0;a=c[d>>2]|0;f=g+32|0;b=c[f>>2]|0;if((a|0)!=(b|0)){do{P_(c[a>>2]|0);a=a+4|0}while((a|0)!=(b|0));a=c[d>>2]|0;b=c[f>>2]|0;if((b|0)!=(a|0))c[f>>2]=b+(~((b+-4-a|0)>>>2)<<2)}a=c[e>>2]|0;if(!a){P_(g);return}P_(a);P_(g);return}function EI(a){a=a|0;var b=0,d=0,e=0,f=0;f=a+-8|0;c[f+4>>2]=1136;c[f+8>>2]=1228;c[f+12>>2]=1260;c[f+16>>2]=1292;c[f+20>>2]=1324;e=f+24|0;pG(e);d=f+28|0;a=c[d>>2]|0;f=f+32|0;b=c[f>>2]|0;if((a|0)!=(b|0)){do{P_(c[a>>2]|0);a=a+4|0}while((a|0)!=(b|0));a=c[d>>2]|0;b=c[f>>2]|0;if((b|0)!=(a|0))c[f>>2]=b+(~((b+-4-a|0)>>>2)<<2)}a=c[e>>2]|0;if(!a)return;P_(a);return}function FI(a){a=a|0;var b=0,d=0,e=0,f=0,g=0;g=a+-8|0;c[g+4>>2]=1136;c[g+8>>2]=1228;c[g+12>>2]=1260;c[g+16>>2]=1292;c[g+20>>2]=1324;e=g+24|0;pG(e);d=g+28|0;a=c[d>>2]|0;f=g+32|0;b=c[f>>2]|0;if((a|0)!=(b|0)){do{P_(c[a>>2]|0);a=a+4|0}while((a|0)!=(b|0));a=c[d>>2]|0;b=c[f>>2]|0;if((b|0)!=(a|0))c[f>>2]=b+(~((b+-4-a|0)>>>2)<<2)}a=c[e>>2]|0;if(!a){P_(g);return}P_(a);P_(g);return}function GI(a){a=a|0;var b=0,d=0,e=0,f=0;f=a+-12|0;c[f+4>>2]=1136;c[f+8>>2]=1228;c[f+12>>2]=1260;c[f+16>>2]=1292;c[f+20>>2]=1324;e=f+24|0;pG(e);d=f+28|0;a=c[d>>2]|0;f=f+32|0;b=c[f>>2]|0;if((a|0)!=(b|0)){do{P_(c[a>>2]|0);a=a+4|0}while((a|0)!=(b|0));a=c[d>>2]|0;b=c[f>>2]|0;if((b|0)!=(a|0))c[f>>2]=b+(~((b+-4-a|0)>>>2)<<2)}a=c[e>>2]|0;if(!a)return;P_(a);return}function HI(a){a=a|0;var b=0,d=0,e=0,f=0,g=0;g=a+-12|0;c[g+4>>2]=1136;c[g+8>>2]=1228;c[g+12>>2]=1260;c[g+16>>2]=1292;c[g+20>>2]=1324;e=g+24|0;pG(e);d=g+28|0;a=c[d>>2]|0;f=g+32|0;b=c[f>>2]|0;if((a|0)!=(b|0)){do{P_(c[a>>2]|0);a=a+4|0}while((a|0)!=(b|0));a=c[d>>2]|0;b=c[f>>2]|0;if((b|0)!=(a|0))c[f>>2]=b+(~((b+-4-a|0)>>>2)<<2)}a=c[e>>2]|0;if(!a){P_(g);return}P_(a);P_(g);return}function II(a){a=a|0;var b=0,d=0,e=0,f=0;f=a+-16|0;c[f+4>>2]=1136;c[f+8>>2]=1228;c[f+12>>2]=1260;c[f+16>>2]=1292;c[f+20>>2]=1324;e=f+24|0;pG(e);d=f+28|0;a=c[d>>2]|0;f=f+32|0;b=c[f>>2]|0;if((a|0)!=(b|0)){do{P_(c[a>>2]|0);a=a+4|0}while((a|0)!=(b|0));a=c[d>>2]|0;b=c[f>>2]|0;if((b|0)!=(a|0))c[f>>2]=b+(~((b+-4-a|0)>>>2)<<2)}a=c[e>>2]|0;if(!a)return;P_(a);return}function JI(a){a=a|0;var b=0,d=0,e=0,f=0,g=0;g=a+-16|0;c[g+4>>2]=1136;c[g+8>>2]=1228;c[g+12>>2]=1260;c[g+16>>2]=1292;c[g+20>>2]=1324;e=g+24|0;pG(e);d=g+28|0;a=c[d>>2]|0;f=g+32|0;b=c[f>>2]|0;if((a|0)!=(b|0)){do{P_(c[a>>2]|0);a=a+4|0}while((a|0)!=(b|0));a=c[d>>2]|0;b=c[f>>2]|0;if((b|0)!=(a|0))c[f>>2]=b+(~((b+-4-a|0)>>>2)<<2)}a=c[e>>2]|0;if(!a){P_(g);return}P_(a);P_(g);return}function KI(a){a=a|0;var b=0,d=0,e=0,f=0;f=a+-20|0;c[a+-16>>2]=1136;c[a+-12>>2]=1228;c[a+-8>>2]=1260;c[a+-4>>2]=1292;c[f+20>>2]=1324;e=f+24|0;pG(e);d=f+28|0;a=c[d>>2]|0;f=f+32|0;b=c[f>>2]|0;if((a|0)!=(b|0)){do{P_(c[a>>2]|0);a=a+4|0}while((a|0)!=(b|0));a=c[d>>2]|0;b=c[f>>2]|0;if((b|0)!=(a|0))c[f>>2]=b+(~((b+-4-a|0)>>>2)<<2)}a=c[e>>2]|0;if(!a)return;P_(a);return}function LI(a){a=a|0;var b=0,d=0,e=0,f=0,g=0;g=a+-20|0;c[a+-16>>2]=1136;c[a+-12>>2]=1228;c[a+-8>>2]=1260;c[a+-4>>2]=1292;c[g+20>>2]=1324;e=g+24|0;pG(e);d=g+28|0;a=c[d>>2]|0;f=g+32|0;b=c[f>>2]|0;if((a|0)!=(b|0)){do{P_(c[a>>2]|0);a=a+4|0}while((a|0)!=(b|0));a=c[d>>2]|0;b=c[f>>2]|0;if((b|0)!=(a|0))c[f>>2]=b+(~((b+-4-a|0)>>>2)<<2)}a=c[e>>2]|0;if(!a){P_(g);return}P_(a);P_(g);return}function MI(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0;c[b>>2]=33388;j=b+4|0;i=c[d+12>>2]|0;c[j>>2]=i;c[j+(c[i+-16>>2]|0)>>2]=c[d+16>>2];i=b+8|0;h=c[d+20>>2]|0;c[i>>2]=h;c[i+(c[h+-16>>2]|0)>>2]=c[d+24>>2];h=b+12|0;g=c[d+28>>2]|0;c[h>>2]=g;c[h+(c[g+-16>>2]|0)>>2]=c[d+32>>2];g=b+16|0;f=c[d+36>>2]|0;c[g>>2]=f;c[g+(c[f+-16>>2]|0)>>2]=c[d+40>>2];f=b+20|0;k=c[d+44>>2]|0;c[f>>2]=k;c[f+(c[k+-16>>2]|0)>>2]=c[d+48>>2];k=c[d+8>>2]|0;c[j>>2]=k;c[j+(c[k+-16>>2]|0)>>2]=c[d+52>>2];c[i>>2]=c[d+56>>2];c[h>>2]=c[d+60>>2];c[g>>2]=c[d+64>>2];c[f>>2]=c[d+68>>2];k=b+24|0;c[k>>2]=0;c[k+4>>2]=0;c[k+8>>2]=0;c[k+12>>2]=0;c[k+16>>2]=0;c[k+20>>2]=0;k=c[d+4>>2]|0;c[b>>2]=k;c[j>>2]=c[d+72>>2];c[b+(c[k+-12>>2]|0)>>2]=c[d+76>>2];c[i>>2]=c[d+80>>2];c[h>>2]=c[d+84>>2];c[g>>2]=c[d+88>>2];c[f>>2]=c[d+92>>2];c[b+52>>2]=e;c[b+56>>2]=12880;e=b+60|0;c[e>>2]=0;a[b+64>>0]=0;c[e>>2]=b+(c[(c[b>>2]|0)+-12>>2]|0);e=c[d>>2]|0;c[b>>2]=e;c[j>>2]=c[d+96>>2];c[b+(c[e+-12>>2]|0)>>2]=c[d+100>>2];c[i>>2]=c[d+104>>2];c[h>>2]=c[d+108>>2];c[g>>2]=c[d+112>>2];c[f>>2]=c[d+116>>2];c[b+84>>2]=34336;c[b+100>>2]=34336;return}function NI(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0;q=i;i=i+96|0;p=q+24|0;l=q+8|0;f=q+4|0;j=q;h=c[b+52>>2]|0;o=c[11306]|0;c[p>>2]=o;c[p+(c[o+-16>>2]|0)>>2]=c[11307];o=p+4|0;m=c[11308]|0;c[o>>2]=m;c[o+(c[m+-16>>2]|0)>>2]=c[11309];m=p+8|0;n=c[11310]|0;c[m>>2]=n;c[m+(c[n+-16>>2]|0)>>2]=c[11311];c[p>>2]=45116;c[p+4>>2]=45172;c[p+8>>2]=45204;n=p+20|0;c[n>>2]=0;c[n+4>>2]=0;c[n+8>>2]=0;c[n+12>>2]=0;c[p+48>>2]=h;c[p+60>>2]=12880;a[p+68>>0]=0;c[p+64>>2]=p+(c[11275]|0);h=l+4|0;c[h>>2]=0;n=l+8|0;c[n>>2]=0;c[l+12>>2]=0;c[l>>2]=34320;e=c[e>>2]|0;c[f>>2]=e;if((e|0)!=0?(r=e+((c[(c[e>>2]|0)+-12>>2]|0)+4)|0,e=(c[r>>2]|0)+1|0,c[r>>2]=e,(e|0)==0):0)Ha(79054,79014,48,79068);tW(p,f,0,l+4|0);e=c[f>>2]|0;if((e|0)!=0?(f=c[(c[e>>2]|0)+-12>>2]|0,g=e+f|0,f=e+(f+4)|0,r=(c[f>>2]|0)+-1|0,c[f>>2]=r,!((g|0)==0|(r|0)!=0)):0)oc[c[(c[g>>2]|0)+4>>2]&2047](g);e=c[d>>2]|0;c[j>>2]=e;if((e|0)!=0?(d=e+((c[(c[e>>2]|0)+-12>>2]|0)+4)|0,r=(c[d>>2]|0)+1|0,c[d>>2]=r,(r|0)==0):0)Ha(79054,79014,48,79068);e=c[h>>2]|0;g=c[n>>2]|0;c[b+88>>2]=e;c[b+92>>2]=e;c[b+96>>2]=g;c[b+104>>2]=g;c[b+108>>2]=e;c[b+112>>2]=g;g=vP(b,j)|0;e=c[j>>2]|0;if((e|0)!=0?(j=c[(c[e>>2]|0)+-12>>2]|0,k=e+j|0,j=e+(j+4)|0,r=(c[j>>2]|0)+-1|0,c[j>>2]=r,!((k|0)==0|(r|0)!=0)):0)oc[c[(c[k>>2]|0)+4>>2]&2047](k);if(g){f=o$(g,1576,8200,0)|0;if((f|0)!=0?(k=f+((c[(c[f>>2]|0)+-12>>2]|0)+4)|0,r=(c[k>>2]|0)+1|0,c[k>>2]=r,(r|0)==0):0)Ha(79054,79014,48,79068);k=c[(c[g>>2]|0)+-12>>2]|0;e=g+k|0;k=g+(k+4)|0;r=(c[k>>2]|0)+-1|0;c[k>>2]=r;if((e|0)==0|(r|0)!=0)d=f;else{oc[c[(c[e>>2]|0)+4>>2]&2047](e);d=f}}else d=0;e=l+4|0;f=c[e>>2]|0;if(!f){r=c[11305]|0;c[p>>2]=r;n=c[11312]|0;r=r+-16|0;r=c[r>>2]|0;r=p+r|0;c[r>>2]=n;r=c[11313]|0;c[o>>2]=r;r=c[11314]|0;c[m>>2]=r;r=p+24|0;o2(r);i=q;return d|0}while(1){g=c[n>>2]|0;if((g|0)==(f|0))break;r=g+-20|0;c[n>>2]=r;o2(r)}P_(c[e>>2]|0);r=c[11305]|0;c[p>>2]=r;n=c[11312]|0;r=r+-16|0;r=c[r>>2]|0;r=p+r|0;c[r>>2]=n;r=c[11313]|0;c[o>>2]=r;r=c[11314]|0;c[m>>2]=r;r=p+24|0;o2(r);i=q;return d|0}function OI(a){a=a|0;var b=0,d=0,e=0;d=a+4|0;e=c[d>>2]|0;if(!e)return;a=a+8|0;while(1){b=c[a>>2]|0;if((b|0)==(e|0))break;b=b+-20|0;c[a>>2]=b;o2(b)}P_(c[d>>2]|0);return}function PI(a){a=a|0;var b=0,d=0,e=0,f=0;b=a+4|0;d=c[b>>2]|0;if(!d){P_(a);return}e=a+8|0;while(1){f=c[e>>2]|0;if((f|0)==(d|0))break;f=f+-20|0;c[e>>2]=f;o2(f)}P_(c[b>>2]|0);P_(a);return}function QI(a){a=a|0;var b=0,d=0,e=0,f=0,g=0;c[a+4>>2]=1136;c[a+8>>2]=1228;c[a+12>>2]=1260;c[a+16>>2]=1292;c[a+20>>2]=1324;g=a+24|0;pG(g);e=a+28|0;b=c[e>>2]|0;f=a+32|0;d=c[f>>2]|0;if((b|0)!=(d|0)){a=b;do{P_(c[a>>2]|0);a=a+4|0}while((a|0)!=(d|0));a=c[e>>2]|0;b=c[f>>2]|0;if((b|0)!=(a|0))c[f>>2]=b+(~((b+-4-a|0)>>>2)<<2)}a=c[g>>2]|0;if(!a)return;P_(a);return}function RI(a){a=a|0;var b=0,d=0,e=0,f=0,g=0;c[a+4>>2]=1136;c[a+8>>2]=1228;c[a+12>>2]=1260;c[a+16>>2]=1292;c[a+20>>2]=1324;f=a+24|0;pG(f);d=a+28|0;b=c[d>>2]|0;g=a+32|0;e=c[g>>2]|0;if((b|0)!=(e|0)){do{P_(c[b>>2]|0);b=b+4|0}while((b|0)!=(e|0));b=c[d>>2]|0;d=c[g>>2]|0;if((d|0)!=(b|0))c[g>>2]=d+(~((d+-4-b|0)>>>2)<<2)}b=c[f>>2]|0;if(!b){P_(a);return}P_(b);P_(a);return}function SI(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,j=0,k=0;h=i;i=i+32|0;f=h+20|0;g=h;e=zc[c[(c[b>>2]|0)+36>>2]&255](b,d)|0;c[f>>2]=e;if(!e){i=h;return}e=c[b+88>>2]|0;if((e|0)==(c[b+104>>2]|0)){pc[c[(c[b>>2]|0)+32>>2]&1023](b,f);b=b+4|0;Dc[c[(c[b>>2]|0)+56>>2]&63](b,f,0)}else{k2(g,e);k=e+12|0;j=c[k+4>>2]|0;e=g+12|0;c[e>>2]=c[k>>2];c[e+4>>2]=j;if(!(a[b+48>>0]|0)){Hc[c[(c[b>>2]|0)+16>>2]&15](b,f,g,b+72|0);e=b+4|0;Dc[c[(c[e>>2]|0)+56>>2]&63](e,f,0);e=b+88|0;k=(c[e>>2]|0)+20|0;c[e>>2]=k;if((k|0)==(c[b+96>>2]|0))c[e>>2]=c[b+92>>2]}else pc[c[(c[b>>2]|0)+28>>2]&1023](b,d);o2(g)}e=c[f>>2]|0;if(!e){i=h;return}j=c[(c[e>>2]|0)+-12>>2]|0;d=e+j|0;j=e+(j+4)|0;k=(c[j>>2]|0)+-1|0;c[j>>2]=k;if((d|0)==0|(k|0)!=0){i=h;return}oc[c[(c[d>>2]|0)+4>>2]&2047](d);i=h;return}function TI(a,b){a=a|0;b=b|0;Dc[c[(c[a>>2]|0)+20>>2]&63](a,b,(c[a+88>>2]|0)==(c[a+104>>2]|0));return}function UI(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,j=0;g=i;i=i+32|0;d=g;e=c[a+88>>2]|0;f=c[(c[a>>2]|0)+24>>2]|0;if((e|0)==(c[a+104>>2]|0)){Hc[f&15](a,b,0,1);i=g;return}k2(d,e);j=e+12|0;h=c[j+4>>2]|0;e=d+12|0;c[e>>2]=c[j>>2];c[e+4>>2]=h;e=DW(d)|0;Hc[f&15](a,b,e,0);o2(d);d=a+88|0;b=(c[d>>2]|0)+20|0;c[d>>2]=b;if((b|0)!=(c[a+96>>2]|0)){i=g;return}c[d>>2]=c[a+92>>2];i=g;return}function VI(a){a=a|0;var b=0,d=0,e=0,f=0;f=a+-4|0;c[f+4>>2]=1136;c[f+8>>2]=1228;c[f+12>>2]=1260;c[f+16>>2]=1292;c[f+20>>2]=1324;e=f+24|0;pG(e);d=f+28|0;a=c[d>>2]|0;f=f+32|0;b=c[f>>2]|0;if((a|0)!=(b|0)){do{P_(c[a>>2]|0);a=a+4|0}while((a|0)!=(b|0));a=c[d>>2]|0;b=c[f>>2]|0;if((b|0)!=(a|0))c[f>>2]=b+(~((b+-4-a|0)>>>2)<<2)}a=c[e>>2]|0;if(!a)return;P_(a);return}function WI(a){a=a|0;var b=0,d=0,e=0,f=0,g=0;g=a+-4|0;c[g+4>>2]=1136;c[g+8>>2]=1228;c[g+12>>2]=1260;c[g+16>>2]=1292;c[g+20>>2]=1324;e=g+24|0;pG(e);d=g+28|0;a=c[d>>2]|0;f=g+32|0;b=c[f>>2]|0;if((a|0)!=(b|0)){do{P_(c[a>>2]|0);a=a+4|0}while((a|0)!=(b|0));a=c[d>>2]|0;b=c[f>>2]|0;if((b|0)!=(a|0))c[f>>2]=b+(~((b+-4-a|0)>>>2)<<2)}a=c[e>>2]|0;if(!a){P_(g);return}P_(a);P_(g);return}function XI(a,b){a=a|0;b=b|0;a=a+-4|0;Dc[c[(c[a>>2]|0)+20>>2]&63](a,b,(c[a+88>>2]|0)==(c[a+104>>2]|0));return}function YI(a,b){a=a|0;b=b|0;SI(a+-4|0,b);return}function ZI(a,b){a=a|0;b=b|0;UI(a+-4|0,b);return}function _I(a){a=a|0;var b=0,d=0,e=0,f=0;f=a+-8|0;c[f+4>>2]=1136;c[f+8>>2]=1228;c[f+12>>2]=1260;c[f+16>>2]=1292;c[f+20>>2]=1324;e=f+24|0;pG(e);d=f+28|0;a=c[d>>2]|0;f=f+32|0;b=c[f>>2]|0;if((a|0)!=(b|0)){do{P_(c[a>>2]|0);a=a+4|0}while((a|0)!=(b|0));a=c[d>>2]|0;b=c[f>>2]|0;if((b|0)!=(a|0))c[f>>2]=b+(~((b+-4-a|0)>>>2)<<2)}a=c[e>>2]|0;if(!a)return;P_(a);return}function $I(a){a=a|0;var b=0,d=0,e=0,f=0,g=0;g=a+-8|0;c[g+4>>2]=1136;c[g+8>>2]=1228;c[g+12>>2]=1260;c[g+16>>2]=1292;c[g+20>>2]=1324;e=g+24|0;pG(e);d=g+28|0;a=c[d>>2]|0;f=g+32|0;b=c[f>>2]|0;if((a|0)!=(b|0)){do{P_(c[a>>2]|0);a=a+4|0}while((a|0)!=(b|0));a=c[d>>2]|0;b=c[f>>2]|0;if((b|0)!=(a|0))c[f>>2]=b+(~((b+-4-a|0)>>>2)<<2)}a=c[e>>2]|0;if(!a){P_(g);return}P_(a);P_(g);return}function aJ(a){a=a|0;var b=0,d=0,e=0,f=0;f=a+-12|0;c[f+4>>2]=1136;c[f+8>>2]=1228;c[f+12>>2]=1260;c[f+16>>2]=1292;c[f+20>>2]=1324;e=f+24|0;pG(e);d=f+28|0;a=c[d>>2]|0;f=f+32|0;b=c[f>>2]|0;if((a|0)!=(b|0)){do{P_(c[a>>2]|0);a=a+4|0}while((a|0)!=(b|0));a=c[d>>2]|0;b=c[f>>2]|0;if((b|0)!=(a|0))c[f>>2]=b+(~((b+-4-a|0)>>>2)<<2)}a=c[e>>2]|0;if(!a)return;P_(a);return}function bJ(a){a=a|0;var b=0,d=0,e=0,f=0,g=0;g=a+-12|0;c[g+4>>2]=1136;c[g+8>>2]=1228;c[g+12>>2]=1260;c[g+16>>2]=1292;c[g+20>>2]=1324;e=g+24|0;pG(e);d=g+28|0;a=c[d>>2]|0;f=g+32|0;b=c[f>>2]|0;if((a|0)!=(b|0)){do{P_(c[a>>2]|0);a=a+4|0}while((a|0)!=(b|0));a=c[d>>2]|0;b=c[f>>2]|0;if((b|0)!=(a|0))c[f>>2]=b+(~((b+-4-a|0)>>>2)<<2)}a=c[e>>2]|0;if(!a){P_(g);return}P_(a);P_(g);return}function cJ(a,b){a=a|0;b=b|0;a=a+-12|0;Dc[c[(c[a>>2]|0)+20>>2]&63](a,b,(c[a+88>>2]|0)==(c[a+104>>2]|0));return}function dJ(a,b){a=a|0;b=b|0;UI(a+-12|0,b);return}function eJ(a){a=a|0;var b=0,d=0,e=0,f=0;f=a+-16|0;c[a+-12>>2]=1136;c[a+-8>>2]=1228;c[a+-4>>2]=1260;c[f+16>>2]=1292;c[f+20>>2]=1324;e=f+24|0;pG(e);d=f+28|0;a=c[d>>2]|0;f=f+32|0;b=c[f>>2]|0;if((a|0)!=(b|0)){do{P_(c[a>>2]|0);a=a+4|0}while((a|0)!=(b|0));a=c[d>>2]|0;b=c[f>>2]|0;if((b|0)!=(a|0))c[f>>2]=b+(~((b+-4-a|0)>>>2)<<2)}a=c[e>>2]|0;if(!a)return;P_(a);return}function fJ(a){a=a|0;var b=0,d=0,e=0,f=0,g=0;g=a+-16|0;c[a+-12>>2]=1136;c[a+-8>>2]=1228;c[a+-4>>2]=1260;c[g+16>>2]=1292;c[g+20>>2]=1324;e=g+24|0;pG(e);d=g+28|0;a=c[d>>2]|0;f=g+32|0;b=c[f>>2]|0;if((a|0)!=(b|0)){do{P_(c[a>>2]|0);a=a+4|0}while((a|0)!=(b|0));a=c[d>>2]|0;b=c[f>>2]|0;if((b|0)!=(a|0))c[f>>2]=b+(~((b+-4-a|0)>>>2)<<2)}a=c[e>>2]|0;if(!a){P_(g);return}P_(a);P_(g);return}function gJ(a,b){a=a|0;b=b|0;SI(a+-16|0,b);return}function hJ(a){a=a|0;var b=0,d=0,e=0,f=0;f=a+-20|0;c[f+4>>2]=1136;c[f+8>>2]=1228;c[f+12>>2]=1260;c[f+16>>2]=1292;c[f+20>>2]=1324;e=f+24|0;pG(e);d=f+28|0;a=c[d>>2]|0;f=f+32|0;b=c[f>>2]|0;if((a|0)!=(b|0)){do{P_(c[a>>2]|0);a=a+4|0}while((a|0)!=(b|0));a=c[d>>2]|0;b=c[f>>2]|0;if((b|0)!=(a|0))c[f>>2]=b+(~((b+-4-a|0)>>>2)<<2)}a=c[e>>2]|0;if(!a)return;P_(a);return}function iJ(a){a=a|0;var b=0,d=0,e=0,f=0,g=0;g=a+-20|0;c[g+4>>2]=1136;c[g+8>>2]=1228;c[g+12>>2]=1260;c[g+16>>2]=1292;c[g+20>>2]=1324;e=g+24|0;pG(e);d=g+28|0;a=c[d>>2]|0;f=g+32|0;b=c[f>>2]|0;if((a|0)!=(b|0)){do{P_(c[a>>2]|0);a=a+4|0}while((a|0)!=(b|0));a=c[d>>2]|0;b=c[f>>2]|0;if((b|0)!=(a|0))c[f>>2]=b+(~((b+-4-a|0)>>>2)<<2)}a=c[e>>2]|0;if(!a){P_(g);return}P_(a);P_(g);return}function jJ(a){a=a|0;return}function kJ(a){a=a|0;P_(a);return}function lJ(a){a=a|0;var b=0,d=0,e=0,f=0,g=0;c[a+4>>2]=1136;c[a+8>>2]=1228;c[a+12>>2]=1260;c[a+16>>2]=1292;c[a+20>>2]=1324;g=a+24|0;pG(g);e=a+28|0;b=c[e>>2]|0;f=a+32|0;d=c[f>>2]|0;if((b|0)!=(d|0)){a=b;do{P_(c[a>>2]|0);a=a+4|0}while((a|0)!=(d|0));a=c[e>>2]|0;b=c[f>>2]|0;if((b|0)!=(a|0))c[f>>2]=b+(~((b+-4-a|0)>>>2)<<2)}a=c[g>>2]|0;if(!a)return;P_(a);return}function mJ(a){a=a|0;var b=0,d=0,e=0,f=0,g=0;c[a+4>>2]=1136;c[a+8>>2]=1228;c[a+12>>2]=1260;c[a+16>>2]=1292;c[a+20>>2]=1324;f=a+24|0;pG(f);d=a+28|0;b=c[d>>2]|0;g=a+32|0;e=c[g>>2]|0;if((b|0)!=(e|0)){do{P_(c[b>>2]|0);b=b+4|0}while((b|0)!=(e|0));b=c[d>>2]|0;d=c[g>>2]|0;if((d|0)!=(b|0))c[g>>2]=d+(~((d+-4-b|0)>>>2)<<2)}b=c[f>>2]|0;if(!b){P_(a);return}P_(b);P_(a);return}function nJ(a){a=a|0;var b=0,d=0,e=0,f=0;f=a+-4|0;c[f+4>>2]=1136;c[f+8>>2]=1228;c[f+12>>2]=1260;c[f+16>>2]=1292;c[f+20>>2]=1324;e=f+24|0;pG(e);d=f+28|0;a=c[d>>2]|0;f=f+32|0;b=c[f>>2]|0;if((a|0)!=(b|0)){do{P_(c[a>>2]|0);a=a+4|0}while((a|0)!=(b|0));a=c[d>>2]|0;b=c[f>>2]|0;if((b|0)!=(a|0))c[f>>2]=b+(~((b+-4-a|0)>>>2)<<2)}a=c[e>>2]|0;if(!a)return;P_(a);return}function oJ(a){a=a|0;var b=0,d=0,e=0,f=0,g=0;g=a+-4|0;c[g+4>>2]=1136;c[g+8>>2]=1228;c[g+12>>2]=1260;c[g+16>>2]=1292;c[g+20>>2]=1324;e=g+24|0;pG(e);d=g+28|0;a=c[d>>2]|0;f=g+32|0;b=c[f>>2]|0;if((a|0)!=(b|0)){do{P_(c[a>>2]|0);a=a+4|0}while((a|0)!=(b|0));a=c[d>>2]|0;b=c[f>>2]|0;if((b|0)!=(a|0))c[f>>2]=b+(~((b+-4-a|0)>>>2)<<2)}a=c[e>>2]|0;if(!a){P_(g);return}P_(a);P_(g);return}function pJ(a){a=a|0;var b=0,d=0,e=0,f=0;f=a+-8|0;c[f+4>>2]=1136;c[f+8>>2]=1228;c[f+12>>2]=1260;c[f+16>>2]=1292;c[f+20>>2]=1324;e=f+24|0;pG(e);d=f+28|0;a=c[d>>2]|0;f=f+32|0;b=c[f>>2]|0;if((a|0)!=(b|0)){do{P_(c[a>>2]|0);a=a+4|0}while((a|0)!=(b|0));a=c[d>>2]|0;b=c[f>>2]|0;if((b|0)!=(a|0))c[f>>2]=b+(~((b+-4-a|0)>>>2)<<2)}a=c[e>>2]|0;if(!a)return;P_(a);return}function qJ(a){a=a|0;var b=0,d=0,e=0,f=0,g=0;g=a+-8|0;c[g+4>>2]=1136;c[g+8>>2]=1228;c[g+12>>2]=1260;c[g+16>>2]=1292;c[g+20>>2]=1324;e=g+24|0;pG(e);d=g+28|0;a=c[d>>2]|0;f=g+32|0;b=c[f>>2]|0;if((a|0)!=(b|0)){do{P_(c[a>>2]|0);a=a+4|0}while((a|0)!=(b|0));a=c[d>>2]|0;b=c[f>>2]|0;if((b|0)!=(a|0))c[f>>2]=b+(~((b+-4-a|0)>>>2)<<2)}a=c[e>>2]|0;if(!a){P_(g);return}P_(a);P_(g);return}function rJ(a){a=a|0;var b=0,d=0,e=0,f=0;f=a+-12|0;c[f+4>>2]=1136;c[f+8>>2]=1228;c[f+12>>2]=1260;c[f+16>>2]=1292;c[f+20>>2]=1324;e=f+24|0;pG(e);d=f+28|0;a=c[d>>2]|0;f=f+32|0;b=c[f>>2]|0;if((a|0)!=(b|0)){do{P_(c[a>>2]|0);a=a+4|0}while((a|0)!=(b|0));a=c[d>>2]|0;b=c[f>>2]|0;if((b|0)!=(a|0))c[f>>2]=b+(~((b+-4-a|0)>>>2)<<2)}a=c[e>>2]|0;if(!a)return;P_(a);return}function sJ(a){a=a|0;var b=0,d=0,e=0,f=0,g=0;g=a+-12|0;c[g+4>>2]=1136;c[g+8>>2]=1228;c[g+12>>2]=1260;c[g+16>>2]=1292;c[g+20>>2]=1324;e=g+24|0;pG(e);d=g+28|0;a=c[d>>2]|0;f=g+32|0;b=c[f>>2]|0;if((a|0)!=(b|0)){do{P_(c[a>>2]|0);a=a+4|0}while((a|0)!=(b|0));a=c[d>>2]|0;b=c[f>>2]|0;if((b|0)!=(a|0))c[f>>2]=b+(~((b+-4-a|0)>>>2)<<2)}a=c[e>>2]|0;if(!a){P_(g);return}P_(a);P_(g);return}function tJ(a){a=a|0;var b=0,d=0,e=0,f=0;f=a+-16|0;c[a+-12>>2]=1136;c[a+-8>>2]=1228;c[a+-4>>2]=1260;c[f+16>>2]=1292;c[f+20>>2]=1324;e=f+24|0;pG(e);d=f+28|0;a=c[d>>2]|0;f=f+32|0;b=c[f>>2]|0;if((a|0)!=(b|0)){do{P_(c[a>>2]|0);a=a+4|0}while((a|0)!=(b|0));a=c[d>>2]|0;b=c[f>>2]|0;if((b|0)!=(a|0))c[f>>2]=b+(~((b+-4-a|0)>>>2)<<2)}a=c[e>>2]|0;if(!a)return;P_(a);return}function uJ(a){a=a|0;var b=0,d=0,e=0,f=0,g=0;g=a+-16|0;c[a+-12>>2]=1136;c[a+-8>>2]=1228;c[a+-4>>2]=1260;c[g+16>>2]=1292;c[g+20>>2]=1324;e=g+24|0;pG(e);d=g+28|0;a=c[d>>2]|0;f=g+32|0;b=c[f>>2]|0;if((a|0)!=(b|0)){do{P_(c[a>>2]|0);a=a+4|0}while((a|0)!=(b|0));a=c[d>>2]|0;b=c[f>>2]|0;if((b|0)!=(a|0))c[f>>2]=b+(~((b+-4-a|0)>>>2)<<2)}a=c[e>>2]|0;if(!a){P_(g);return}P_(a);P_(g);return}function vJ(a){a=a|0;var b=0,d=0,e=0,f=0;f=a+-20|0;c[f+4>>2]=1136;c[f+8>>2]=1228;c[f+12>>2]=1260;c[f+16>>2]=1292;c[f+20>>2]=1324;e=f+24|0;pG(e);d=f+28|0;a=c[d>>2]|0;f=f+32|0;b=c[f>>2]|0;if((a|0)!=(b|0)){do{P_(c[a>>2]|0);a=a+4|0}while((a|0)!=(b|0));a=c[d>>2]|0;b=c[f>>2]|0;if((b|0)!=(a|0))c[f>>2]=b+(~((b+-4-a|0)>>>2)<<2)}a=c[e>>2]|0;if(!a)return;P_(a);return}function wJ(a){a=a|0;var b=0,d=0,e=0,f=0,g=0;g=a+-20|0;c[g+4>>2]=1136;c[g+8>>2]=1228;c[g+12>>2]=1260;c[g+16>>2]=1292;c[g+20>>2]=1324;e=g+24|0;pG(e);d=g+28|0;a=c[d>>2]|0;f=g+32|0;b=c[f>>2]|0;if((a|0)!=(b|0)){do{P_(c[a>>2]|0);a=a+4|0}while((a|0)!=(b|0));a=c[d>>2]|0;b=c[f>>2]|0;if((b|0)!=(a|0))c[f>>2]=b+(~((b+-4-a|0)>>>2)<<2)}a=c[e>>2]|0;if(!a){P_(g);return}P_(a);P_(g);return}function xJ(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0;c[b>>2]=33388;j=b+4|0;i=c[d+12>>2]|0;c[j>>2]=i;c[j+(c[i+-16>>2]|0)>>2]=c[d+16>>2];i=b+8|0;h=c[d+20>>2]|0;c[i>>2]=h;c[i+(c[h+-16>>2]|0)>>2]=c[d+24>>2];h=b+12|0;g=c[d+28>>2]|0;c[h>>2]=g;c[h+(c[g+-16>>2]|0)>>2]=c[d+32>>2];g=b+16|0;f=c[d+36>>2]|0;c[g>>2]=f;c[g+(c[f+-16>>2]|0)>>2]=c[d+40>>2];f=b+20|0;k=c[d+44>>2]|0;c[f>>2]=k;c[f+(c[k+-16>>2]|0)>>2]=c[d+48>>2];k=c[d+8>>2]|0;c[j>>2]=k;c[j+(c[k+-16>>2]|0)>>2]=c[d+52>>2];c[i>>2]=c[d+56>>2];c[h>>2]=c[d+60>>2];c[g>>2]=c[d+64>>2];c[f>>2]=c[d+68>>2];k=b+24|0;c[k>>2]=0;c[k+4>>2]=0;c[k+8>>2]=0;c[k+12>>2]=0;c[k+16>>2]=0;c[k+20>>2]=0;k=c[d+4>>2]|0;c[b>>2]=k;c[j>>2]=c[d+72>>2];c[b+(c[k+-12>>2]|0)>>2]=c[d+76>>2];c[i>>2]=c[d+80>>2];c[h>>2]=c[d+84>>2];c[g>>2]=c[d+88>>2];c[f>>2]=c[d+92>>2];c[b+52>>2]=e;c[b+56>>2]=12880;e=b+60|0;c[e>>2]=0;a[b+64>>0]=0;c[e>>2]=b+(c[(c[b>>2]|0)+-12>>2]|0);e=c[d>>2]|0;c[b>>2]=e;c[j>>2]=c[d+96>>2];c[b+(c[e+-12>>2]|0)>>2]=c[d+100>>2];c[i>>2]=c[d+104>>2];c[h>>2]=c[d+108>>2];c[g>>2]=c[d+112>>2];c[f>>2]=c[d+116>>2];return}function yJ(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0;p=i;i=i+96|0;o=p+24|0;n=p+8|0;f=p+4|0;h=p;l=c[b+52>>2]|0;m=c[11306]|0;c[o>>2]=m;c[o+(c[m+-16>>2]|0)>>2]=c[11307];m=o+4|0;k=c[11308]|0;c[m>>2]=k;c[m+(c[k+-16>>2]|0)>>2]=c[11309];k=o+8|0;q=c[11310]|0;c[k>>2]=q;c[k+(c[q+-16>>2]|0)>>2]=c[11311];c[o>>2]=45116;c[o+4>>2]=45172;c[o+8>>2]=45204;q=o+20|0;c[q>>2]=0;c[q+4>>2]=0;c[q+8>>2]=0;c[q+12>>2]=0;c[o+48>>2]=l;c[o+60>>2]=12880;a[o+68>>0]=0;c[o+64>>2]=o+(c[11275]|0);c[n>>2]=0;l=n+4|0;c[l>>2]=0;c[n+8>>2]=0;e=c[e>>2]|0;c[f>>2]=e;if((e|0)!=0?(e=e+((c[(c[e>>2]|0)+-12>>2]|0)+4)|0,q=(c[e>>2]|0)+1|0,c[e>>2]=q,(q|0)==0):0)Ha(79054,79014,48,79068);tW(o,f,0,n);e=c[f>>2]|0;if((e|0)!=0?(f=c[(c[e>>2]|0)+-12>>2]|0,g=e+f|0,f=e+(f+4)|0,q=(c[f>>2]|0)+-1|0,c[f>>2]=q,!((g|0)==0|(q|0)!=0)):0)oc[c[(c[g>>2]|0)+4>>2]&2047](g);e=c[d>>2]|0;c[h>>2]=e;if((e|0)!=0?(d=e+((c[(c[e>>2]|0)+-12>>2]|0)+4)|0,q=(c[d>>2]|0)+1|0,c[d>>2]=q,(q|0)==0):0)Ha(79054,79014,48,79068);f=c[l>>2]|0;c[b+84>>2]=c[n>>2];c[b+88>>2]=f;f=vP(b,h)|0;e=c[h>>2]|0;if((e|0)!=0?(h=c[(c[e>>2]|0)+-12>>2]|0,j=e+h|0,h=e+(h+4)|0,q=(c[h>>2]|0)+-1|0,c[h>>2]=q,!((j|0)==0|(q|0)!=0)):0)oc[c[(c[j>>2]|0)+4>>2]&2047](j);if(f){g=o$(f,1576,8200,0)|0;if((g|0)!=0?(j=g+((c[(c[g>>2]|0)+-12>>2]|0)+4)|0,q=(c[j>>2]|0)+1|0,c[j>>2]=q,(q|0)==0):0)Ha(79054,79014,48,79068);j=c[(c[f>>2]|0)+-12>>2]|0;e=f+j|0;j=f+(j+4)|0;q=(c[j>>2]|0)+-1|0;c[j>>2]=q;if(!((e|0)==0|(q|0)!=0))oc[c[(c[e>>2]|0)+4>>2]&2047](e)}else g=0;e=c[n>>2]|0;if(!e){q=c[11305]|0;c[o>>2]=q;n=c[11312]|0;q=q+-16|0;q=c[q>>2]|0;q=o+q|0;c[q>>2]=n;q=c[11313]|0;c[m>>2]=q;q=c[11314]|0;c[k>>2]=q;q=o+24|0;o2(q);i=p;return g|0}while(1){f=c[l>>2]|0;if((f|0)==(e|0))break;q=f+-20|0;c[l>>2]=q;o2(q)}P_(c[n>>2]|0);q=c[11305]|0;c[o>>2]=q;n=c[11312]|0;q=q+-16|0;q=c[q>>2]|0;q=o+q|0;c[q>>2]=n;q=c[11313]|0;c[m>>2]=q;q=c[11314]|0;c[k>>2]=q;q=o+24|0;o2(q);i=p;return g|0}function zJ(a){a=a|0;var b=0,d=0,e=0,f=0,g=0;c[a+4>>2]=1136;c[a+8>>2]=1228;c[a+12>>2]=1260;c[a+16>>2]=1292;c[a+20>>2]=1324;g=a+24|0;pG(g);e=a+28|0;b=c[e>>2]|0;f=a+32|0;d=c[f>>2]|0;if((b|0)!=(d|0)){a=b;do{P_(c[a>>2]|0);a=a+4|0}while((a|0)!=(d|0));a=c[e>>2]|0;b=c[f>>2]|0;if((b|0)!=(a|0))c[f>>2]=b+(~((b+-4-a|0)>>>2)<<2)}a=c[g>>2]|0;if(!a)return;P_(a);return}function AJ(a){a=a|0;var b=0,d=0,e=0,f=0,g=0;c[a+4>>2]=1136;c[a+8>>2]=1228;c[a+12>>2]=1260;c[a+16>>2]=1292;c[a+20>>2]=1324;f=a+24|0;pG(f);d=a+28|0;b=c[d>>2]|0;g=a+32|0;e=c[g>>2]|0;if((b|0)!=(e|0)){do{P_(c[b>>2]|0);b=b+4|0}while((b|0)!=(e|0));b=c[d>>2]|0;d=c[g>>2]|0;if((d|0)!=(b|0))c[g>>2]=d+(~((d+-4-b|0)>>>2)<<2)}b=c[f>>2]|0;if(!b){P_(a);return}P_(b);P_(a);return}function BJ(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,j=0,k=0,l=0;j=i;i=i+32|0;g=j+20|0;h=j;f=zc[c[(c[b>>2]|0)+36>>2]&255](b,d)|0;c[g>>2]=f;if(!f){i=j;return}e=b+84|0;f=c[e>>2]|0;if((f|0)==(c[b+88>>2]|0)){pc[c[(c[b>>2]|0)+32>>2]&1023](b,g);b=b+4|0;Dc[c[(c[b>>2]|0)+56>>2]&63](b,g,0)}else{k2(h,f);l=f+12|0;k=c[l+4>>2]|0;f=h+12|0;c[f>>2]=c[l>>2];c[f+4>>2]=k;if(!(a[b+48>>0]|0)){Hc[c[(c[b>>2]|0)+16>>2]&15](b,g,h,b+72|0);l=b+4|0;Dc[c[(c[l>>2]|0)+56>>2]&63](l,g,0);c[e>>2]=(c[e>>2]|0)+20}else pc[c[(c[b>>2]|0)+28>>2]&1023](b,d);o2(h)}e=c[g>>2]|0;if(!e){i=j;return}k=c[(c[e>>2]|0)+-12>>2]|0;f=e+k|0;k=e+(k+4)|0;l=(c[k>>2]|0)+-1|0;c[k>>2]=l;if((f|0)==0|(l|0)!=0){i=j;return}oc[c[(c[f>>2]|0)+4>>2]&2047](f);i=j;return}function CJ(a,b){a=a|0;b=b|0;Dc[c[(c[a>>2]|0)+20>>2]&63](a,b,(c[a+84>>2]|0)==(c[a+88>>2]|0));return}function DJ(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;d=a+84|0;e=c[d>>2]|0;f=c[(c[a>>2]|0)+24>>2]|0;if((e|0)==(c[a+88>>2]|0)){Hc[f&15](a,b,0,1);return}else{e=DW(e)|0;Hc[f&15](a,b,e,0);c[d>>2]=(c[d>>2]|0)+20;return}}function EJ(a){a=a|0;var b=0,d=0,e=0,f=0;f=a+-4|0;c[f+4>>2]=1136;c[f+8>>2]=1228;c[f+12>>2]=1260;c[f+16>>2]=1292;c[f+20>>2]=1324;e=f+24|0;pG(e);d=f+28|0;a=c[d>>2]|0;f=f+32|0;b=c[f>>2]|0;if((a|0)!=(b|0)){do{P_(c[a>>2]|0);a=a+4|0}while((a|0)!=(b|0));a=c[d>>2]|0;b=c[f>>2]|0;if((b|0)!=(a|0))c[f>>2]=b+(~((b+-4-a|0)>>>2)<<2)}a=c[e>>2]|0;if(!a)return;P_(a);return}function FJ(a){a=a|0;var b=0,d=0,e=0,f=0,g=0;g=a+-4|0;c[g+4>>2]=1136;c[g+8>>2]=1228;c[g+12>>2]=1260;c[g+16>>2]=1292;c[g+20>>2]=1324;e=g+24|0;pG(e);d=g+28|0;a=c[d>>2]|0;f=g+32|0;b=c[f>>2]|0;if((a|0)!=(b|0)){do{P_(c[a>>2]|0);a=a+4|0}while((a|0)!=(b|0));a=c[d>>2]|0;b=c[f>>2]|0;if((b|0)!=(a|0))c[f>>2]=b+(~((b+-4-a|0)>>>2)<<2)}a=c[e>>2]|0;if(!a){P_(g);return}P_(a);P_(g);return}function GJ(a,b){a=a|0;b=b|0;a=a+-4|0;Dc[c[(c[a>>2]|0)+20>>2]&63](a,b,(c[a+84>>2]|0)==(c[a+88>>2]|0));return}function HJ(a,b){a=a|0;b=b|0;BJ(a+-4|0,b);return}function IJ(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;a=a+-4|0;d=a+84|0;e=c[d>>2]|0;f=c[(c[a>>2]|0)+24>>2]|0;if((e|0)==(c[a+88>>2]|0)){Hc[f&15](a,b,0,1);return}else{e=DW(e)|0;Hc[f&15](a,b,e,0);c[d>>2]=(c[d>>2]|0)+20;return}}function JJ(a){a=a|0;var b=0,d=0,e=0,f=0;f=a+-8|0;c[f+4>>2]=1136;c[f+8>>2]=1228;c[f+12>>2]=1260;c[f+16>>2]=1292;c[f+20>>2]=1324;e=f+24|0;pG(e);d=f+28|0;a=c[d>>2]|0;f=f+32|0;b=c[f>>2]|0;if((a|0)!=(b|0)){do{P_(c[a>>2]|0);a=a+4|0}while((a|0)!=(b|0));a=c[d>>2]|0;b=c[f>>2]|0;if((b|0)!=(a|0))c[f>>2]=b+(~((b+-4-a|0)>>>2)<<2)}a=c[e>>2]|0;if(!a)return;P_(a);return}function KJ(a){a=a|0;var b=0,d=0,e=0,f=0,g=0;g=a+-8|0;c[g+4>>2]=1136;c[g+8>>2]=1228;c[g+12>>2]=1260;c[g+16>>2]=1292;c[g+20>>2]=1324;e=g+24|0;pG(e);d=g+28|0;a=c[d>>2]|0;f=g+32|0;b=c[f>>2]|0;if((a|0)!=(b|0)){do{P_(c[a>>2]|0);a=a+4|0}while((a|0)!=(b|0));a=c[d>>2]|0;b=c[f>>2]|0;if((b|0)!=(a|0))c[f>>2]=b+(~((b+-4-a|0)>>>2)<<2)}a=c[e>>2]|0;if(!a){P_(g);return}P_(a);P_(g);return}function LJ(a){a=a|0;var b=0,d=0,e=0,f=0;f=a+-12|0;c[f+4>>2]=1136;c[f+8>>2]=1228;c[f+12>>2]=1260;c[f+16>>2]=1292;c[f+20>>2]=1324;e=f+24|0;pG(e);d=f+28|0;a=c[d>>2]|0;f=f+32|0;b=c[f>>2]|0;if((a|0)!=(b|0)){do{P_(c[a>>2]|0);a=a+4|0}while((a|0)!=(b|0));a=c[d>>2]|0;b=c[f>>2]|0;if((b|0)!=(a|0))c[f>>2]=b+(~((b+-4-a|0)>>>2)<<2)}a=c[e>>2]|0;if(!a)return;P_(a);return}function MJ(a){a=a|0;var b=0,d=0,e=0,f=0,g=0;g=a+-12|0;c[g+4>>2]=1136;c[g+8>>2]=1228;c[g+12>>2]=1260;c[g+16>>2]=1292;c[g+20>>2]=1324;e=g+24|0;pG(e);d=g+28|0;a=c[d>>2]|0;f=g+32|0;b=c[f>>2]|0;if((a|0)!=(b|0)){do{P_(c[a>>2]|0);a=a+4|0}while((a|0)!=(b|0));a=c[d>>2]|0;b=c[f>>2]|0;if((b|0)!=(a|0))c[f>>2]=b+(~((b+-4-a|0)>>>2)<<2)}a=c[e>>2]|0;if(!a){P_(g);return}P_(a);P_(g);return}function NJ(a,b){a=a|0;b=b|0;a=a+-12|0;Dc[c[(c[a>>2]|0)+20>>2]&63](a,b,(c[a+84>>2]|0)==(c[a+88>>2]|0));return}function OJ(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;a=a+-12|0;d=a+84|0;e=c[d>>2]|0;f=c[(c[a>>2]|0)+24>>2]|0;if((e|0)==(c[a+88>>2]|0)){Hc[f&15](a,b,0,1);return}else{e=DW(e)|0;Hc[f&15](a,b,e,0);c[d>>2]=(c[d>>2]|0)+20;return}}function PJ(a){a=a|0;var b=0,d=0,e=0,f=0;f=a+-16|0;c[f+4>>2]=1136;c[f+8>>2]=1228;c[f+12>>2]=1260;c[f+16>>2]=1292;c[f+20>>2]=1324;e=f+24|0;pG(e);d=f+28|0;a=c[d>>2]|0;f=f+32|0;b=c[f>>2]|0;if((a|0)!=(b|0)){do{P_(c[a>>2]|0);a=a+4|0}while((a|0)!=(b|0));a=c[d>>2]|0;b=c[f>>2]|0;if((b|0)!=(a|0))c[f>>2]=b+(~((b+-4-a|0)>>>2)<<2)}a=c[e>>2]|0;if(!a)return;P_(a);return}function QJ(a){a=a|0;var b=0,d=0,e=0,f=0,g=0;g=a+-16|0;c[g+4>>2]=1136;c[g+8>>2]=1228;c[g+12>>2]=1260;c[g+16>>2]=1292;c[g+20>>2]=1324;e=g+24|0;pG(e);d=g+28|0;a=c[d>>2]|0;f=g+32|0;b=c[f>>2]|0;if((a|0)!=(b|0)){do{P_(c[a>>2]|0);a=a+4|0}while((a|0)!=(b|0));a=c[d>>2]|0;b=c[f>>2]|0;if((b|0)!=(a|0))c[f>>2]=b+(~((b+-4-a|0)>>>2)<<2)}a=c[e>>2]|0;if(!a){P_(g);return}P_(a);P_(g);return}function RJ(a,b){a=a|0;b=b|0;BJ(a+-16|0,b);return}function SJ(a){a=a|0;var b=0,d=0,e=0,f=0;f=a+-20|0;c[f+4>>2]=1136;c[f+8>>2]=1228;c[f+12>>2]=1260;c[f+16>>2]=1292;c[f+20>>2]=1324;e=f+24|0;pG(e);d=f+28|0;a=c[d>>2]|0;f=f+32|0;b=c[f>>2]|0;if((a|0)!=(b|0)){do{P_(c[a>>2]|0);a=a+4|0}while((a|0)!=(b|0));a=c[d>>2]|0;b=c[f>>2]|0;if((b|0)!=(a|0))c[f>>2]=b+(~((b+-4-a|0)>>>2)<<2)}a=c[e>>2]|0;if(!a)return;P_(a);return}function TJ(a){a=a|0;var b=0,d=0,e=0,f=0,g=0;g=a+-20|0;c[g+4>>2]=1136;c[g+8>>2]=1228;c[g+12>>2]=1260;c[g+16>>2]=1292;c[g+20>>2]=1324;e=g+24|0;pG(e);d=g+28|0;a=c[d>>2]|0;f=g+32|0;b=c[f>>2]|0;if((a|0)!=(b|0)){do{P_(c[a>>2]|0);a=a+4|0}while((a|0)!=(b|0));a=c[d>>2]|0;b=c[f>>2]|0;if((b|0)!=(a|0))c[f>>2]=b+(~((b+-4-a|0)>>>2)<<2)}a=c[e>>2]|0;if(!a){P_(g);return}P_(a);P_(g);return}function UJ(a){a=a|0;var b=0,d=0,e=0,f=0,g=0;c[a+4>>2]=1136;c[a+8>>2]=1228;c[a+12>>2]=1260;c[a+16>>2]=1292;c[a+20>>2]=1324;g=a+24|0;pG(g);e=a+28|0;b=c[e>>2]|0;f=a+32|0;d=c[f>>2]|0;if((b|0)!=(d|0)){a=b;do{P_(c[a>>2]|0);a=a+4|0}while((a|0)!=(d|0));a=c[e>>2]|0;b=c[f>>2]|0;if((b|0)!=(a|0))c[f>>2]=b+(~((b+-4-a|0)>>>2)<<2)}a=c[g>>2]|0;if(!a)return;P_(a);return}function VJ(a){a=a|0;var b=0,d=0,e=0,f=0,g=0;c[a+4>>2]=1136;c[a+8>>2]=1228;c[a+12>>2]=1260;c[a+16>>2]=1292;c[a+20>>2]=1324;f=a+24|0;pG(f);d=a+28|0;b=c[d>>2]|0;g=a+32|0;e=c[g>>2]|0;if((b|0)!=(e|0)){do{P_(c[b>>2]|0);b=b+4|0}while((b|0)!=(e|0));b=c[d>>2]|0;d=c[g>>2]|0;if((d|0)!=(b|0))c[g>>2]=d+(~((d+-4-b|0)>>>2)<<2)}b=c[f>>2]|0;if(!b){P_(a);return}P_(b);P_(a);return}function WJ(a){a=a|0;var b=0,d=0,e=0,f=0;f=a+-4|0;c[f+4>>2]=1136;c[f+8>>2]=1228;c[f+12>>2]=1260;c[f+16>>2]=1292;c[f+20>>2]=1324;e=f+24|0;pG(e);d=f+28|0;a=c[d>>2]|0;f=f+32|0;b=c[f>>2]|0;if((a|0)!=(b|0)){do{P_(c[a>>2]|0);a=a+4|0}while((a|0)!=(b|0));a=c[d>>2]|0;b=c[f>>2]|0;if((b|0)!=(a|0))c[f>>2]=b+(~((b+-4-a|0)>>>2)<<2)}a=c[e>>2]|0;if(!a)return;P_(a);return}function XJ(a){a=a|0;var b=0,d=0,e=0,f=0,g=0;g=a+-4|0;c[g+4>>2]=1136;c[g+8>>2]=1228;c[g+12>>2]=1260;c[g+16>>2]=1292;c[g+20>>2]=1324;e=g+24|0;pG(e);d=g+28|0;a=c[d>>2]|0;f=g+32|0;b=c[f>>2]|0;if((a|0)!=(b|0)){do{P_(c[a>>2]|0);a=a+4|0}while((a|0)!=(b|0));a=c[d>>2]|0;b=c[f>>2]|0;if((b|0)!=(a|0))c[f>>2]=b+(~((b+-4-a|0)>>>2)<<2)}a=c[e>>2]|0;if(!a){P_(g);return}P_(a);P_(g);return}function YJ(a){a=a|0;var b=0,d=0,e=0,f=0;f=a+-8|0;c[f+4>>2]=1136;c[f+8>>2]=1228;c[f+12>>2]=1260;c[f+16>>2]=1292;c[f+20>>2]=1324;e=f+24|0;pG(e);d=f+28|0;a=c[d>>2]|0;f=f+32|0;b=c[f>>2]|0;if((a|0)!=(b|0)){do{P_(c[a>>2]|0);a=a+4|0}while((a|0)!=(b|0));a=c[d>>2]|0;b=c[f>>2]|0;if((b|0)!=(a|0))c[f>>2]=b+(~((b+-4-a|0)>>>2)<<2)}a=c[e>>2]|0;if(!a)return;P_(a);return}function ZJ(a){a=a|0;var b=0,d=0,e=0,f=0,g=0;g=a+-8|0;c[g+4>>2]=1136;c[g+8>>2]=1228;c[g+12>>2]=1260;c[g+16>>2]=1292;c[g+20>>2]=1324;e=g+24|0;pG(e);d=g+28|0;a=c[d>>2]|0;f=g+32|0;b=c[f>>2]|0;if((a|0)!=(b|0)){do{P_(c[a>>2]|0);a=a+4|0}while((a|0)!=(b|0));a=c[d>>2]|0;b=c[f>>2]|0;if((b|0)!=(a|0))c[f>>2]=b+(~((b+-4-a|0)>>>2)<<2)}a=c[e>>2]|0;if(!a){P_(g);return}P_(a);P_(g);return}function _J(a){a=a|0;var b=0,d=0,e=0,f=0;f=a+-12|0;c[f+4>>2]=1136;c[f+8>>2]=1228;c[f+12>>2]=1260;c[f+16>>2]=1292;c[f+20>>2]=1324;e=f+24|0;pG(e);d=f+28|0;a=c[d>>2]|0;f=f+32|0;b=c[f>>2]|0;if((a|0)!=(b|0)){do{P_(c[a>>2]|0);a=a+4|0}while((a|0)!=(b|0));a=c[d>>2]|0;b=c[f>>2]|0;if((b|0)!=(a|0))c[f>>2]=b+(~((b+-4-a|0)>>>2)<<2)}a=c[e>>2]|0;if(!a)return;P_(a);return}function $J(a){a=a|0;var b=0,d=0,e=0,f=0,g=0;g=a+-12|0;c[g+4>>2]=1136;c[g+8>>2]=1228;c[g+12>>2]=1260;c[g+16>>2]=1292;c[g+20>>2]=1324;e=g+24|0;pG(e);d=g+28|0;a=c[d>>2]|0;f=g+32|0;b=c[f>>2]|0;if((a|0)!=(b|0)){do{P_(c[a>>2]|0);a=a+4|0}while((a|0)!=(b|0));a=c[d>>2]|0;b=c[f>>2]|0;if((b|0)!=(a|0))c[f>>2]=b+(~((b+-4-a|0)>>>2)<<2)}a=c[e>>2]|0;if(!a){P_(g);return}P_(a);P_(g);return}function aK(a){a=a|0;var b=0,d=0,e=0,f=0;f=a+-16|0;c[f+4>>2]=1136;c[f+8>>2]=1228;c[f+12>>2]=1260;c[f+16>>2]=1292;c[f+20>>2]=1324;e=f+24|0;pG(e);d=f+28|0;a=c[d>>2]|0;f=f+32|0;b=c[f>>2]|0;if((a|0)!=(b|0)){do{P_(c[a>>2]|0);a=a+4|0}while((a|0)!=(b|0));a=c[d>>2]|0;b=c[f>>2]|0;if((b|0)!=(a|0))c[f>>2]=b+(~((b+-4-a|0)>>>2)<<2)}a=c[e>>2]|0;if(!a)return;P_(a);return}function bK(a){a=a|0;var b=0,d=0,e=0,f=0,g=0;g=a+-16|0;c[g+4>>2]=1136;c[g+8>>2]=1228;c[g+12>>2]=1260;c[g+16>>2]=1292;c[g+20>>2]=1324;e=g+24|0;pG(e);d=g+28|0;a=c[d>>2]|0;f=g+32|0;b=c[f>>2]|0;if((a|0)!=(b|0)){do{P_(c[a>>2]|0);a=a+4|0}while((a|0)!=(b|0));a=c[d>>2]|0;b=c[f>>2]|0;if((b|0)!=(a|0))c[f>>2]=b+(~((b+-4-a|0)>>>2)<<2)}a=c[e>>2]|0;if(!a){P_(g);return}P_(a);P_(g);return}function cK(a){a=a|0;var b=0,d=0,e=0,f=0;f=a+-20|0;c[f+4>>2]=1136;c[f+8>>2]=1228;c[f+12>>2]=1260;c[f+16>>2]=1292;c[f+20>>2]=1324;e=f+24|0;pG(e);d=f+28|0;a=c[d>>2]|0;f=f+32|0;b=c[f>>2]|0;if((a|0)!=(b|0)){do{P_(c[a>>2]|0);a=a+4|0}while((a|0)!=(b|0));a=c[d>>2]|0;b=c[f>>2]|0;if((b|0)!=(a|0))c[f>>2]=b+(~((b+-4-a|0)>>>2)<<2)}a=c[e>>2]|0;if(!a)return;P_(a);return}function dK(a){a=a|0;var b=0,d=0,e=0,f=0,g=0;g=a+-20|0;c[g+4>>2]=1136;c[g+8>>2]=1228;c[g+12>>2]=1260;c[g+16>>2]=1292;c[g+20>>2]=1324;e=g+24|0;pG(e);d=g+28|0;a=c[d>>2]|0;f=g+32|0;b=c[f>>2]|0;if((a|0)!=(b|0)){do{P_(c[a>>2]|0);a=a+4|0}while((a|0)!=(b|0));a=c[d>>2]|0;b=c[f>>2]|0;if((b|0)!=(a|0))c[f>>2]=b+(~((b+-4-a|0)>>>2)<<2)}a=c[e>>2]|0;if(!a){P_(g);return}P_(a);P_(g);return}function eK(a){a=a|0;var b=0,d=0,e=0,f=0,g=0;c[a+4>>2]=1136;c[a+8>>2]=1228;c[a+12>>2]=1260;c[a+16>>2]=1292;c[a+20>>2]=1324;g=a+24|0;pG(g);e=a+28|0;b=c[e>>2]|0;f=a+32|0;d=c[f>>2]|0;if((b|0)!=(d|0)){a=b;do{P_(c[a>>2]|0);a=a+4|0}while((a|0)!=(d|0));a=c[e>>2]|0;b=c[f>>2]|0;if((b|0)!=(a|0))c[f>>2]=b+(~((b+-4-a|0)>>>2)<<2)}a=c[g>>2]|0;if(!a)return;P_(a);return}function fK(a){a=a|0;var b=0,d=0,e=0,f=0,g=0;c[a+4>>2]=1136;c[a+8>>2]=1228;c[a+12>>2]=1260;c[a+16>>2]=1292;c[a+20>>2]=1324;f=a+24|0;pG(f);d=a+28|0;b=c[d>>2]|0;g=a+32|0;e=c[g>>2]|0;if((b|0)!=(e|0)){do{P_(c[b>>2]|0);b=b+4|0}while((b|0)!=(e|0));b=c[d>>2]|0;d=c[g>>2]|0;if((d|0)!=(b|0))c[g>>2]=d+(~((d+-4-b|0)>>>2)<<2)}b=c[f>>2]|0;if(!b){P_(a);return}P_(b);P_(a);return}function gK(a){a=a|0;var b=0,d=0,e=0,f=0;f=a+-4|0;c[f+4>>2]=1136;c[f+8>>2]=1228;c[f+12>>2]=1260;c[f+16>>2]=1292;c[f+20>>2]=1324;e=f+24|0;pG(e);d=f+28|0;a=c[d>>2]|0;f=f+32|0;b=c[f>>2]|0;if((a|0)!=(b|0)){do{P_(c[a>>2]|0);a=a+4|0}while((a|0)!=(b|0));a=c[d>>2]|0;b=c[f>>2]|0;if((b|0)!=(a|0))c[f>>2]=b+(~((b+-4-a|0)>>>2)<<2)}a=c[e>>2]|0;if(!a)return;P_(a);return}function hK(a){a=a|0;var b=0,d=0,e=0,f=0,g=0;g=a+-4|0;c[g+4>>2]=1136;c[g+8>>2]=1228;c[g+12>>2]=1260;c[g+16>>2]=1292;c[g+20>>2]=1324;e=g+24|0;pG(e);d=g+28|0;a=c[d>>2]|0;f=g+32|0;b=c[f>>2]|0;if((a|0)!=(b|0)){do{P_(c[a>>2]|0);a=a+4|0}while((a|0)!=(b|0));a=c[d>>2]|0;b=c[f>>2]|0;if((b|0)!=(a|0))c[f>>2]=b+(~((b+-4-a|0)>>>2)<<2)}a=c[e>>2]|0;if(!a){P_(g);return}P_(a);P_(g);return}function iK(a){a=a|0;var b=0,d=0,e=0,f=0;f=a+-8|0;c[f+4>>2]=1136;c[f+8>>2]=1228;c[f+12>>2]=1260;c[f+16>>2]=1292;c[f+20>>2]=1324;e=f+24|0;pG(e);d=f+28|0;a=c[d>>2]|0;f=f+32|0;b=c[f>>2]|0;if((a|0)!=(b|0)){do{P_(c[a>>2]|0);a=a+4|0}while((a|0)!=(b|0));a=c[d>>2]|0;b=c[f>>2]|0;if((b|0)!=(a|0))c[f>>2]=b+(~((b+-4-a|0)>>>2)<<2)}a=c[e>>2]|0;if(!a)return;P_(a);return}function jK(a){a=a|0;var b=0,d=0,e=0,f=0,g=0;g=a+-8|0;c[g+4>>2]=1136;c[g+8>>2]=1228;c[g+12>>2]=1260;c[g+16>>2]=1292;c[g+20>>2]=1324;e=g+24|0;pG(e);d=g+28|0;a=c[d>>2]|0;f=g+32|0;b=c[f>>2]|0;if((a|0)!=(b|0)){do{P_(c[a>>2]|0);a=a+4|0}while((a|0)!=(b|0));a=c[d>>2]|0;b=c[f>>2]|0;if((b|0)!=(a|0))c[f>>2]=b+(~((b+-4-a|0)>>>2)<<2)}a=c[e>>2]|0;if(!a){P_(g);return}P_(a);P_(g);return}function kK(a){a=a|0;var b=0,d=0,e=0,f=0;f=a+-12|0;c[f+4>>2]=1136;c[f+8>>2]=1228;c[f+12>>2]=1260;c[f+16>>2]=1292;c[f+20>>2]=1324;e=f+24|0;pG(e);d=f+28|0;a=c[d>>2]|0;f=f+32|0;b=c[f>>2]|0;if((a|0)!=(b|0)){do{P_(c[a>>2]|0);a=a+4|0}while((a|0)!=(b|0));a=c[d>>2]|0;b=c[f>>2]|0;if((b|0)!=(a|0))c[f>>2]=b+(~((b+-4-a|0)>>>2)<<2)}a=c[e>>2]|0;if(!a)return;P_(a);return}function lK(a){a=a|0;var b=0,d=0,e=0,f=0,g=0;g=a+-12|0;c[g+4>>2]=1136;c[g+8>>2]=1228;c[g+12>>2]=1260;c[g+16>>2]=1292;c[g+20>>2]=1324;e=g+24|0;pG(e);d=g+28|0;a=c[d>>2]|0;f=g+32|0;b=c[f>>2]|0;if((a|0)!=(b|0)){do{P_(c[a>>2]|0);a=a+4|0}while((a|0)!=(b|0));a=c[d>>2]|0;b=c[f>>2]|0;if((b|0)!=(a|0))c[f>>2]=b+(~((b+-4-a|0)>>>2)<<2)}a=c[e>>2]|0;if(!a){P_(g);return}P_(a);P_(g);return}function mK(a){a=a|0;var b=0,d=0,e=0,f=0;f=a+-16|0;c[f+4>>2]=1136;c[f+8>>2]=1228;c[f+12>>2]=1260;c[f+16>>2]=1292;c[f+20>>2]=1324;e=f+24|0;pG(e);d=f+28|0;a=c[d>>2]|0;f=f+32|0;b=c[f>>2]|0;if((a|0)!=(b|0)){do{P_(c[a>>2]|0);a=a+4|0}while((a|0)!=(b|0));a=c[d>>2]|0;b=c[f>>2]|0;if((b|0)!=(a|0))c[f>>2]=b+(~((b+-4-a|0)>>>2)<<2)}a=c[e>>2]|0;if(!a)return;P_(a);return}function nK(a){a=a|0;var b=0,d=0,e=0,f=0,g=0;g=a+-16|0;c[g+4>>2]=1136;c[g+8>>2]=1228;c[g+12>>2]=1260;c[g+16>>2]=1292;c[g+20>>2]=1324;e=g+24|0;pG(e);d=g+28|0;a=c[d>>2]|0;f=g+32|0;b=c[f>>2]|0;if((a|0)!=(b|0)){do{P_(c[a>>2]|0);a=a+4|0}while((a|0)!=(b|0));a=c[d>>2]|0;b=c[f>>2]|0;if((b|0)!=(a|0))c[f>>2]=b+(~((b+-4-a|0)>>>2)<<2)}a=c[e>>2]|0;if(!a){P_(g);return}P_(a);P_(g);return}function oK(a){a=a|0;var b=0,d=0,e=0,f=0;f=a+-20|0;c[a+-16>>2]=1136;c[a+-12>>2]=1228;c[a+-8>>2]=1260;c[a+-4>>2]=1292;c[f+20>>2]=1324;e=f+24|0;pG(e);d=f+28|0;a=c[d>>2]|0;f=f+32|0;b=c[f>>2]|0;if((a|0)!=(b|0)){do{P_(c[a>>2]|0);a=a+4|0}while((a|0)!=(b|0));a=c[d>>2]|0;b=c[f>>2]|0;if((b|0)!=(a|0))c[f>>2]=b+(~((b+-4-a|0)>>>2)<<2)}a=c[e>>2]|0;if(!a)return;P_(a);return}function pK(a){a=a|0;var b=0,d=0,e=0,f=0,g=0;g=a+-20|0;c[a+-16>>2]=1136;c[a+-12>>2]=1228;c[a+-8>>2]=1260;c[a+-4>>2]=1292;c[g+20>>2]=1324;e=g+24|0;pG(e);d=g+28|0;a=c[d>>2]|0;f=g+32|0;b=c[f>>2]|0;if((a|0)!=(b|0)){do{P_(c[a>>2]|0);a=a+4|0}while((a|0)!=(b|0));a=c[d>>2]|0;b=c[f>>2]|0;if((b|0)!=(a|0))c[f>>2]=b+(~((b+-4-a|0)>>>2)<<2)}a=c[e>>2]|0;if(!a){P_(g);return}P_(a);P_(g);return}function qK(a){a=a|0;var b=0,d=0,e=0,f=0,g=0;c[a+4>>2]=1136;c[a+8>>2]=1228;c[a+12>>2]=1260;c[a+16>>2]=1292;c[a+20>>2]=1324;g=a+24|0;pG(g);e=a+28|0;b=c[e>>2]|0;f=a+32|0;d=c[f>>2]|0;if((b|0)!=(d|0)){a=b;do{P_(c[a>>2]|0);a=a+4|0}while((a|0)!=(d|0));a=c[e>>2]|0;b=c[f>>2]|0;if((b|0)!=(a|0))c[f>>2]=b+(~((b+-4-a|0)>>>2)<<2)}a=c[g>>2]|0;if(!a)return;P_(a);return}function rK(a){a=a|0;var b=0,d=0,e=0,f=0,g=0;c[a+4>>2]=1136;c[a+8>>2]=1228;c[a+12>>2]=1260;c[a+16>>2]=1292;c[a+20>>2]=1324;f=a+24|0;pG(f);d=a+28|0;b=c[d>>2]|0;g=a+32|0;e=c[g>>2]|0;if((b|0)!=(e|0)){do{P_(c[b>>2]|0);b=b+4|0}while((b|0)!=(e|0));b=c[d>>2]|0;d=c[g>>2]|0;if((d|0)!=(b|0))c[g>>2]=d+(~((d+-4-b|0)>>>2)<<2)}b=c[f>>2]|0;if(!b){P_(a);return}P_(b);P_(a);return}function sK(a){a=a|0;var b=0,d=0,e=0,f=0;f=a+-4|0;c[f+4>>2]=1136;c[f+8>>2]=1228;c[f+12>>2]=1260;c[f+16>>2]=1292;c[f+20>>2]=1324;e=f+24|0;pG(e);d=f+28|0;a=c[d>>2]|0;f=f+32|0;b=c[f>>2]|0;if((a|0)!=(b|0)){do{P_(c[a>>2]|0);a=a+4|0}while((a|0)!=(b|0));a=c[d>>2]|0;b=c[f>>2]|0;if((b|0)!=(a|0))c[f>>2]=b+(~((b+-4-a|0)>>>2)<<2)}a=c[e>>2]|0;if(!a)return;P_(a);return}function tK(a){a=a|0;var b=0,d=0,e=0,f=0,g=0;g=a+-4|0;c[g+4>>2]=1136;c[g+8>>2]=1228;c[g+12>>2]=1260;c[g+16>>2]=1292;c[g+20>>2]=1324;e=g+24|0;pG(e);d=g+28|0;a=c[d>>2]|0;f=g+32|0;b=c[f>>2]|0;if((a|0)!=(b|0)){do{P_(c[a>>2]|0);a=a+4|0}while((a|0)!=(b|0));a=c[d>>2]|0;b=c[f>>2]|0;if((b|0)!=(a|0))c[f>>2]=b+(~((b+-4-a|0)>>>2)<<2)}a=c[e>>2]|0;if(!a){P_(g);return}P_(a);P_(g);return}function uK(a){a=a|0;var b=0,d=0,e=0,f=0;f=a+-8|0;c[f+4>>2]=1136;c[f+8>>2]=1228;c[f+12>>2]=1260;c[f+16>>2]=1292;c[f+20>>2]=1324;e=f+24|0;pG(e);d=f+28|0;a=c[d>>2]|0;f=f+32|0;b=c[f>>2]|0;if((a|0)!=(b|0)){do{P_(c[a>>2]|0);a=a+4|0}while((a|0)!=(b|0));a=c[d>>2]|0;b=c[f>>2]|0;if((b|0)!=(a|0))c[f>>2]=b+(~((b+-4-a|0)>>>2)<<2)}a=c[e>>2]|0;if(!a)return;P_(a);return}function vK(a){a=a|0;var b=0,d=0,e=0,f=0,g=0;g=a+-8|0;c[g+4>>2]=1136;c[g+8>>2]=1228;c[g+12>>2]=1260;c[g+16>>2]=1292;c[g+20>>2]=1324;e=g+24|0;pG(e);d=g+28|0;a=c[d>>2]|0;f=g+32|0;b=c[f>>2]|0;if((a|0)!=(b|0)){do{P_(c[a>>2]|0);a=a+4|0}while((a|0)!=(b|0));a=c[d>>2]|0;b=c[f>>2]|0;if((b|0)!=(a|0))c[f>>2]=b+(~((b+-4-a|0)>>>2)<<2)}a=c[e>>2]|0;if(!a){P_(g);return}P_(a);P_(g);return}function wK(a){a=a|0;var b=0,d=0,e=0,f=0;f=a+-12|0;c[f+4>>2]=1136;c[f+8>>2]=1228;c[f+12>>2]=1260;c[f+16>>2]=1292;c[f+20>>2]=1324;e=f+24|0;pG(e);d=f+28|0;a=c[d>>2]|0;f=f+32|0;b=c[f>>2]|0;if((a|0)!=(b|0)){do{P_(c[a>>2]|0);a=a+4|0}while((a|0)!=(b|0));a=c[d>>2]|0;b=c[f>>2]|0;if((b|0)!=(a|0))c[f>>2]=b+(~((b+-4-a|0)>>>2)<<2)}a=c[e>>2]|0;if(!a)return;P_(a);return}function xK(a){a=a|0;var b=0,d=0,e=0,f=0,g=0;g=a+-12|0;c[g+4>>2]=1136;c[g+8>>2]=1228;c[g+12>>2]=1260;c[g+16>>2]=1292;c[g+20>>2]=1324;e=g+24|0;pG(e);d=g+28|0;a=c[d>>2]|0;f=g+32|0;b=c[f>>2]|0;if((a|0)!=(b|0)){do{P_(c[a>>2]|0);a=a+4|0}while((a|0)!=(b|0));a=c[d>>2]|0;b=c[f>>2]|0;if((b|0)!=(a|0))c[f>>2]=b+(~((b+-4-a|0)>>>2)<<2)}a=c[e>>2]|0;if(!a){P_(g);return}P_(a);P_(g);return}function yK(a){a=a|0;var b=0,d=0,e=0,f=0;f=a+-16|0;c[a+-12>>2]=1136;c[a+-8>>2]=1228;c[a+-4>>2]=1260;c[f+16>>2]=1292;c[f+20>>2]=1324;e=f+24|0;pG(e);d=f+28|0;a=c[d>>2]|0;f=f+32|0;b=c[f>>2]|0;if((a|0)!=(b|0)){do{P_(c[a>>2]|0);a=a+4|0}while((a|0)!=(b|0));a=c[d>>2]|0;b=c[f>>2]|0;if((b|0)!=(a|0))c[f>>2]=b+(~((b+-4-a|0)>>>2)<<2)}a=c[e>>2]|0;if(!a)return;P_(a);return}function zK(a){a=a|0;var b=0,d=0,e=0,f=0,g=0;g=a+-16|0;c[a+-12>>2]=1136;c[a+-8>>2]=1228;c[a+-4>>2]=1260;c[g+16>>2]=1292;c[g+20>>2]=1324;e=g+24|0;pG(e);d=g+28|0;a=c[d>>2]|0;f=g+32|0;b=c[f>>2]|0;if((a|0)!=(b|0)){do{P_(c[a>>2]|0);a=a+4|0}while((a|0)!=(b|0));a=c[d>>2]|0;b=c[f>>2]|0;if((b|0)!=(a|0))c[f>>2]=b+(~((b+-4-a|0)>>>2)<<2)}a=c[e>>2]|0;if(!a){P_(g);return}P_(a);P_(g);return}function AK(a){a=a|0;var b=0,d=0,e=0,f=0;f=a+-20|0;c[f+4>>2]=1136;c[f+8>>2]=1228;c[f+12>>2]=1260;c[f+16>>2]=1292;c[f+20>>2]=1324;e=f+24|0;pG(e);d=f+28|0;a=c[d>>2]|0;f=f+32|0;b=c[f>>2]|0;if((a|0)!=(b|0)){do{P_(c[a>>2]|0);a=a+4|0}while((a|0)!=(b|0));a=c[d>>2]|0;b=c[f>>2]|0;if((b|0)!=(a|0))c[f>>2]=b+(~((b+-4-a|0)>>>2)<<2)}a=c[e>>2]|0;if(!a)return;P_(a);return}function BK(a){a=a|0;var b=0,d=0,e=0,f=0,g=0;g=a+-20|0;c[g+4>>2]=1136;c[g+8>>2]=1228;c[g+12>>2]=1260;c[g+16>>2]=1292;c[g+20>>2]=1324;e=g+24|0;pG(e);d=g+28|0;a=c[d>>2]|0;f=g+32|0;b=c[f>>2]|0;if((a|0)!=(b|0)){do{P_(c[a>>2]|0);a=a+4|0}while((a|0)!=(b|0));a=c[d>>2]|0;b=c[f>>2]|0;if((b|0)!=(a|0))c[f>>2]=b+(~((b+-4-a|0)>>>2)<<2)}a=c[e>>2]|0;if(!a){P_(g);return}P_(a);P_(g);return}function CK(a){a=a|0;var b=0,d=0,e=0,f=0,g=0;c[a+4>>2]=1136;c[a+8>>2]=1228;c[a+12>>2]=1260;c[a+16>>2]=1292;c[a+20>>2]=1324;g=a+24|0;pG(g);e=a+28|0;b=c[e>>2]|0;f=a+32|0;d=c[f>>2]|0;if((b|0)!=(d|0)){a=b;do{P_(c[a>>2]|0);a=a+4|0}while((a|0)!=(d|0));a=c[e>>2]|0;b=c[f>>2]|0;if((b|0)!=(a|0))c[f>>2]=b+(~((b+-4-a|0)>>>2)<<2)}a=c[g>>2]|0;if(!a)return;P_(a);return}function DK(a){a=a|0;var b=0,d=0,e=0,f=0,g=0;c[a+4>>2]=1136;c[a+8>>2]=1228;c[a+12>>2]=1260;c[a+16>>2]=1292;c[a+20>>2]=1324;f=a+24|0;pG(f);d=a+28|0;b=c[d>>2]|0;g=a+32|0;e=c[g>>2]|0;if((b|0)!=(e|0)){do{P_(c[b>>2]|0);b=b+4|0}while((b|0)!=(e|0));b=c[d>>2]|0;d=c[g>>2]|0;if((d|0)!=(b|0))c[g>>2]=d+(~((d+-4-b|0)>>>2)<<2)}b=c[f>>2]|0;if(!b){P_(a);return}P_(b);P_(a);return}function EK(a){a=a|0;var b=0,d=0,e=0,f=0;f=a+-4|0;c[f+4>>2]=1136;c[f+8>>2]=1228;c[f+12>>2]=1260;c[f+16>>2]=1292;c[f+20>>2]=1324;e=f+24|0;pG(e);d=f+28|0;a=c[d>>2]|0;f=f+32|0;b=c[f>>2]|0;if((a|0)!=(b|0)){do{P_(c[a>>2]|0);a=a+4|0}while((a|0)!=(b|0));a=c[d>>2]|0;b=c[f>>2]|0;if((b|0)!=(a|0))c[f>>2]=b+(~((b+-4-a|0)>>>2)<<2)}a=c[e>>2]|0;if(!a)return;P_(a);return}function FK(a){a=a|0;var b=0,d=0,e=0,f=0,g=0;g=a+-4|0;c[g+4>>2]=1136;c[g+8>>2]=1228;c[g+12>>2]=1260;c[g+16>>2]=1292;c[g+20>>2]=1324;e=g+24|0;pG(e);d=g+28|0;a=c[d>>2]|0;f=g+32|0;b=c[f>>2]|0;if((a|0)!=(b|0)){do{P_(c[a>>2]|0);a=a+4|0}while((a|0)!=(b|0));a=c[d>>2]|0;b=c[f>>2]|0;if((b|0)!=(a|0))c[f>>2]=b+(~((b+-4-a|0)>>>2)<<2)}a=c[e>>2]|0;if(!a){P_(g);return}P_(a);P_(g);return}function GK(a){a=a|0;var b=0,d=0,e=0,f=0;f=a+-8|0;c[f+4>>2]=1136;c[f+8>>2]=1228;c[f+12>>2]=1260;c[f+16>>2]=1292;c[f+20>>2]=1324;e=f+24|0;pG(e);d=f+28|0;a=c[d>>2]|0;f=f+32|0;b=c[f>>2]|0;if((a|0)!=(b|0)){do{P_(c[a>>2]|0);a=a+4|0}while((a|0)!=(b|0));a=c[d>>2]|0;b=c[f>>2]|0;if((b|0)!=(a|0))c[f>>2]=b+(~((b+-4-a|0)>>>2)<<2)}a=c[e>>2]|0;if(!a)return;P_(a);return}function HK(a){a=a|0;var b=0,d=0,e=0,f=0,g=0;g=a+-8|0;c[g+4>>2]=1136;c[g+8>>2]=1228;c[g+12>>2]=1260;c[g+16>>2]=1292;c[g+20>>2]=1324;e=g+24|0;pG(e);d=g+28|0;a=c[d>>2]|0;f=g+32|0;b=c[f>>2]|0;if((a|0)!=(b|0)){do{P_(c[a>>2]|0);a=a+4|0}while((a|0)!=(b|0));a=c[d>>2]|0;b=c[f>>2]|0;if((b|0)!=(a|0))c[f>>2]=b+(~((b+-4-a|0)>>>2)<<2)}a=c[e>>2]|0;if(!a){P_(g);return}P_(a);P_(g);return}function IK(a){a=a|0;var b=0,d=0,e=0,f=0;f=a+-12|0;c[f+4>>2]=1136;c[f+8>>2]=1228;c[f+12>>2]=1260;c[f+16>>2]=1292;c[f+20>>2]=1324;e=f+24|0;pG(e);d=f+28|0;a=c[d>>2]|0;f=f+32|0;b=c[f>>2]|0;if((a|0)!=(b|0)){do{P_(c[a>>2]|0);a=a+4|0}while((a|0)!=(b|0));a=c[d>>2]|0;b=c[f>>2]|0;if((b|0)!=(a|0))c[f>>2]=b+(~((b+-4-a|0)>>>2)<<2)}a=c[e>>2]|0;if(!a)return;P_(a);return}function JK(a){a=a|0;var b=0,d=0,e=0,f=0,g=0;g=a+-12|0;c[g+4>>2]=1136;c[g+8>>2]=1228;c[g+12>>2]=1260;c[g+16>>2]=1292;c[g+20>>2]=1324;e=g+24|0;pG(e);d=g+28|0;a=c[d>>2]|0;f=g+32|0;b=c[f>>2]|0;if((a|0)!=(b|0)){do{P_(c[a>>2]|0);a=a+4|0}while((a|0)!=(b|0));a=c[d>>2]|0;b=c[f>>2]|0;if((b|0)!=(a|0))c[f>>2]=b+(~((b+-4-a|0)>>>2)<<2)}a=c[e>>2]|0;if(!a){P_(g);return}P_(a);P_(g);return}function KK(a){a=a|0;var b=0,d=0,e=0,f=0;f=a+-16|0;c[f+4>>2]=1136;c[f+8>>2]=1228;c[f+12>>2]=1260;c[f+16>>2]=1292;c[f+20>>2]=1324;e=f+24|0;pG(e);d=f+28|0;a=c[d>>2]|0;f=f+32|0;b=c[f>>2]|0;if((a|0)!=(b|0)){do{P_(c[a>>2]|0);a=a+4|0}while((a|0)!=(b|0));a=c[d>>2]|0;b=c[f>>2]|0;if((b|0)!=(a|0))c[f>>2]=b+(~((b+-4-a|0)>>>2)<<2)}a=c[e>>2]|0;if(!a)return;P_(a);return}function LK(a){a=a|0;var b=0,d=0,e=0,f=0,g=0;g=a+-16|0;c[g+4>>2]=1136;c[g+8>>2]=1228;c[g+12>>2]=1260;c[g+16>>2]=1292;c[g+20>>2]=1324;e=g+24|0;pG(e);d=g+28|0;a=c[d>>2]|0;f=g+32|0;b=c[f>>2]|0;if((a|0)!=(b|0)){do{P_(c[a>>2]|0);a=a+4|0}while((a|0)!=(b|0));a=c[d>>2]|0;b=c[f>>2]|0;if((b|0)!=(a|0))c[f>>2]=b+(~((b+-4-a|0)>>>2)<<2)}a=c[e>>2]|0;if(!a){P_(g);return}P_(a);P_(g);return}function MK(a){a=a|0;var b=0,d=0,e=0,f=0;f=a+-20|0;c[f+4>>2]=1136;c[f+8>>2]=1228;c[f+12>>2]=1260;c[f+16>>2]=1292;c[f+20>>2]=1324;e=f+24|0;pG(e);d=f+28|0;a=c[d>>2]|0;f=f+32|0;b=c[f>>2]|0;if((a|0)!=(b|0)){do{P_(c[a>>2]|0);a=a+4|0}while((a|0)!=(b|0));a=c[d>>2]|0;b=c[f>>2]|0;if((b|0)!=(a|0))c[f>>2]=b+(~((b+-4-a|0)>>>2)<<2)}a=c[e>>2]|0;if(!a)return;P_(a);return}function NK(a){a=a|0;var b=0,d=0,e=0,f=0,g=0;g=a+-20|0;c[g+4>>2]=1136;c[g+8>>2]=1228;c[g+12>>2]=1260;c[g+16>>2]=1292;c[g+20>>2]=1324;e=g+24|0;pG(e);d=g+28|0;a=c[d>>2]|0;f=g+32|0;b=c[f>>2]|0;if((a|0)!=(b|0)){do{P_(c[a>>2]|0);a=a+4|0}while((a|0)!=(b|0));a=c[d>>2]|0;b=c[f>>2]|0;if((b|0)!=(a|0))c[f>>2]=b+(~((b+-4-a|0)>>>2)<<2)}a=c[e>>2]|0;if(!a){P_(g);return}P_(a);P_(g);return}function OK(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0;o=i;i=i+80|0;h=o+24|0;g=o+8|0;f=o+4|0;k=o;m=c[11345]|0;c[h>>2]=m;c[h+(c[m+-16>>2]|0)>>2]=c[11346];m=h+4|0;n=c[11347]|0;c[m>>2]=n;c[m+(c[n+-16>>2]|0)>>2]=c[11348];n=h+8|0;m=c[11349]|0;c[n>>2]=m;c[n+(c[m+-16>>2]|0)>>2]=c[11350];c[h>>2]=45276;c[h+4>>2]=45328;c[h+8>>2]=45360;c[h+20>>2]=0;kM(h+28|0,0,1);c[h+40>>2]=12880;m=h+44|0;c[m>>2]=0;a[h+48>>0]=0;c[m>>2]=h+(c[(c[h>>2]|0)+-16>>2]|0);m=g+4|0;c[m>>2]=0;n=g+8|0;c[n>>2]=0;c[g+12>>2]=0;c[g>>2]=37328;e=c[e>>2]|0;c[f>>2]=e;if((e|0)!=0?(p=e+((c[(c[e>>2]|0)+-12>>2]|0)+4)|0,e=(c[p>>2]|0)+1|0,c[p>>2]=e,(e|0)==0):0)Ha(79054,79014,48,79068);MW(h,f,0,g+4|0);e=c[f>>2]|0;if((e|0)!=0?(h=c[(c[e>>2]|0)+-12>>2]|0,j=e+h|0,h=e+(h+4)|0,p=(c[h>>2]|0)+-1|0,c[h>>2]=p,!((j|0)==0|(p|0)!=0)):0)oc[c[(c[j>>2]|0)+4>>2]&2047](j);e=c[d>>2]|0;c[k>>2]=e;if((e|0)!=0?(d=e+((c[(c[e>>2]|0)+-12>>2]|0)+4)|0,p=(c[d>>2]|0)+1|0,c[d>>2]=p,(p|0)==0):0)Ha(79054,79014,48,79068);d=c[m>>2]|0;e=d;p=c[n>>2]|0;f=p;c[b+88>>2]=e;c[b+92>>2]=e;c[b+96>>2]=f;a[b+100>>0]=(d|0)!=(p|0)&1;c[b+108>>2]=f;c[b+112>>2]=e;c[b+116>>2]=f;a[b+120>>0]=0;f=IP(b,k)|0;e=c[k>>2]|0;if((e|0)!=0?(k=c[(c[e>>2]|0)+-12>>2]|0,l=e+k|0,k=e+(k+4)|0,p=(c[k>>2]|0)+-1|0,c[k>>2]=p,!((l|0)==0|(p|0)!=0)):0)oc[c[(c[l>>2]|0)+4>>2]&2047](l);if(f){g=o$(f,1576,8200,0)|0;if((g|0)!=0?(l=g+((c[(c[g>>2]|0)+-12>>2]|0)+4)|0,p=(c[l>>2]|0)+1|0,c[l>>2]=p,(p|0)==0):0)Ha(79054,79014,48,79068);l=c[(c[f>>2]|0)+-12>>2]|0;e=f+l|0;l=f+(l+4)|0;p=(c[l>>2]|0)+-1|0;c[l>>2]=p;if(!((e|0)==0|(p|0)!=0))oc[c[(c[e>>2]|0)+4>>2]&2047](e)}else g=0;e=c[m>>2]|0;if(!e){i=o;return g|0}f=c[n>>2]|0;if((f|0)!=(e|0))c[n>>2]=f+(~((f+-8-e|0)>>>3)<<3);P_(e);i=o;return g|0}function PK(a){a=a|0;var b=0,d=0;d=c[a+4>>2]|0;if(!d)return;a=a+8|0;b=c[a>>2]|0;if((b|0)!=(d|0))c[a>>2]=b+(~((b+-8-d|0)>>>3)<<3);P_(d);return}function QK(a){a=a|0;var b=0,d=0,e=0;b=c[a+4>>2]|0;if(!b){P_(a);return}d=a+8|0;e=c[d>>2]|0;if((e|0)!=(b|0))c[d>>2]=e+(~((e+-8-b|0)>>>3)<<3);P_(b);P_(a);return}function RK(a){a=a|0;return}function SK(a){a=a|0;P_(a);return}function TK(a){a=a|0;var b=0,d=0,e=0,f=0,g=0;c[a+4>>2]=1136;c[a+8>>2]=1228;c[a+12>>2]=1260;c[a+16>>2]=1292;c[a+20>>2]=1324;g=a+24|0;pG(g);e=a+28|0;b=c[e>>2]|0;f=a+32|0;d=c[f>>2]|0;if((b|0)!=(d|0)){a=b;do{P_(c[a>>2]|0);a=a+4|0}while((a|0)!=(d|0));a=c[e>>2]|0;b=c[f>>2]|0;if((b|0)!=(a|0))c[f>>2]=b+(~((b+-4-a|0)>>>2)<<2)}a=c[g>>2]|0;if(!a)return;P_(a);return}function UK(a){a=a|0;var b=0,d=0,e=0,f=0,g=0;c[a+4>>2]=1136;c[a+8>>2]=1228;c[a+12>>2]=1260;c[a+16>>2]=1292;c[a+20>>2]=1324;f=a+24|0;pG(f);d=a+28|0;b=c[d>>2]|0;g=a+32|0;e=c[g>>2]|0;if((b|0)!=(e|0)){do{P_(c[b>>2]|0);b=b+4|0}while((b|0)!=(e|0));b=c[d>>2]|0;d=c[g>>2]|0;if((d|0)!=(b|0))c[g>>2]=d+(~((d+-4-b|0)>>>2)<<2)}b=c[f>>2]|0;if(!b){P_(a);return}P_(b);P_(a);return}function VK(b,d){b=b|0;d=d|0;var e=0,f=0,g=0;PP(b,d);d=c[b+88>>2]|0;if((d|0)==(c[b+108>>2]|0))return;f=b+88|0;g=b+100|0;if(!(a[g>>0]|0)){d=d+-8|0;if((d|0)==(c[b+92>>2]|0)){c[f>>2]=d;a[g>>0]=1;return}else{c[f>>2]=d;return}}else{e=d+8|0;if((e|0)==(c[b+96>>2]|0)){c[f>>2]=d+-8;a[g>>0]=0;return}else{c[f>>2]=e;return}}}function WK(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,j=0,k=0,l=0;k=i;i=i+32|0;e=k+16|0;j=k+8|0;g=k;h=b+4|0;d=zc[c[(c[h>>2]|0)+72>>2]&255](h,d)|0;c[j>>2]=d;if(!d){i=k;return}kM(e,-999999,4);d=d+60|0;if(!(uM(d,e)|0))rM(b+76|0,d)|0;d=c[b+88>>2]|0;do if((d|0)==(c[b+108>>2]|0)){d=b+76|0;if(c[d>>2]|0){e=c[j>>2]|0;if(!e)Ha(78999,79014,95,78956);else{GE(e,d)|0;c[d>>2]=0;break}}}else{lM(g,d);d=b+64|0;l=uM(g,d)|0;e=c[j>>2]|0;f=(e|0)==0;do if(l)if(f)Ha(78999,79014,102,79043);else{c[e+60>>2]=-999999;c[e+64>>2]=4;break}else if(f)Ha(78999,79014,95,78956);else{GE(e,rM(d,g)|0)|0;break}while(0);if(!(a[b+48>>0]|0)){f=b+88|0;g=b+100|0;d=c[f>>2]|0;if(!(a[g>>0]|0)){d=d+-8|0;if((d|0)==(c[b+92>>2]|0)){c[f>>2]=d;a[g>>0]=1;break}else{c[f>>2]=d;break}}else{e=d+8|0;if((e|0)==(c[b+96>>2]|0)){c[f>>2]=d+-8;a[g>>0]=0;break}else{c[f>>2]=e;break}}}}while(0);Dc[c[(c[h>>2]|0)+56>>2]&63](h,j,0);d=c[j>>2]|0;if(!d){i=k;return}j=c[(c[d>>2]|0)+-12>>2]|0;e=d+j|0;j=d+(j+4)|0;l=(c[j>>2]|0)+-1|0;c[j>>2]=l;if((e|0)==0|(l|0)!=0){i=k;return}oc[c[(c[e>>2]|0)+4>>2]&2047](e);i=k;return}function XK(a){a=a|0;var b=0,d=0,e=0,f=0;f=a+-4|0;c[f+4>>2]=1136;c[f+8>>2]=1228;c[f+12>>2]=1260;c[f+16>>2]=1292;c[f+20>>2]=1324;e=f+24|0;pG(e);d=f+28|0;a=c[d>>2]|0;f=f+32|0;b=c[f>>2]|0;if((a|0)!=(b|0)){do{P_(c[a>>2]|0);a=a+4|0}while((a|0)!=(b|0));a=c[d>>2]|0;b=c[f>>2]|0;if((b|0)!=(a|0))c[f>>2]=b+(~((b+-4-a|0)>>>2)<<2)}a=c[e>>2]|0;if(!a)return;P_(a);return}function YK(a){a=a|0;var b=0,d=0,e=0,f=0,g=0;g=a+-4|0;c[g+4>>2]=1136;c[g+8>>2]=1228;c[g+12>>2]=1260;c[g+16>>2]=1292;c[g+20>>2]=1324;e=g+24|0;pG(e);d=g+28|0;a=c[d>>2]|0;f=g+32|0;b=c[f>>2]|0;if((a|0)!=(b|0)){do{P_(c[a>>2]|0);a=a+4|0}while((a|0)!=(b|0));a=c[d>>2]|0;b=c[f>>2]|0;if((b|0)!=(a|0))c[f>>2]=b+(~((b+-4-a|0)>>>2)<<2)}a=c[e>>2]|0;if(!a){P_(g);return}P_(a);P_(g);return}function ZK(a,b){a=a|0;b=b|0;WK(a+-4|0,b);return}function _K(b,d){b=b|0;d=d|0;var e=0,f=0,g=0;g=b+-4|0;PP(g,d);e=g+88|0;b=c[e>>2]|0;if((b|0)==(c[g+108>>2]|0))return;f=g+100|0;if(!(a[f>>0]|0)){b=b+-8|0;if((b|0)==(c[g+92>>2]|0)){c[e>>2]=b;a[f>>0]=1;return}else{c[e>>2]=b;return}}else{d=b+8|0;if((d|0)==(c[g+96>>2]|0)){c[e>>2]=b+-8;a[f>>0]=0;return}else{c[e>>2]=d;return}}}function $K(a){a=a|0;var b=0,d=0,e=0,f=0;f=a+-8|0;c[f+4>>2]=1136;c[f+8>>2]=1228;c[f+12>>2]=1260;c[f+16>>2]=1292;c[f+20>>2]=1324;e=f+24|0;pG(e);d=f+28|0;a=c[d>>2]|0;f=f+32|0;b=c[f>>2]|0;if((a|0)!=(b|0)){do{P_(c[a>>2]|0);a=a+4|0}while((a|0)!=(b|0));a=c[d>>2]|0;b=c[f>>2]|0;if((b|0)!=(a|0))c[f>>2]=b+(~((b+-4-a|0)>>>2)<<2)}a=c[e>>2]|0;if(!a)return;P_(a);return}function aL(a){a=a|0;var b=0,d=0,e=0,f=0,g=0;g=a+-8|0;c[g+4>>2]=1136;c[g+8>>2]=1228;c[g+12>>2]=1260;c[g+16>>2]=1292;c[g+20>>2]=1324;e=g+24|0;pG(e);d=g+28|0;a=c[d>>2]|0;f=g+32|0;b=c[f>>2]|0;if((a|0)!=(b|0)){do{P_(c[a>>2]|0);a=a+4|0}while((a|0)!=(b|0));a=c[d>>2]|0;b=c[f>>2]|0;if((b|0)!=(a|0))c[f>>2]=b+(~((b+-4-a|0)>>>2)<<2)}a=c[e>>2]|0;if(!a){P_(g);return}P_(a);P_(g);return}function bL(a){a=a|0;var b=0,d=0,e=0,f=0;f=a+-12|0;c[f+4>>2]=1136;c[f+8>>2]=1228;c[f+12>>2]=1260;c[f+16>>2]=1292;c[f+20>>2]=1324;e=f+24|0;pG(e);d=f+28|0;a=c[d>>2]|0;f=f+32|0;b=c[f>>2]|0;if((a|0)!=(b|0)){do{P_(c[a>>2]|0);a=a+4|0}while((a|0)!=(b|0));a=c[d>>2]|0;b=c[f>>2]|0;if((b|0)!=(a|0))c[f>>2]=b+(~((b+-4-a|0)>>>2)<<2)}a=c[e>>2]|0;if(!a)return;P_(a);return}function cL(a){a=a|0;var b=0,d=0,e=0,f=0,g=0;g=a+-12|0;c[g+4>>2]=1136;c[g+8>>2]=1228;c[g+12>>2]=1260;c[g+16>>2]=1292;c[g+20>>2]=1324;e=g+24|0;pG(e);d=g+28|0;a=c[d>>2]|0;f=g+32|0;b=c[f>>2]|0;if((a|0)!=(b|0)){do{P_(c[a>>2]|0);a=a+4|0}while((a|0)!=(b|0));a=c[d>>2]|0;b=c[f>>2]|0;if((b|0)!=(a|0))c[f>>2]=b+(~((b+-4-a|0)>>>2)<<2)}a=c[e>>2]|0;if(!a){P_(g);return}P_(a);P_(g);return}function dL(b,d){b=b|0;d=d|0;var e=0,f=0,g=0;g=b+-12|0;PP(g,d);d=c[g+88>>2]|0;if((d|0)==(c[g+108>>2]|0))return;e=g+88|0;f=g+100|0;if(!(a[f>>0]|0)){b=d+-8|0;if((b|0)==(c[g+92>>2]|0)){c[e>>2]=b;a[f>>0]=1;return}else{c[e>>2]=b;return}}else{b=d+8|0;if((b|0)==(c[g+96>>2]|0)){c[e>>2]=d+-8;a[f>>0]=0;return}else{c[e>>2]=b;return}}}function eL(a){a=a|0;var b=0,d=0,e=0,f=0;f=a+-16|0;c[f+4>>2]=1136;c[f+8>>2]=1228;c[f+12>>2]=1260;c[f+16>>2]=1292;c[f+20>>2]=1324;e=f+24|0;pG(e);d=f+28|0;a=c[d>>2]|0;f=f+32|0;b=c[f>>2]|0;if((a|0)!=(b|0)){do{P_(c[a>>2]|0);a=a+4|0}while((a|0)!=(b|0));a=c[d>>2]|0;b=c[f>>2]|0;if((b|0)!=(a|0))c[f>>2]=b+(~((b+-4-a|0)>>>2)<<2)}a=c[e>>2]|0;if(!a)return;P_(a);return}function fL(a){a=a|0;var b=0,d=0,e=0,f=0,g=0;g=a+-16|0;c[g+4>>2]=1136;c[g+8>>2]=1228;c[g+12>>2]=1260;c[g+16>>2]=1292;c[g+20>>2]=1324;e=g+24|0;pG(e);d=g+28|0;a=c[d>>2]|0;f=g+32|0;b=c[f>>2]|0;if((a|0)!=(b|0)){do{P_(c[a>>2]|0);a=a+4|0}while((a|0)!=(b|0));a=c[d>>2]|0;b=c[f>>2]|0;if((b|0)!=(a|0))c[f>>2]=b+(~((b+-4-a|0)>>>2)<<2)}a=c[e>>2]|0;if(!a){P_(g);return}P_(a);P_(g);return}function gL(a,b){a=a|0;b=b|0;WK(a+-16|0,b);return}function hL(a){a=a|0;var b=0,d=0,e=0,f=0;f=a+-20|0;c[a+-16>>2]=1136;c[a+-12>>2]=1228;c[a+-8>>2]=1260;c[a+-4>>2]=1292;c[f+20>>2]=1324;e=f+24|0;pG(e);d=f+28|0;a=c[d>>2]|0;f=f+32|0;b=c[f>>2]|0;if((a|0)!=(b|0)){do{P_(c[a>>2]|0);a=a+4|0}while((a|0)!=(b|0));a=c[d>>2]|0;b=c[f>>2]|0;if((b|0)!=(a|0))c[f>>2]=b+(~((b+-4-a|0)>>>2)<<2)}a=c[e>>2]|0;if(!a)return;P_(a);return}function iL(a){a=a|0;var b=0,d=0,e=0,f=0,g=0;g=a+-20|0;c[a+-16>>2]=1136;c[a+-12>>2]=1228;c[a+-8>>2]=1260;c[a+-4>>2]=1292;c[g+20>>2]=1324;e=g+24|0;pG(e);d=g+28|0;a=c[d>>2]|0;f=g+32|0;b=c[f>>2]|0;if((a|0)!=(b|0)){do{P_(c[a>>2]|0);a=a+4|0}while((a|0)!=(b|0));a=c[d>>2]|0;b=c[f>>2]|0;if((b|0)!=(a|0))c[f>>2]=b+(~((b+-4-a|0)>>>2)<<2)}a=c[e>>2]|0;if(!a){P_(g);return}P_(a);P_(g);return}function jL(a){a=a|0;var b=0,d=0,e=0,f=0,g=0;e=a+4|0;g=c[10051]|0;c[e>>2]=g;c[e+(c[g+-16>>2]|0)>>2]=c[10062];c[a+8>>2]=c[10063];c[a+12>>2]=c[10064];c[a+16>>2]=c[10065];c[a+20>>2]=c[10066];g=a+24|0;pG(g);e=a+28|0;b=c[e>>2]|0;f=a+32|0;d=c[f>>2]|0;if((b|0)!=(d|0)){a=b;do{P_(c[a>>2]|0);a=a+4|0}while((a|0)!=(d|0));a=c[e>>2]|0;b=c[f>>2]|0;if((b|0)!=(a|0))c[f>>2]=b+(~((b+-4-a|0)>>>2)<<2)}a=c[g>>2]|0;if(!a)return;P_(a);return}function kL(a){a=a|0;var b=0,d=0,e=0,f=0,g=0;d=a+4|0;f=c[10051]|0;c[d>>2]=f;c[d+(c[f+-16>>2]|0)>>2]=c[10062];c[a+8>>2]=c[10063];c[a+12>>2]=c[10064];c[a+16>>2]=c[10065];c[a+20>>2]=c[10066];f=a+24|0;pG(f);d=a+28|0;b=c[d>>2]|0;g=a+32|0;e=c[g>>2]|0;if((b|0)!=(e|0)){do{P_(c[b>>2]|0);b=b+4|0}while((b|0)!=(e|0));b=c[d>>2]|0;d=c[g>>2]|0;if((d|0)!=(b|0))c[g>>2]=d+(~((d+-4-b|0)>>>2)<<2)}b=c[f>>2]|0;if(!b){P_(a);return}P_(b);P_(a);return}function lL(a){a=a|0;var b=0,d=0,e=0,f=0;f=a+-4|0;b=f+4|0;e=c[10051]|0;c[b>>2]=e;c[b+(c[e+-16>>2]|0)>>2]=c[10062];c[f+8>>2]=c[10063];c[f+12>>2]=c[10064];c[f+16>>2]=c[10065];c[f+20>>2]=c[10066];e=f+24|0;pG(e);b=f+28|0;a=c[b>>2]|0;f=f+32|0;d=c[f>>2]|0;if((a|0)!=(d|0)){do{P_(c[a>>2]|0);a=a+4|0}while((a|0)!=(d|0));a=c[b>>2]|0;b=c[f>>2]|0;if((b|0)!=(a|0))c[f>>2]=b+(~((b+-4-a|0)>>>2)<<2)}a=c[e>>2]|0;if(!a)return;P_(a);return}function mL(a){a=a|0;kL(a+-4|0);return}function nL(a){a=a|0;var b=0,d=0,e=0,f=0;f=a+-8|0;b=a+-4|0;e=c[10051]|0;c[b>>2]=e;c[b+(c[e+-16>>2]|0)>>2]=c[10062];c[f+8>>2]=c[10063];c[f+12>>2]=c[10064];c[f+16>>2]=c[10065];c[f+20>>2]=c[10066];e=f+24|0;pG(e);b=f+28|0;a=c[b>>2]|0;f=f+32|0;d=c[f>>2]|0;if((a|0)!=(d|0)){do{P_(c[a>>2]|0);a=a+4|0}while((a|0)!=(d|0));a=c[b>>2]|0;b=c[f>>2]|0;if((b|0)!=(a|0))c[f>>2]=b+(~((b+-4-a|0)>>>2)<<2)}a=c[e>>2]|0;if(!a)return;P_(a);return}function oL(a){a=a|0;kL(a+-8|0);return}function pL(a){a=a|0;var b=0,d=0,e=0,f=0;f=a+-12|0;b=f+4|0;e=c[10051]|0;c[b>>2]=e;c[b+(c[e+-16>>2]|0)>>2]=c[10062];c[f+8>>2]=c[10063];c[f+12>>2]=c[10064];c[f+16>>2]=c[10065];c[f+20>>2]=c[10066];e=f+24|0;pG(e);b=f+28|0;a=c[b>>2]|0;f=f+32|0;d=c[f>>2]|0;if((a|0)!=(d|0)){do{P_(c[a>>2]|0);a=a+4|0}while((a|0)!=(d|0));a=c[b>>2]|0;b=c[f>>2]|0;if((b|0)!=(a|0))c[f>>2]=b+(~((b+-4-a|0)>>>2)<<2)}a=c[e>>2]|0;if(!a)return;P_(a);return}function qL(a){a=a|0;kL(a+-12|0);return}function rL(a){a=a|0;var b=0,d=0,e=0,f=0;f=a+-16|0;b=f+4|0;e=c[10051]|0;c[b>>2]=e;c[b+(c[e+-16>>2]|0)>>2]=c[10062];c[f+8>>2]=c[10063];c[f+12>>2]=c[10064];c[f+16>>2]=c[10065];c[f+20>>2]=c[10066];e=f+24|0;pG(e);b=f+28|0;a=c[b>>2]|0;f=f+32|0;d=c[f>>2]|0;if((a|0)!=(d|0)){do{P_(c[a>>2]|0);a=a+4|0}while((a|0)!=(d|0));a=c[b>>2]|0;b=c[f>>2]|0;if((b|0)!=(a|0))c[f>>2]=b+(~((b+-4-a|0)>>>2)<<2)}a=c[e>>2]|0;if(!a)return;P_(a);return}function sL(a){a=a|0;kL(a+-16|0);return}function tL(a){a=a|0;var b=0,d=0,e=0,f=0;f=a+-20|0;b=a+-16|0;e=c[10051]|0;c[b>>2]=e;c[b+(c[e+-16>>2]|0)>>2]=c[10062];c[f+8>>2]=c[10063];c[f+12>>2]=c[10064];c[f+16>>2]=c[10065];c[f+20>>2]=c[10066];e=f+24|0;pG(e);b=f+28|0;a=c[b>>2]|0;f=f+32|0;d=c[f>>2]|0;if((a|0)!=(d|0)){do{P_(c[a>>2]|0);a=a+4|0}while((a|0)!=(d|0));a=c[b>>2]|0;b=c[f>>2]|0;if((b|0)!=(a|0))c[f>>2]=b+(~((b+-4-a|0)>>>2)<<2)}a=c[e>>2]|0;if(!a)return;P_(a);return}function uL(a){a=a|0;kL(a+-20|0);return}function vL(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0;o=i;i=i+80|0;h=o+24|0;g=o+8|0;f=o+4|0;k=o;m=c[11345]|0;c[h>>2]=m;c[h+(c[m+-16>>2]|0)>>2]=c[11346];m=h+4|0;n=c[11347]|0;c[m>>2]=n;c[m+(c[n+-16>>2]|0)>>2]=c[11348];n=h+8|0;m=c[11349]|0;c[n>>2]=m;c[n+(c[m+-16>>2]|0)>>2]=c[11350];c[h>>2]=45276;c[h+4>>2]=45328;c[h+8>>2]=45360;c[h+20>>2]=0;kM(h+28|0,0,1);c[h+40>>2]=12880;m=h+44|0;c[m>>2]=0;a[h+48>>0]=0;c[m>>2]=h+(c[(c[h>>2]|0)+-16>>2]|0);m=g+4|0;c[m>>2]=0;n=g+8|0;c[n>>2]=0;c[g+12>>2]=0;c[g>>2]=37740;e=c[e>>2]|0;c[f>>2]=e;if((e|0)!=0?(p=e+((c[(c[e>>2]|0)+-12>>2]|0)+4)|0,e=(c[p>>2]|0)+1|0,c[p>>2]=e,(e|0)==0):0)Ha(79054,79014,48,79068);MW(h,f,0,g+4|0);e=c[f>>2]|0;if((e|0)!=0?(h=c[(c[e>>2]|0)+-12>>2]|0,j=e+h|0,h=e+(h+4)|0,p=(c[h>>2]|0)+-1|0,c[h>>2]=p,!((j|0)==0|(p|0)!=0)):0)oc[c[(c[j>>2]|0)+4>>2]&2047](j);e=c[d>>2]|0;c[k>>2]=e;if((e|0)!=0?(d=e+((c[(c[e>>2]|0)+-12>>2]|0)+4)|0,p=(c[d>>2]|0)+1|0,c[d>>2]=p,(p|0)==0):0)Ha(79054,79014,48,79068);e=c[m>>2]|0;f=c[n>>2]|0;c[b+88>>2]=e;c[b+92>>2]=e;c[b+96>>2]=f;c[b+104>>2]=f;c[b+108>>2]=e;c[b+112>>2]=f;f=IP(b,k)|0;e=c[k>>2]|0;if((e|0)!=0?(k=c[(c[e>>2]|0)+-12>>2]|0,l=e+k|0,k=e+(k+4)|0,p=(c[k>>2]|0)+-1|0,c[k>>2]=p,!((l|0)==0|(p|0)!=0)):0)oc[c[(c[l>>2]|0)+4>>2]&2047](l);if(f){g=o$(f,1576,8200,0)|0;if((g|0)!=0?(l=g+((c[(c[g>>2]|0)+-12>>2]|0)+4)|0,p=(c[l>>2]|0)+1|0,c[l>>2]=p,(p|0)==0):0)Ha(79054,79014,48,79068);l=c[(c[f>>2]|0)+-12>>2]|0;e=f+l|0;l=f+(l+4)|0;p=(c[l>>2]|0)+-1|0;c[l>>2]=p;if(!((e|0)==0|(p|0)!=0))oc[c[(c[e>>2]|0)+4>>2]&2047](e)}else g=0;e=c[m>>2]|0;if(!e){i=o;return g|0}f=c[n>>2]|0;if((f|0)!=(e|0))c[n>>2]=f+(~((f+-8-e|0)>>>3)<<3);P_(e);i=o;return g|0}function wL(a){a=a|0;var b=0,d=0;d=c[a+4>>2]|0;if(!d)return;a=a+8|0;b=c[a>>2]|0;if((b|0)!=(d|0))c[a>>2]=b+(~((b+-8-d|0)>>>3)<<3);P_(d);return}function xL(a){a=a|0;var b=0,d=0,e=0;b=c[a+4>>2]|0;if(!b){P_(a);return}d=a+8|0;e=c[d>>2]|0;if((e|0)!=(b|0))c[d>>2]=e+(~((e+-8-b|0)>>>3)<<3);P_(b);P_(a);return}function yL(a){a=a|0;return}function zL(a){a=a|0;P_(a);return}function AL(a){a=a|0;var b=0,d=0,e=0,f=0,g=0;c[a+4>>2]=1136;c[a+8>>2]=1228;c[a+12>>2]=1260;c[a+16>>2]=1292;c[a+20>>2]=1324;g=a+24|0;pG(g);e=a+28|0;b=c[e>>2]|0;f=a+32|0;d=c[f>>2]|0;if((b|0)!=(d|0)){a=b;do{P_(c[a>>2]|0);a=a+4|0}while((a|0)!=(d|0));a=c[e>>2]|0;b=c[f>>2]|0;if((b|0)!=(a|0))c[f>>2]=b+(~((b+-4-a|0)>>>2)<<2)}a=c[g>>2]|0;if(!a)return;P_(a);return}function BL(a){a=a|0;var b=0,d=0,e=0,f=0,g=0;c[a+4>>2]=1136;c[a+8>>2]=1228;c[a+12>>2]=1260;c[a+16>>2]=1292;c[a+20>>2]=1324;f=a+24|0;pG(f);d=a+28|0;b=c[d>>2]|0;g=a+32|0;e=c[g>>2]|0;if((b|0)!=(e|0)){do{P_(c[b>>2]|0);b=b+4|0}while((b|0)!=(e|0));b=c[d>>2]|0;d=c[g>>2]|0;if((d|0)!=(b|0))c[g>>2]=d+(~((d+-4-b|0)>>>2)<<2)}b=c[f>>2]|0;if(!b){P_(a);return}P_(b);P_(a);return}function CL(a,b){a=a|0;b=b|0;var d=0;PP(a,b);b=c[a+88>>2]|0;if((b|0)==(c[a+104>>2]|0))return;d=a+88|0;b=b+8|0;c[d>>2]=b;if((b|0)!=(c[a+96>>2]|0))return;c[d>>2]=c[a+92>>2];return}function DL(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,j=0,k=0,l=0,m=0;l=i;i=i+32|0;e=l+16|0;k=l+8|0;h=l;j=b+4|0;d=zc[c[(c[j>>2]|0)+72>>2]&255](j,d)|0;c[k>>2]=d;if(!d){i=l;return}kM(e,-999999,4);d=d+60|0;if(!(uM(d,e)|0))rM(b+76|0,d)|0;d=c[b+88>>2]|0;do if((d|0)==(c[b+104>>2]|0)){d=b+76|0;if(c[d>>2]|0){e=c[k>>2]|0;if(!e)Ha(78999,79014,95,78956);else{GE(e,d)|0;c[d>>2]=0;break}}}else{lM(h,d);d=b+64|0;m=uM(h,d)|0;e=c[k>>2]|0;f=(e|0)==0;do if(m)if(f)Ha(78999,79014,102,79043);else{c[e+60>>2]=-999999;c[e+64>>2]=4;break}else if(f)Ha(78999,79014,95,78956);else{GE(e,rM(d,h)|0)|0;break}while(0);if((a[b+48>>0]|0)==0?(g=b+88|0,m=(c[g>>2]|0)+8|0,c[g>>2]=m,(m|0)==(c[b+96>>2]|0)):0)c[g>>2]=c[b+92>>2]}while(0);Dc[c[(c[j>>2]|0)+56>>2]&63](j,k,0);d=c[k>>2]|0;if(!d){i=l;return}k=c[(c[d>>2]|0)+-12>>2]|0;e=d+k|0;k=d+(k+4)|0;m=(c[k>>2]|0)+-1|0;c[k>>2]=m;if((e|0)==0|(m|0)!=0){i=l;return}oc[c[(c[e>>2]|0)+4>>2]&2047](e);i=l;return}function EL(a){a=a|0;var b=0,d=0,e=0,f=0;f=a+-4|0;c[f+4>>2]=1136;c[f+8>>2]=1228;c[f+12>>2]=1260;c[f+16>>2]=1292;c[f+20>>2]=1324;e=f+24|0;pG(e);d=f+28|0;a=c[d>>2]|0;f=f+32|0;b=c[f>>2]|0;if((a|0)!=(b|0)){do{P_(c[a>>2]|0);a=a+4|0}while((a|0)!=(b|0));a=c[d>>2]|0;b=c[f>>2]|0;if((b|0)!=(a|0))c[f>>2]=b+(~((b+-4-a|0)>>>2)<<2)}a=c[e>>2]|0;if(!a)return;P_(a);return}function FL(a){a=a|0;var b=0,d=0,e=0,f=0,g=0;g=a+-4|0;c[g+4>>2]=1136;c[g+8>>2]=1228;c[g+12>>2]=1260;c[g+16>>2]=1292;c[g+20>>2]=1324;e=g+24|0;pG(e);d=g+28|0;a=c[d>>2]|0;f=g+32|0;b=c[f>>2]|0;if((a|0)!=(b|0)){do{P_(c[a>>2]|0);a=a+4|0}while((a|0)!=(b|0));a=c[d>>2]|0;b=c[f>>2]|0;if((b|0)!=(a|0))c[f>>2]=b+(~((b+-4-a|0)>>>2)<<2)}a=c[e>>2]|0;if(!a){P_(g);return}P_(a);P_(g);return}function GL(a,b){a=a|0;b=b|0;DL(a+-4|0,b);return}function HL(a,b){a=a|0;b=b|0;var d=0;d=a+-4|0;PP(d,b);a=c[d+88>>2]|0;if((a|0)==(c[d+104>>2]|0))return;b=d+88|0;a=a+8|0;c[b>>2]=a;if((a|0)!=(c[d+96>>2]|0))return;c[b>>2]=c[d+92>>2];return}function IL(a){a=a|0;var b=0,d=0,e=0,f=0;f=a+-8|0;c[f+4>>2]=1136;c[f+8>>2]=1228;c[f+12>>2]=1260;c[f+16>>2]=1292;c[f+20>>2]=1324;e=f+24|0;pG(e);d=f+28|0;a=c[d>>2]|0;f=f+32|0;b=c[f>>2]|0;if((a|0)!=(b|0)){do{P_(c[a>>2]|0);a=a+4|0}while((a|0)!=(b|0));a=c[d>>2]|0;b=c[f>>2]|0;if((b|0)!=(a|0))c[f>>2]=b+(~((b+-4-a|0)>>>2)<<2)}a=c[e>>2]|0;if(!a)return;P_(a);return}function JL(a){a=a|0;var b=0,d=0,e=0,f=0,g=0;g=a+-8|0;c[g+4>>2]=1136;c[g+8>>2]=1228;c[g+12>>2]=1260;c[g+16>>2]=1292;c[g+20>>2]=1324;e=g+24|0;pG(e);d=g+28|0;a=c[d>>2]|0;f=g+32|0;b=c[f>>2]|0;if((a|0)!=(b|0)){do{P_(c[a>>2]|0);a=a+4|0}while((a|0)!=(b|0));a=c[d>>2]|0;b=c[f>>2]|0;if((b|0)!=(a|0))c[f>>2]=b+(~((b+-4-a|0)>>>2)<<2)}a=c[e>>2]|0;if(!a){P_(g);return}P_(a);P_(g);return}function KL(a){a=a|0;var b=0,d=0,e=0,f=0;f=a+-12|0;c[f+4>>2]=1136;c[f+8>>2]=1228;c[f+12>>2]=1260;c[f+16>>2]=1292;c[f+20>>2]=1324;e=f+24|0;pG(e);d=f+28|0;a=c[d>>2]|0;f=f+32|0;b=c[f>>2]|0;if((a|0)!=(b|0)){do{P_(c[a>>2]|0);a=a+4|0}while((a|0)!=(b|0));a=c[d>>2]|0;b=c[f>>2]|0;if((b|0)!=(a|0))c[f>>2]=b+(~((b+-4-a|0)>>>2)<<2)}a=c[e>>2]|0;if(!a)return;P_(a);return}function LL(a){a=a|0;var b=0,d=0,e=0,f=0,g=0;g=a+-12|0;c[g+4>>2]=1136;c[g+8>>2]=1228;c[g+12>>2]=1260;c[g+16>>2]=1292;c[g+20>>2]=1324;e=g+24|0;pG(e);d=g+28|0;a=c[d>>2]|0;f=g+32|0;b=c[f>>2]|0;if((a|0)!=(b|0)){do{P_(c[a>>2]|0);a=a+4|0}while((a|0)!=(b|0));a=c[d>>2]|0;b=c[f>>2]|0;if((b|0)!=(a|0))c[f>>2]=b+(~((b+-4-a|0)>>>2)<<2)}a=c[e>>2]|0;if(!a){P_(g);return}P_(a);P_(g);return}function ML(a,b){a=a|0;b=b|0;var d=0;d=a+-12|0;PP(d,b);a=c[d+88>>2]|0;if((a|0)==(c[d+104>>2]|0))return;b=d+88|0;a=a+8|0;c[b>>2]=a;if((a|0)!=(c[d+96>>2]|0))return;c[b>>2]=c[d+92>>2];return}function NL(a){a=a|0;var b=0,d=0,e=0,f=0;f=a+-16|0;c[a+-12>>2]=1136;c[a+-8>>2]=1228;c[a+-4>>2]=1260;c[f+16>>2]=1292;c[f+20>>2]=1324;e=f+24|0;pG(e);d=f+28|0;a=c[d>>2]|0;f=f+32|0;b=c[f>>2]|0;if((a|0)!=(b|0)){do{P_(c[a>>2]|0);a=a+4|0}while((a|0)!=(b|0));a=c[d>>2]|0;b=c[f>>2]|0;if((b|0)!=(a|0))c[f>>2]=b+(~((b+-4-a|0)>>>2)<<2)}a=c[e>>2]|0;if(!a)return;P_(a);return}function OL(a){a=a|0;var b=0,d=0,e=0,f=0,g=0;g=a+-16|0;c[a+-12>>2]=1136;c[a+-8>>2]=1228;c[a+-4>>2]=1260;c[g+16>>2]=1292;c[g+20>>2]=1324;e=g+24|0;pG(e);d=g+28|0;a=c[d>>2]|0;f=g+32|0;b=c[f>>2]|0;if((a|0)!=(b|0)){do{P_(c[a>>2]|0);a=a+4|0}while((a|0)!=(b|0));a=c[d>>2]|0;b=c[f>>2]|0;if((b|0)!=(a|0))c[f>>2]=b+(~((b+-4-a|0)>>>2)<<2)}a=c[e>>2]|0;if(!a){P_(g);return}P_(a);P_(g);return}function PL(a,b){a=a|0;b=b|0;DL(a+-16|0,b);return}function QL(a){a=a|0;var b=0,d=0,e=0,f=0;f=a+-20|0;c[f+4>>2]=1136;c[f+8>>2]=1228;c[f+12>>2]=1260;c[f+16>>2]=1292;c[f+20>>2]=1324;e=f+24|0;pG(e);d=f+28|0;a=c[d>>2]|0;f=f+32|0;b=c[f>>2]|0;if((a|0)!=(b|0)){do{P_(c[a>>2]|0);a=a+4|0}while((a|0)!=(b|0));a=c[d>>2]|0;b=c[f>>2]|0;if((b|0)!=(a|0))c[f>>2]=b+(~((b+-4-a|0)>>>2)<<2)}a=c[e>>2]|0;if(!a)return;P_(a);return}function RL(a){a=a|0;var b=0,d=0,e=0,f=0,g=0;g=a+-20|0;c[g+4>>2]=1136;c[g+8>>2]=1228;c[g+12>>2]=1260;c[g+16>>2]=1292;c[g+20>>2]=1324;e=g+24|0;pG(e);d=g+28|0;a=c[d>>2]|0;f=g+32|0;b=c[f>>2]|0;if((a|0)!=(b|0)){do{P_(c[a>>2]|0);a=a+4|0}while((a|0)!=(b|0));a=c[d>>2]|0;b=c[f>>2]|0;if((b|0)!=(a|0))c[f>>2]=b+(~((b+-4-a|0)>>>2)<<2)}a=c[e>>2]|0;if(!a){P_(g);return}P_(a);P_(g);return}function SL(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0;n=i;i=i+80|0;g=n+20|0;l=n+8|0;f=n+4|0;j=n;m=c[11345]|0;c[g>>2]=m;c[g+(c[m+-16>>2]|0)>>2]=c[11346];m=g+4|0;o=c[11347]|0;c[m>>2]=o;c[m+(c[o+-16>>2]|0)>>2]=c[11348];o=g+8|0;m=c[11349]|0;c[o>>2]=m;c[o+(c[m+-16>>2]|0)>>2]=c[11350];c[g>>2]=45276;c[g+4>>2]=45328;c[g+8>>2]=45360;c[g+20>>2]=0;kM(g+28|0,0,1);c[g+40>>2]=12880;m=g+44|0;c[m>>2]=0;a[g+48>>0]=0;c[m>>2]=g+(c[(c[g>>2]|0)+-16>>2]|0);c[l>>2]=0;m=l+4|0;c[m>>2]=0;c[l+8>>2]=0;e=c[e>>2]|0;c[f>>2]=e;if((e|0)!=0?(e=e+((c[(c[e>>2]|0)+-12>>2]|0)+4)|0,o=(c[e>>2]|0)+1|0,c[e>>2]=o,(o|0)==0):0)Ha(79054,79014,48,79068);MW(g,f,0,l);e=c[f>>2]|0;if((e|0)!=0?(g=c[(c[e>>2]|0)+-12>>2]|0,h=e+g|0,g=e+(g+4)|0,o=(c[g>>2]|0)+-1|0,c[g>>2]=o,!((h|0)==0|(o|0)!=0)):0)oc[c[(c[h>>2]|0)+4>>2]&2047](h);e=c[d>>2]|0;c[j>>2]=e;if((e|0)!=0?(d=e+((c[(c[e>>2]|0)+-12>>2]|0)+4)|0,o=(c[d>>2]|0)+1|0,c[d>>2]=o,(o|0)==0):0)Ha(79054,79014,48,79068);f=c[m>>2]|0;c[b+84>>2]=c[l>>2];c[b+88>>2]=f;f=IP(b,j)|0;e=c[j>>2]|0;if((e|0)!=0?(j=c[(c[e>>2]|0)+-12>>2]|0,k=e+j|0,j=e+(j+4)|0,o=(c[j>>2]|0)+-1|0,c[j>>2]=o,!((k|0)==0|(o|0)!=0)):0)oc[c[(c[k>>2]|0)+4>>2]&2047](k);if(f){g=o$(f,1576,8200,0)|0;if((g|0)!=0?(k=g+((c[(c[g>>2]|0)+-12>>2]|0)+4)|0,o=(c[k>>2]|0)+1|0,c[k>>2]=o,(o|0)==0):0)Ha(79054,79014,48,79068);k=c[(c[f>>2]|0)+-12>>2]|0;e=f+k|0;k=f+(k+4)|0;o=(c[k>>2]|0)+-1|0;c[k>>2]=o;if(!((e|0)==0|(o|0)!=0))oc[c[(c[e>>2]|0)+4>>2]&2047](e)}else g=0;e=c[l>>2]|0;if(!e){i=n;return g|0}f=c[m>>2]|0;if((f|0)!=(e|0))c[m>>2]=f+(~((f+-8-e|0)>>>3)<<3);P_(e);i=n;return g|0}function TL(a){a=a|0;var b=0,d=0,e=0,f=0,g=0;c[a+4>>2]=1136;c[a+8>>2]=1228;c[a+12>>2]=1260;c[a+16>>2]=1292;c[a+20>>2]=1324;g=a+24|0;pG(g);e=a+28|0;b=c[e>>2]|0;f=a+32|0;d=c[f>>2]|0;if((b|0)!=(d|0)){a=b;do{P_(c[a>>2]|0);a=a+4|0}while((a|0)!=(d|0));a=c[e>>2]|0;b=c[f>>2]|0;if((b|0)!=(a|0))c[f>>2]=b+(~((b+-4-a|0)>>>2)<<2)}a=c[g>>2]|0;if(!a)return;P_(a);return}function UL(a){a=a|0;var b=0,d=0,e=0,f=0,g=0;c[a+4>>2]=1136;c[a+8>>2]=1228;c[a+12>>2]=1260;c[a+16>>2]=1292;c[a+20>>2]=1324;f=a+24|0;pG(f);d=a+28|0;b=c[d>>2]|0;g=a+32|0;e=c[g>>2]|0;if((b|0)!=(e|0)){do{P_(c[b>>2]|0);b=b+4|0}while((b|0)!=(e|0));b=c[d>>2]|0;d=c[g>>2]|0;if((d|0)!=(b|0))c[g>>2]=d+(~((d+-4-b|0)>>>2)<<2)}b=c[f>>2]|0;if(!b){P_(a);return}P_(b);P_(a);return}function VL(a,b){a=a|0;b=b|0;var d=0;PP(a,b);b=a+84|0;d=c[b>>2]|0;if((d|0)==(c[a+88>>2]|0))return;c[b>>2]=d+8;return}function WL(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,j=0,k=0,l=0,m=0;l=i;i=i+32|0;e=l+16|0;k=l+8|0;h=l;j=b+4|0;d=zc[c[(c[j>>2]|0)+72>>2]&255](j,d)|0;c[k>>2]=d;if(!d){i=l;return}kM(e,-999999,4);d=d+60|0;if(!(uM(d,e)|0))rM(b+76|0,d)|0;g=b+84|0;d=c[g>>2]|0;do if((d|0)==(c[b+88>>2]|0)){d=b+76|0;if(c[d>>2]|0){e=c[k>>2]|0;if(!e)Ha(78999,79014,95,78956);else{GE(e,d)|0;c[d>>2]=0;break}}}else{lM(h,d);d=b+64|0;m=uM(h,d)|0;e=c[k>>2]|0;f=(e|0)==0;do if(m)if(f)Ha(78999,79014,102,79043);else{c[e+60>>2]=-999999;c[e+64>>2]=4;break}else if(f)Ha(78999,79014,95,78956);else{GE(e,rM(d,h)|0)|0;break}while(0);if(!(a[b+48>>0]|0))c[g>>2]=(c[g>>2]|0)+8}while(0);Dc[c[(c[j>>2]|0)+56>>2]&63](j,k,0);d=c[k>>2]|0;if(!d){i=l;return}k=c[(c[d>>2]|0)+-12>>2]|0;e=d+k|0;k=d+(k+4)|0;m=(c[k>>2]|0)+-1|0;c[k>>2]=m;if((e|0)==0|(m|0)!=0){i=l;return}oc[c[(c[e>>2]|0)+4>>2]&2047](e);i=l;return}function XL(a){a=a|0;var b=0,d=0,e=0,f=0;f=a+-4|0;c[f+4>>2]=1136;c[f+8>>2]=1228;c[f+12>>2]=1260;c[f+16>>2]=1292;c[f+20>>2]=1324;e=f+24|0;pG(e);d=f+28|0;a=c[d>>2]|0;f=f+32|0;b=c[f>>2]|0;if((a|0)!=(b|0)){do{P_(c[a>>2]|0);a=a+4|0}while((a|0)!=(b|0));a=c[d>>2]|0;b=c[f>>2]|0;if((b|0)!=(a|0))c[f>>2]=b+(~((b+-4-a|0)>>>2)<<2)}a=c[e>>2]|0;if(!a)return;P_(a);return}function YL(a){a=a|0;var b=0,d=0,e=0,f=0,g=0;g=a+-4|0;c[g+4>>2]=1136;c[g+8>>2]=1228;c[g+12>>2]=1260;c[g+16>>2]=1292;c[g+20>>2]=1324;e=g+24|0;pG(e);d=g+28|0;a=c[d>>2]|0;f=g+32|0;b=c[f>>2]|0;if((a|0)!=(b|0)){do{P_(c[a>>2]|0);a=a+4|0}while((a|0)!=(b|0));a=c[d>>2]|0;b=c[f>>2]|0;if((b|0)!=(a|0))c[f>>2]=b+(~((b+-4-a|0)>>>2)<<2)}a=c[e>>2]|0;if(!a){P_(g);return}P_(a);P_(g);return}function ZL(a,b){a=a|0;b=b|0;WL(a+-4|0,b);return}function _L(a,b){a=a|0;b=b|0;var d=0;d=a+-4|0;PP(d,b);b=d+84|0;a=c[b>>2]|0;if((a|0)==(c[d+88>>2]|0))return;c[b>>2]=a+8;return}function $L(a){a=a|0;var b=0,d=0,e=0,f=0;f=a+-8|0;c[f+4>>2]=1136;c[f+8>>2]=1228;c[f+12>>2]=1260;c[f+16>>2]=1292;c[f+20>>2]=1324;e=f+24|0;pG(e);d=f+28|0;a=c[d>>2]|0;f=f+32|0;b=c[f>>2]|0;if((a|0)!=(b|0)){do{P_(c[a>>2]|0);a=a+4|0}while((a|0)!=(b|0));a=c[d>>2]|0;b=c[f>>2]|0;if((b|0)!=(a|0))c[f>>2]=b+(~((b+-4-a|0)>>>2)<<2)}a=c[e>>2]|0;if(!a)return;P_(a);return}function aM(a){a=a|0;var b=0,d=0,e=0,f=0,g=0;g=a+-8|0;c[g+4>>2]=1136;c[g+8>>2]=1228;c[g+12>>2]=1260;c[g+16>>2]=1292;c[g+20>>2]=1324;e=g+24|0;pG(e);d=g+28|0;a=c[d>>2]|0;f=g+32|0;b=c[f>>2]|0;if((a|0)!=(b|0)){do{P_(c[a>>2]|0);a=a+4|0}while((a|0)!=(b|0));a=c[d>>2]|0;b=c[f>>2]|0;if((b|0)!=(a|0))c[f>>2]=b+(~((b+-4-a|0)>>>2)<<2)}a=c[e>>2]|0;if(!a){P_(g);return}P_(a);P_(g);return}function bM(a){a=a|0;var b=0,d=0,e=0,f=0;f=a+-12|0;c[f+4>>2]=1136;c[f+8>>2]=1228;c[f+12>>2]=1260;c[f+16>>2]=1292;c[f+20>>2]=1324;e=f+24|0;pG(e);d=f+28|0;a=c[d>>2]|0;f=f+32|0;b=c[f>>2]|0;if((a|0)!=(b|0)){do{P_(c[a>>2]|0);a=a+4|0}while((a|0)!=(b|0));a=c[d>>2]|0;b=c[f>>2]|0;if((b|0)!=(a|0))c[f>>2]=b+(~((b+-4-a|0)>>>2)<<2)}a=c[e>>2]|0;if(!a)return;P_(a);return}function cM(a){a=a|0;var b=0,d=0,e=0,f=0,g=0;g=a+-12|0;c[g+4>>2]=1136;c[g+8>>2]=1228;c[g+12>>2]=1260;c[g+16>>2]=1292;c[g+20>>2]=1324;e=g+24|0;pG(e);d=g+28|0;a=c[d>>2]|0;f=g+32|0;b=c[f>>2]|0;if((a|0)!=(b|0)){do{P_(c[a>>2]|0);a=a+4|0}while((a|0)!=(b|0));a=c[d>>2]|0;b=c[f>>2]|0;if((b|0)!=(a|0))c[f>>2]=b+(~((b+-4-a|0)>>>2)<<2)}a=c[e>>2]|0;if(!a){P_(g);return}P_(a);P_(g);return}function dM(a,b){a=a|0;b=b|0;var d=0;d=a+-12|0;PP(d,b);b=d+84|0;a=c[b>>2]|0;if((a|0)==(c[d+88>>2]|0))return;c[b>>2]=a+8;return}function eM(a){a=a|0;var b=0,d=0,e=0,f=0;f=a+-16|0;c[a+-12>>2]=1136;c[f+8>>2]=1228;c[f+12>>2]=1260;c[f+16>>2]=1292;c[f+20>>2]=1324;e=f+24|0;pG(e);d=f+28|0;a=c[d>>2]|0;f=f+32|0;b=c[f>>2]|0;if((a|0)!=(b|0)){do{P_(c[a>>2]|0);a=a+4|0}while((a|0)!=(b|0));a=c[d>>2]|0;b=c[f>>2]|0;if((b|0)!=(a|0))c[f>>2]=b+(~((b+-4-a|0)>>>2)<<2)}a=c[e>>2]|0;if(!a)return;P_(a);return}function fM(a){a=a|0;var b=0,d=0,e=0,f=0,g=0;g=a+-16|0;c[a+-12>>2]=1136;c[g+8>>2]=1228;c[g+12>>2]=1260;c[g+16>>2]=1292;c[g+20>>2]=1324;e=g+24|0;pG(e);d=g+28|0;a=c[d>>2]|0;f=g+32|0;b=c[f>>2]|0;if((a|0)!=(b|0)){do{P_(c[a>>2]|0);a=a+4|0}while((a|0)!=(b|0));a=c[d>>2]|0;b=c[f>>2]|0;if((b|0)!=(a|0))c[f>>2]=b+(~((b+-4-a|0)>>>2)<<2)}a=c[e>>2]|0;if(!a){P_(g);return}P_(a);P_(g);return}function gM(a,b){a=a|0;b=b|0;WL(a+-16|0,b);return}function hM(a){a=a|0;var b=0,d=0,e=0,f=0;f=a+-20|0;c[f+4>>2]=1136;c[f+8>>2]=1228;c[f+12>>2]=1260;c[f+16>>2]=1292;c[f+20>>2]=1324;e=f+24|0;pG(e);d=f+28|0;a=c[d>>2]|0;f=f+32|0;b=c[f>>2]|0;if((a|0)!=(b|0)){do{P_(c[a>>2]|0);a=a+4|0}while((a|0)!=(b|0));a=c[d>>2]|0;b=c[f>>2]|0;if((b|0)!=(a|0))c[f>>2]=b+(~((b+-4-a|0)>>>2)<<2)}a=c[e>>2]|0;if(!a)return;P_(a);return}function iM(a){a=a|0;var b=0,d=0,e=0,f=0,g=0;g=a+-20|0;c[g+4>>2]=1136;c[g+8>>2]=1228;c[g+12>>2]=1260;c[g+16>>2]=1292;c[g+20>>2]=1324;e=g+24|0;pG(e);d=g+28|0;a=c[d>>2]|0;f=g+32|0;b=c[f>>2]|0;if((a|0)!=(b|0)){do{P_(c[a>>2]|0);a=a+4|0}while((a|0)!=(b|0));a=c[d>>2]|0;b=c[f>>2]|0;if((b|0)!=(a|0))c[f>>2]=b+(~((b+-4-a|0)>>>2)<<2)}a=c[e>>2]|0;if(!a){P_(g);return}P_(a);P_(g);return}function jM(a){a=a|0;var b=0,d=0.0;b=c[a+4>>2]|0;if(!b){d=0.0;return +d}d=+(c[a>>2]|0)/+(b|0);return +d}function kM(a,b,d){a=a|0;b=b|0;d=d|0;c[a>>2]=b;c[a+4>>2]=(d|0)==0?1:d;return}function lM(a,b){a=a|0;b=b|0;c[a>>2]=c[b>>2];c[a+4>>2]=c[b+4>>2];return}function mM(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0;g=c[d+4>>2]|0;e=$(g,c[b>>2]|0)|0;f=c[b+4>>2]|0;b=$(f,g)|0;c[a>>2]=($(f,c[d>>2]|0)|0)+e;c[a+4>>2]=(b|0)==0?1:b;return}function nM(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0;g=c[d+4>>2]|0;f=$(g,c[b>>2]|0)|0;e=c[b+4>>2]|0;b=$(e,g)|0;c[a>>2]=f-($(e,c[d>>2]|0)|0);c[a+4>>2]=(b|0)==0?1:b;return}function oM(a,b,d){a=a|0;b=b|0;d=d|0;var e=0;e=$(c[d>>2]|0,c[b>>2]|0)|0;b=$(c[d+4>>2]|0,c[b+4>>2]|0)|0;c[a>>2]=e;c[a+4>>2]=(b|0)==0?1:b;return}function pM(a,b,d){a=a|0;b=b|0;d=d|0;var e=0;e=$(c[d+4>>2]|0,c[b>>2]|0)|0;b=$(c[d>>2]|0,c[b+4>>2]|0)|0;c[a>>2]=e;c[a+4>>2]=(b|0)==0?1:b;return}function qM(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;e=a+4|0;f=c[e>>2]|0;g=c[b+4>>2]|0;b=c[b>>2]|0;d=c[a>>2]|0;if((f|0)==(g|0)){c[a>>2]=d+b;return a|0}else{c[a>>2]=($(b,f)|0)+($(d,g)|0);c[e>>2]=$(f,g)|0;return a|0}return 0}function rM(a,b){a=a|0;b=b|0;c[a>>2]=c[b>>2];c[a+4>>2]=c[b+4>>2];return a|0}function sM(a,b){a=a|0;b=b|0;var d=0;d=$(c[b+4>>2]|0,c[a>>2]|0)|0;return (d|0)>($(c[b>>2]|0,c[a+4>>2]|0)|0)|0}function tM(a,b){a=a|0;b=b|0;var d=0;d=$(c[b+4>>2]|0,c[a>>2]|0)|0;return (d|0)<($(c[b>>2]|0,c[a+4>>2]|0)|0)|0}function uM(a,b){a=a|0;b=b|0;var d=0;d=$(c[b+4>>2]|0,c[a>>2]|0)|0;return (d|0)==($(c[b>>2]|0,c[a+4>>2]|0)|0)|0}function vM(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0;e=c[a>>2]|0;f=a+4|0;g=c[f>>2]|0;b=~~+O(+(+(e|0)));d=~~+O(+(+(g|0)));if((b|0)!=0|(d|0)==0){if((d|0)>0)while(1){b=(b|0)%(d|0)|0;if((b|0)>0){h=d;d=b;b=h}else{b=d;break}}}else b=1;h=(e|0)/(b|0)|0;c[a>>2]=h;c[f>>2]=(h|0)==0?1:(g|0)/(b|0)|0;return a|0}function wM(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;c[a>>2]=38136;c[a+4>>2]=b;c[a+8>>2]=0;c[a+12>>2]=d;c[a+16>>2]=0;c[a+20>>2]=e;return}function xM(b){b=b|0;var d=0,e=0,f=0,g=0,h=0,j=0;h=i;i=i+16|0;e=h;f=b+8|0;if((c[f>>2]|0)<=(c[b+12>>2]|0)){i=h;return}g=b+16|0;d=c[g>>2]|0;b=b+4|0;j=c[b>>2]|0;a[e>>0]=10;df(j,e,1)|0;if(d)do{d=d+-1|0;j=c[b>>2]|0;a[e>>0]=32;df(j,e,1)|0}while((d|0)!=0);c[f>>2]=c[g>>2];i=h;return}function yM(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0;o=i;i=i+16|0;h=o;e=a[d>>0]|0;n=(e&1)==0?(e&255)>>>1:c[d+4>>2]|0;if((n|0)<=0){i=o;return}j=d+8|0;k=d+1|0;l=b+16|0;m=b+4|0;g=b+8|0;f=0;while(1){b=a[((e&1)==0?k:c[j>>2]|0)+f>>0]|0;if(b<<24>>24==10){b=c[l>>2]|0;e=c[m>>2]|0;a[h>>0]=10;df(e,h,1)|0;if(b)do{b=b+-1|0;e=c[m>>2]|0;a[h>>0]=32;df(e,h,1)|0}while((b|0)!=0);b=c[l>>2]|0}else{e=c[m>>2]|0;a[h>>0]=b;df(e,h,1)|0;b=(c[g>>2]|0)+1|0}c[g>>2]=b;b=f+1|0;if((b|0)==(n|0))break;e=a[d>>0]|0;f=b}i=o;return}function zM(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,j=0;h=i;i=i+16|0;g=h;if(d<<24>>24!=10){f=c[b+4>>2]|0;a[g>>0]=d;df(f,g,1)|0;i=h;return b|0}e=b+16|0;d=c[e>>2]|0;f=b+4|0;j=c[f>>2]|0;a[g>>0]=10;df(j,g,1)|0;if(d)do{d=d+-1|0;j=c[f>>2]|0;a[g>>0]=32;df(j,g,1)|0}while((d|0)!=0);c[b+8>>2]=c[e>>2];i=h;return b|0}function AM(a){a=a|0;return}function BM(a){a=a|0;P_(a);return}function CM(b,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;c[b+48>>2]=e;c[b+52>>2]=0;h=c[d>>2]|0;if(!h){n=0;return n|0}i=b+56|0;a[b+64>>0]=0;pc[c[(c[i>>2]|0)+12>>2]&1023](i,h);d=c[h+4>>2]|0;g=h+8|0;a:do if((d|0)==(c[g>>2]|0))k=4;else{while(1){f=rc[c[(c[i>>2]|0)+24>>2]&127](i)|0;e=c[i>>2]|0;if(f){j=e;break a}f=c[d>>2]|0;if(!f)break;pc[c[e+8>>2]&1023](i,f);d=d+4|0;if((d|0)==(c[g>>2]|0)){k=4;break a}}Ha(78999,79014,95,78956)}while(0);if((k|0)==4)j=c[i>>2]|0;pc[c[j+16>>2]&1023](i,h);j=b+44|0;d=c[j>>2]|0;i=b+40|0;f=c[i>>2]|0;e=d+-1+f|0;h=b+28|0;g=c[h>>2]|0;e=c[(c[g+(e>>>10<<2)>>2]|0)+((e&1023)<<2)>>2]|0;do if(e){d=e+((c[(c[e>>2]|0)+-12>>2]|0)+4)|0;k=(c[d>>2]|0)+1|0;c[d>>2]=k;if(!k)Ha(79054,79014,48,79068);else{l=c[j>>2]|0;n=e;break}}else{l=d;n=0}while(0);d=l+-1+f|0;d=c[(c[g+(d>>>10<<2)>>2]|0)+((d&1023)<<2)>>2]|0;if((d|0)!=0?(k=c[(c[d>>2]|0)+-12>>2]|0,m=d+k|0,k=d+(k+4)|0,l=(c[k>>2]|0)+-1|0,c[k>>2]=l,!((m|0)==0|(l|0)!=0)):0){oc[c[(c[m>>2]|0)+4>>2]&2047](m);g=c[h>>2]|0;f=c[i>>2]|0}m=c[j>>2]|0;c[j>>2]=m+-1;d=b+32|0;e=c[d>>2]|0;if((1-f-m+((e|0)==(g|0)?0:(e-g<<8)+-1|0)|0)>>>0<=2047)return n|0;P_(c[e+-4>>2]|0);c[d>>2]=(c[d>>2]|0)+-4;return n|0}function DM(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,j=0;h=i;i=i+16|0;e=h;f=c[b>>2]|0;c[e>>2]=f;if((f|0)!=0?(j=f+((c[(c[f>>2]|0)+-12>>2]|0)+4)|0,b=(c[j>>2]|0)+1|0,c[j>>2]=b,(b|0)==0):0)Ha(79054,79014,48,79068);b=c[d>>2]|0;if(!b)Ha(78999,79014,102,79043);e=CM(a,e,rc[c[(c[b>>2]|0)+8>>2]&127](b)|0)|0;if((f|0)!=0?(a=c[(c[f>>2]|0)+-12>>2]|0,g=f+a|0,a=f+(a+4)|0,j=(c[a>>2]|0)+-1|0,c[a>>2]=j,!((g|0)==0|(j|0)!=0)):0)oc[c[(c[g>>2]|0)+4>>2]&2047](g);if(!e){j=0;i=h;return j|0}b=o$(e,1576,8200,0)|0;if((b|0)!=0?(g=b+((c[(c[b>>2]|0)+-12>>2]|0)+4)|0,j=(c[g>>2]|0)+1|0,c[g>>2]=j,(j|0)==0):0)Ha(79054,79014,48,79068);g=c[(c[e>>2]|0)+-12>>2]|0;d=e+g|0;g=e+(g+4)|0;j=(c[g>>2]|0)+-1|0;c[g>>2]=j;if((d|0)==0|(j|0)!=0){j=b;i=h;return j|0}oc[c[(c[d>>2]|0)+4>>2]&2047](d);j=b;i=h;return j|0}function EM(a){a=a|0;return (c[a+52>>2]|0)>(c[a+48>>2]|0)|0}function FM(b,d){b=b|0;d=d|0;var e=0;e=b+52|0;c[e>>2]=(c[e>>2]|0)+1;if(rc[c[(c[b>>2]|0)+12>>2]&127](b)|0){HT(b+4|0,d);return}else{a[b+64>>0]=1;return}}function GM(b,d){b=b|0;d=d|0;var e=0;b=b+-4|0;e=b+52|0;c[e>>2]=(c[e>>2]|0)+1;if(rc[c[(c[b>>2]|0)+12>>2]&127](b)|0){HT(b+4|0,d);return}else{a[b+64>>0]=1;return}}function HM(b,d){b=b|0;d=d|0;var e=0;b=b+-8|0;e=b+52|0;c[e>>2]=(c[e>>2]|0)+1;if(rc[c[(c[b>>2]|0)+12>>2]&127](b)|0){HT(b+4|0,d);return}else{a[b+64>>0]=1;return}}function IM(b,d){b=b|0;d=d|0;a[b+64>>0]=0;if(!(rc[c[(c[b>>2]|0)+12>>2]&127](b)|0))return;PT(b+4|0,d);return}function JM(b,d){b=b|0;d=d|0;b=b+-4|0;a[b+64>>0]=0;if(!(rc[c[(c[b>>2]|0)+12>>2]&127](b)|0))return;PT(b+4|0,d);return}function KM(b,d){b=b|0;d=d|0;b=b+-8|0;a[b+64>>0]=0;if(!(rc[c[(c[b>>2]|0)+12>>2]&127](b)|0))return;PT(b+4|0,d);return}function LM(a){a=a|0;var b=0,d=0,e=0,f=0,g=0;c[a+4>>2]=1136;c[a+8>>2]=1228;c[a+12>>2]=1260;c[a+16>>2]=1292;c[a+20>>2]=1324;g=a+24|0;pG(g);e=a+28|0;b=c[e>>2]|0;f=a+32|0;d=c[f>>2]|0;if((b|0)!=(d|0)){a=b;do{P_(c[a>>2]|0);a=a+4|0}while((a|0)!=(d|0));a=c[e>>2]|0;b=c[f>>2]|0;if((b|0)!=(a|0))c[f>>2]=b+(~((b+-4-a|0)>>>2)<<2)}a=c[g>>2]|0;if(!a)return;P_(a);return}function MM(a){a=a|0;var b=0,d=0,e=0,f=0,g=0;c[a+4>>2]=1136;c[a+8>>2]=1228;c[a+12>>2]=1260;c[a+16>>2]=1292;c[a+20>>2]=1324;f=a+24|0;pG(f);d=a+28|0;b=c[d>>2]|0;g=a+32|0;e=c[g>>2]|0;if((b|0)!=(e|0)){do{P_(c[b>>2]|0);b=b+4|0}while((b|0)!=(e|0));b=c[d>>2]|0;d=c[g>>2]|0;if((d|0)!=(b|0))c[g>>2]=d+(~((d+-4-b|0)>>>2)<<2)}b=c[f>>2]|0;if(!b){P_(a);return}P_(b);P_(a);return}function NM(a){a=a|0;var b=0,d=0,e=0,f=0;f=a+-4|0;c[f+4>>2]=1136;c[f+8>>2]=1228;c[f+12>>2]=1260;c[f+16>>2]=1292;c[f+20>>2]=1324;e=f+24|0;pG(e);d=f+28|0;a=c[d>>2]|0;f=f+32|0;b=c[f>>2]|0;if((a|0)!=(b|0)){do{P_(c[a>>2]|0);a=a+4|0}while((a|0)!=(b|0));a=c[d>>2]|0;b=c[f>>2]|0;if((b|0)!=(a|0))c[f>>2]=b+(~((b+-4-a|0)>>>2)<<2)}a=c[e>>2]|0;if(!a)return;P_(a);return}function OM(a){a=a|0;var b=0,d=0,e=0,f=0,g=0;g=a+-4|0;c[g+4>>2]=1136;c[g+8>>2]=1228;c[g+12>>2]=1260;c[g+16>>2]=1292;c[g+20>>2]=1324;e=g+24|0;pG(e);d=g+28|0;a=c[d>>2]|0;f=g+32|0;b=c[f>>2]|0;if((a|0)!=(b|0)){do{P_(c[a>>2]|0);a=a+4|0}while((a|0)!=(b|0));a=c[d>>2]|0;b=c[f>>2]|0;if((b|0)!=(a|0))c[f>>2]=b+(~((b+-4-a|0)>>>2)<<2)}a=c[e>>2]|0;if(!a){P_(g);return}P_(a);P_(g);return}function PM(a){a=a|0;var b=0,d=0,e=0,f=0;f=a+-8|0;c[f+4>>2]=1136;c[f+8>>2]=1228;c[f+12>>2]=1260;c[f+16>>2]=1292;c[f+20>>2]=1324;e=f+24|0;pG(e);d=f+28|0;a=c[d>>2]|0;f=f+32|0;b=c[f>>2]|0;if((a|0)!=(b|0)){do{P_(c[a>>2]|0);a=a+4|0}while((a|0)!=(b|0));a=c[d>>2]|0;b=c[f>>2]|0;if((b|0)!=(a|0))c[f>>2]=b+(~((b+-4-a|0)>>>2)<<2)}a=c[e>>2]|0;if(!a)return;P_(a);return}function QM(a){a=a|0;var b=0,d=0,e=0,f=0,g=0;g=a+-8|0;c[g+4>>2]=1136;c[g+8>>2]=1228;c[g+12>>2]=1260;c[g+16>>2]=1292;c[g+20>>2]=1324;e=g+24|0;pG(e);d=g+28|0;a=c[d>>2]|0;f=g+32|0;b=c[f>>2]|0;if((a|0)!=(b|0)){do{P_(c[a>>2]|0);a=a+4|0}while((a|0)!=(b|0));a=c[d>>2]|0;b=c[f>>2]|0;if((b|0)!=(a|0))c[f>>2]=b+(~((b+-4-a|0)>>>2)<<2)}a=c[e>>2]|0;if(!a){P_(g);return}P_(a);P_(g);return}function RM(a){a=a|0;var b=0,d=0,e=0,f=0;f=a+-12|0;c[a+-8>>2]=1136;c[a+-4>>2]=1228;c[f+12>>2]=1260;c[f+16>>2]=1292;c[f+20>>2]=1324;e=f+24|0;pG(e);d=f+28|0;a=c[d>>2]|0;f=f+32|0;b=c[f>>2]|0;if((a|0)!=(b|0)){do{P_(c[a>>2]|0);a=a+4|0}while((a|0)!=(b|0));a=c[d>>2]|0;b=c[f>>2]|0;if((b|0)!=(a|0))c[f>>2]=b+(~((b+-4-a|0)>>>2)<<2)}a=c[e>>2]|0;if(!a)return;P_(a);return}function SM(a){a=a|0;var b=0,d=0,e=0,f=0,g=0;g=a+-12|0;c[a+-8>>2]=1136;c[a+-4>>2]=1228;c[g+12>>2]=1260;c[g+16>>2]=1292;c[g+20>>2]=1324;e=g+24|0;pG(e);d=g+28|0;a=c[d>>2]|0;f=g+32|0;b=c[f>>2]|0;if((a|0)!=(b|0)){do{P_(c[a>>2]|0);a=a+4|0}while((a|0)!=(b|0));a=c[d>>2]|0;b=c[f>>2]|0;if((b|0)!=(a|0))c[f>>2]=b+(~((b+-4-a|0)>>>2)<<2)}a=c[e>>2]|0;if(!a){P_(g);return}P_(a);P_(g);return}function TM(a){a=a|0;var b=0,d=0,e=0,f=0;f=a+-16|0;c[f+4>>2]=1136;c[f+8>>2]=1228;c[f+12>>2]=1260;c[f+16>>2]=1292;c[f+20>>2]=1324;e=f+24|0;pG(e);d=f+28|0;a=c[d>>2]|0;f=f+32|0;b=c[f>>2]|0;if((a|0)!=(b|0)){do{P_(c[a>>2]|0);a=a+4|0}while((a|0)!=(b|0));a=c[d>>2]|0;b=c[f>>2]|0;if((b|0)!=(a|0))c[f>>2]=b+(~((b+-4-a|0)>>>2)<<2)}a=c[e>>2]|0;if(!a)return;P_(a);return}function UM(a){a=a|0;var b=0,d=0,e=0,f=0,g=0;g=a+-16|0;c[g+4>>2]=1136;c[g+8>>2]=1228;c[g+12>>2]=1260;c[g+16>>2]=1292;c[g+20>>2]=1324;e=g+24|0;pG(e);d=g+28|0;a=c[d>>2]|0;f=g+32|0;b=c[f>>2]|0;if((a|0)!=(b|0)){do{P_(c[a>>2]|0);a=a+4|0}while((a|0)!=(b|0));a=c[d>>2]|0;b=c[f>>2]|0;if((b|0)!=(a|0))c[f>>2]=b+(~((b+-4-a|0)>>>2)<<2)}a=c[e>>2]|0;if(!a){P_(g);return}P_(a);P_(g);return}function VM(a){a=a|0;var b=0,d=0,e=0,f=0;f=a+-20|0;c[f+4>>2]=1136;c[f+8>>2]=1228;c[f+12>>2]=1260;c[f+16>>2]=1292;c[f+20>>2]=1324;e=f+24|0;pG(e);d=f+28|0;a=c[d>>2]|0;f=f+32|0;b=c[f>>2]|0;if((a|0)!=(b|0)){do{P_(c[a>>2]|0);a=a+4|0}while((a|0)!=(b|0));a=c[d>>2]|0;b=c[f>>2]|0;if((b|0)!=(a|0))c[f>>2]=b+(~((b+-4-a|0)>>>2)<<2)}a=c[e>>2]|0;if(!a)return;P_(a);return}function WM(a){a=a|0;var b=0,d=0,e=0,f=0,g=0;g=a+-20|0;c[g+4>>2]=1136;c[g+8>>2]=1228;c[g+12>>2]=1260;c[g+16>>2]=1292;c[g+20>>2]=1324;e=g+24|0;pG(e);d=g+28|0;a=c[d>>2]|0;f=g+32|0;b=c[f>>2]|0;if((a|0)!=(b|0)){do{P_(c[a>>2]|0);a=a+4|0}while((a|0)!=(b|0));a=c[d>>2]|0;b=c[f>>2]|0;if((b|0)!=(a|0))c[f>>2]=b+(~((b+-4-a|0)>>>2)<<2)}a=c[e>>2]|0;if(!a){P_(g);return}P_(a);P_(g);return}function XM(b){b=b|0;var d=0;d=b+24|0;c[d>>2]=0;c[d+4>>2]=0;c[d+8>>2]=0;c[d+12>>2]=0;c[d+16>>2]=0;c[d+20>>2]=0;c[b>>2]=38504;c[b+4>>2]=38548;c[b+8>>2]=38640;c[b+12>>2]=38672;c[b+16>>2]=38704;c[b+20>>2]=38736;kM(b+248|0,1,1);kM(b+256|0,0,1);kM(b+264|0,0,1);Qba(b+48|0,0,199)|0;a[b+71>>0]=1;a[b+77>>0]=1;a[b+79>>0]=1;a[b+85>>0]=1;a[b+89>>0]=1;a[b+91>>0]=1;a[b+95>>0]=1;a[b+101>>0]=1;a[b+107>>0]=1;a[b+109>>0]=1;a[b+115>>0]=1;a[b+119>>0]=1;a[b+121>>0]=1;a[b+127>>0]=1;a[b+131>>0]=1;a[b+137>>0]=1;a[b+145>>0]=1;a[b+149>>0]=1;a[b+151>>0]=1;a[b+155>>0]=1;a[b+157>>0]=1;a[b+161>>0]=1;a[b+175>>0]=1;a[b+179>>0]=1;a[b+185>>0]=1;a[b+187>>0]=1;a[b+197>>0]=1;a[b+199>>0]=1;a[b+205>>0]=1;a[b+211>>0]=1;a[b+215>>0]=1;a[b+221>>0]=1;a[b+227>>0]=1;a[b+229>>0]=1;a[b+239>>0]=1;a[b+241>>0]=1;a[b+245>>0]=1;a[b+247>>0]=1;return}function YM(a,b,d){a=a|0;b=b|0;d=+d;var e=0,f=0,g=0;f=i;i=i+16|0;e=f;if(!(c[b>>2]|0)){a=0;i=f;return a|0}g=c[(c[a>>2]|0)+24>>2]|0;kM(e,~~(d*1.0e6),1e6);vM(e)|0;a=tc[g&63](a,b,e)|0;i=f;return a|0}function ZM(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,j=0,k=0,l=0;j=i;i=i+80|0;g=j+16|0;f=j+8|0;h=j;if(!(c[d>>2]|0)){b=0;i=j;return b|0}k=c[10958]|0;c[g>>2]=k;c[g+(c[k+-16>>2]|0)>>2]=c[10959];k=g+4|0;l=c[10960]|0;c[k>>2]=l;c[k+(c[l+-16>>2]|0)>>2]=c[10961];l=g+8|0;k=c[10962]|0;c[l>>2]=k;c[l+(c[k+-16>>2]|0)>>2]=c[10963];c[g>>2]=1360;c[g+4>>2]=1428;c[g+8>>2]=1460;kM(g+12|0,0,1);kM(g+20|0,0,1);kM(g+28|0,0,1);kM(g+40|0,0,1);c[g+52>>2]=12880;k=g+56|0;c[k>>2]=0;a[g+60>>0]=0;c[k>>2]=g+(c[(c[g>>2]|0)+-16>>2]|0);fU(f,g,d);pM(h,e,f);g=c[(c[b>>2]|0)+24>>2]|0;e=vM(h)|0;b=tc[g&63](b,d,e)|0;i=j;return b|0}function _M(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0;r=i;i=i+112|0;k=r+48|0;m=r+40|0;f=r+32|0;n=r+24|0;j=r+16|0;o=r+8|0;p=r;if(!(c[d>>2]|0)){q=0;i=r;return q|0}if(!(c[e>>2]|0)){q=0;i=r;return q|0}g=c[10958]|0;c[k>>2]=g;c[k+(c[g+-16>>2]|0)>>2]=c[10959];g=k+4|0;s=c[10960]|0;c[g>>2]=s;c[g+(c[s+-16>>2]|0)>>2]=c[10961];s=k+8|0;g=c[10962]|0;c[s>>2]=g;c[s+(c[g+-16>>2]|0)>>2]=c[10963];c[k>>2]=1360;c[k+4>>2]=1428;c[k+8>>2]=1460;kM(k+12|0,0,1);kM(k+20|0,0,1);kM(k+28|0,0,1);kM(k+40|0,0,1);c[k+52>>2]=12880;g=k+56|0;c[g>>2]=0;a[k+60>>0]=0;c[g>>2]=k+(c[(c[k>>2]|0)+-16>>2]|0);g=c[d>>2]|0;c[f>>2]=g;if((g|0)!=0?(g=g+((c[(c[g>>2]|0)+-12>>2]|0)+4)|0,s=(c[g>>2]|0)+1|0,c[g>>2]=s,(s|0)==0):0)Ha(79054,79014,48,79068);fU(m,k,f);f=c[f>>2]|0;if((f|0)!=0?(g=c[(c[f>>2]|0)+-12>>2]|0,h=f+g|0,g=f+(g+4)|0,s=(c[g>>2]|0)+-1|0,c[g>>2]=s,!((h|0)==0|(s|0)!=0)):0)oc[c[(c[h>>2]|0)+4>>2]&2047](h);f=c[e>>2]|0;c[j>>2]=f;if((f|0)!=0?(e=f+((c[(c[f>>2]|0)+-12>>2]|0)+4)|0,s=(c[e>>2]|0)+1|0,c[e>>2]=s,(s|0)==0):0)Ha(79054,79014,48,79068);fU(n,k,j);f=c[j>>2]|0;if((f|0)!=0?(k=c[(c[f>>2]|0)+-12>>2]|0,l=f+k|0,k=f+(k+4)|0,s=(c[k>>2]|0)+-1|0,c[k>>2]=s,!((l|0)==0|(s|0)!=0)):0)oc[c[(c[l>>2]|0)+4>>2]&2047](l);pM(o,n,m);g=c[(c[b>>2]|0)+24>>2]|0;f=c[d>>2]|0;c[p>>2]=f;if((f|0)!=0?(d=f+((c[(c[f>>2]|0)+-12>>2]|0)+4)|0,s=(c[d>>2]|0)+1|0,c[d>>2]=s,(s|0)==0):0)Ha(79054,79014,48,79068);h=vM(o)|0;h=tc[g&63](b,p,h)|0;f=c[p>>2]|0;if((f|0)!=0?(p=c[(c[f>>2]|0)+-12>>2]|0,q=f+p|0,p=f+(p+4)|0,s=(c[p>>2]|0)+-1|0,c[p>>2]=s,!((q|0)==0|(s|0)!=0)):0)oc[c[(c[q>>2]|0)+4>>2]&2047](q);if(h){f=o$(h,1576,8200,0)|0;if((f|0)!=0?(q=f+((c[(c[f>>2]|0)+-12>>2]|0)+4)|0,s=(c[q>>2]|0)+1|0,c[q>>2]=s,(s|0)==0):0)Ha(79054,79014,48,79068);q=c[(c[h>>2]|0)+-12>>2]|0;g=h+q|0;q=h+(q+4)|0;s=(c[q>>2]|0)+-1|0;c[q>>2]=s;if(!((g|0)==0|(s|0)!=0))oc[c[(c[g>>2]|0)+4>>2]&2047](g)}else f=0;s=f;i=r;return s|0} +function FX(a){a=a|0;c[a>>2]=45564;c[a+4>>2]=45664;c[a+8>>2]=45696;c[a+12>>2]=45728;c[a+16>>2]=45760;c[a+20>>2]=45792;c[a+24>>2]=45824;c[a+28>>2]=45856;c[a+32>>2]=45888;c[a+36>>2]=45920;c[a+40>>2]=45952;c[a+44>>2]=45984;c[a+48>>2]=46016;c[a+52>>2]=46048;c[a+56>>2]=46080;c[a+60>>2]=46112;c[a+64>>2]=46144;oG(a+80|0,c[a+84>>2]|0);oG(a+68|0,c[a+72>>2]|0);P_(a);return}function GX(a,b){a=a|0;b=b|0;return}function HX(a,b){a=a|0;b=b|0;return}function IX(a,b){a=a|0;b=b|0;return}function JX(a){a=a|0;a=a+-4|0;c[a>>2]=45564;c[a+4>>2]=45664;c[a+8>>2]=45696;c[a+12>>2]=45728;c[a+16>>2]=45760;c[a+20>>2]=45792;c[a+24>>2]=45824;c[a+28>>2]=45856;c[a+32>>2]=45888;c[a+36>>2]=45920;c[a+40>>2]=45952;c[a+44>>2]=45984;c[a+48>>2]=46016;c[a+52>>2]=46048;c[a+56>>2]=46080;c[a+60>>2]=46112;c[a+64>>2]=46144;oG(a+80|0,c[a+84>>2]|0);oG(a+68|0,c[a+72>>2]|0);return}function KX(a){a=a|0;a=a+-4|0;c[a>>2]=45564;c[a+4>>2]=45664;c[a+8>>2]=45696;c[a+12>>2]=45728;c[a+16>>2]=45760;c[a+20>>2]=45792;c[a+24>>2]=45824;c[a+28>>2]=45856;c[a+32>>2]=45888;c[a+36>>2]=45920;c[a+40>>2]=45952;c[a+44>>2]=45984;c[a+48>>2]=46016;c[a+52>>2]=46048;c[a+56>>2]=46080;c[a+60>>2]=46112;c[a+64>>2]=46144;oG(a+80|0,c[a+84>>2]|0);oG(a+68|0,c[a+72>>2]|0);P_(a);return}function LX(a){a=a|0;a=a+-8|0;c[a>>2]=45564;c[a+4>>2]=45664;c[a+8>>2]=45696;c[a+12>>2]=45728;c[a+16>>2]=45760;c[a+20>>2]=45792;c[a+24>>2]=45824;c[a+28>>2]=45856;c[a+32>>2]=45888;c[a+36>>2]=45920;c[a+40>>2]=45952;c[a+44>>2]=45984;c[a+48>>2]=46016;c[a+52>>2]=46048;c[a+56>>2]=46080;c[a+60>>2]=46112;c[a+64>>2]=46144;oG(a+80|0,c[a+84>>2]|0);oG(a+68|0,c[a+72>>2]|0);return}function MX(a){a=a|0;a=a+-8|0;c[a>>2]=45564;c[a+4>>2]=45664;c[a+8>>2]=45696;c[a+12>>2]=45728;c[a+16>>2]=45760;c[a+20>>2]=45792;c[a+24>>2]=45824;c[a+28>>2]=45856;c[a+32>>2]=45888;c[a+36>>2]=45920;c[a+40>>2]=45952;c[a+44>>2]=45984;c[a+48>>2]=46016;c[a+52>>2]=46048;c[a+56>>2]=46080;c[a+60>>2]=46112;c[a+64>>2]=46144;oG(a+80|0,c[a+84>>2]|0);oG(a+68|0,c[a+72>>2]|0);P_(a);return}function NX(a){a=a|0;a=a+-12|0;c[a>>2]=45564;c[a+4>>2]=45664;c[a+8>>2]=45696;c[a+12>>2]=45728;c[a+16>>2]=45760;c[a+20>>2]=45792;c[a+24>>2]=45824;c[a+28>>2]=45856;c[a+32>>2]=45888;c[a+36>>2]=45920;c[a+40>>2]=45952;c[a+44>>2]=45984;c[a+48>>2]=46016;c[a+52>>2]=46048;c[a+56>>2]=46080;c[a+60>>2]=46112;c[a+64>>2]=46144;oG(a+80|0,c[a+84>>2]|0);oG(a+68|0,c[a+72>>2]|0);return}function OX(a){a=a|0;a=a+-12|0;c[a>>2]=45564;c[a+4>>2]=45664;c[a+8>>2]=45696;c[a+12>>2]=45728;c[a+16>>2]=45760;c[a+20>>2]=45792;c[a+24>>2]=45824;c[a+28>>2]=45856;c[a+32>>2]=45888;c[a+36>>2]=45920;c[a+40>>2]=45952;c[a+44>>2]=45984;c[a+48>>2]=46016;c[a+52>>2]=46048;c[a+56>>2]=46080;c[a+60>>2]=46112;c[a+64>>2]=46144;oG(a+80|0,c[a+84>>2]|0);oG(a+68|0,c[a+72>>2]|0);P_(a);return}function PX(a,b){a=a|0;b=b|0;return}function QX(a){a=a|0;a=a+-16|0;c[a>>2]=45564;c[a+4>>2]=45664;c[a+8>>2]=45696;c[a+12>>2]=45728;c[a+16>>2]=45760;c[a+20>>2]=45792;c[a+24>>2]=45824;c[a+28>>2]=45856;c[a+32>>2]=45888;c[a+36>>2]=45920;c[a+40>>2]=45952;c[a+44>>2]=45984;c[a+48>>2]=46016;c[a+52>>2]=46048;c[a+56>>2]=46080;c[a+60>>2]=46112;c[a+64>>2]=46144;oG(a+80|0,c[a+84>>2]|0);oG(a+68|0,c[a+72>>2]|0);return}function RX(a){a=a|0;a=a+-16|0;c[a>>2]=45564;c[a+4>>2]=45664;c[a+8>>2]=45696;c[a+12>>2]=45728;c[a+16>>2]=45760;c[a+20>>2]=45792;c[a+24>>2]=45824;c[a+28>>2]=45856;c[a+32>>2]=45888;c[a+36>>2]=45920;c[a+40>>2]=45952;c[a+44>>2]=45984;c[a+48>>2]=46016;c[a+52>>2]=46048;c[a+56>>2]=46080;c[a+60>>2]=46112;c[a+64>>2]=46144;oG(a+80|0,c[a+84>>2]|0);oG(a+68|0,c[a+72>>2]|0);P_(a);return}function SX(a,b){a=a|0;b=b|0;return}function TX(a){a=a|0;a=a+-20|0;c[a>>2]=45564;c[a+4>>2]=45664;c[a+8>>2]=45696;c[a+12>>2]=45728;c[a+16>>2]=45760;c[a+20>>2]=45792;c[a+24>>2]=45824;c[a+28>>2]=45856;c[a+32>>2]=45888;c[a+36>>2]=45920;c[a+40>>2]=45952;c[a+44>>2]=45984;c[a+48>>2]=46016;c[a+52>>2]=46048;c[a+56>>2]=46080;c[a+60>>2]=46112;c[a+64>>2]=46144;oG(a+80|0,c[a+84>>2]|0);oG(a+68|0,c[a+72>>2]|0);return}function UX(a){a=a|0;a=a+-20|0;c[a>>2]=45564;c[a+4>>2]=45664;c[a+8>>2]=45696;c[a+12>>2]=45728;c[a+16>>2]=45760;c[a+20>>2]=45792;c[a+24>>2]=45824;c[a+28>>2]=45856;c[a+32>>2]=45888;c[a+36>>2]=45920;c[a+40>>2]=45952;c[a+44>>2]=45984;c[a+48>>2]=46016;c[a+52>>2]=46048;c[a+56>>2]=46080;c[a+60>>2]=46112;c[a+64>>2]=46144;oG(a+80|0,c[a+84>>2]|0);oG(a+68|0,c[a+72>>2]|0);P_(a);return}function VX(a,b){a=a|0;b=b|0;return}function WX(a){a=a|0;a=a+-24|0;c[a>>2]=45564;c[a+4>>2]=45664;c[a+8>>2]=45696;c[a+12>>2]=45728;c[a+16>>2]=45760;c[a+20>>2]=45792;c[a+24>>2]=45824;c[a+28>>2]=45856;c[a+32>>2]=45888;c[a+36>>2]=45920;c[a+40>>2]=45952;c[a+44>>2]=45984;c[a+48>>2]=46016;c[a+52>>2]=46048;c[a+56>>2]=46080;c[a+60>>2]=46112;c[a+64>>2]=46144;oG(a+80|0,c[a+84>>2]|0);oG(a+68|0,c[a+72>>2]|0);return}function XX(a){a=a|0;a=a+-24|0;c[a>>2]=45564;c[a+4>>2]=45664;c[a+8>>2]=45696;c[a+12>>2]=45728;c[a+16>>2]=45760;c[a+20>>2]=45792;c[a+24>>2]=45824;c[a+28>>2]=45856;c[a+32>>2]=45888;c[a+36>>2]=45920;c[a+40>>2]=45952;c[a+44>>2]=45984;c[a+48>>2]=46016;c[a+52>>2]=46048;c[a+56>>2]=46080;c[a+60>>2]=46112;c[a+64>>2]=46144;oG(a+80|0,c[a+84>>2]|0);oG(a+68|0,c[a+72>>2]|0);P_(a);return}function YX(a,b){a=a|0;b=b|0;return}function ZX(a){a=a|0;a=a+-28|0;c[a>>2]=45564;c[a+4>>2]=45664;c[a+8>>2]=45696;c[a+12>>2]=45728;c[a+16>>2]=45760;c[a+20>>2]=45792;c[a+24>>2]=45824;c[a+28>>2]=45856;c[a+32>>2]=45888;c[a+36>>2]=45920;c[a+40>>2]=45952;c[a+44>>2]=45984;c[a+48>>2]=46016;c[a+52>>2]=46048;c[a+56>>2]=46080;c[a+60>>2]=46112;c[a+64>>2]=46144;oG(a+80|0,c[a+84>>2]|0);oG(a+68|0,c[a+72>>2]|0);return}function _X(a){a=a|0;a=a+-28|0;c[a>>2]=45564;c[a+4>>2]=45664;c[a+8>>2]=45696;c[a+12>>2]=45728;c[a+16>>2]=45760;c[a+20>>2]=45792;c[a+24>>2]=45824;c[a+28>>2]=45856;c[a+32>>2]=45888;c[a+36>>2]=45920;c[a+40>>2]=45952;c[a+44>>2]=45984;c[a+48>>2]=46016;c[a+52>>2]=46048;c[a+56>>2]=46080;c[a+60>>2]=46112;c[a+64>>2]=46144;oG(a+80|0,c[a+84>>2]|0);oG(a+68|0,c[a+72>>2]|0);P_(a);return}function $X(a,b){a=a|0;b=b|0;return}function aY(a){a=a|0;a=a+-32|0;c[a>>2]=45564;c[a+4>>2]=45664;c[a+8>>2]=45696;c[a+12>>2]=45728;c[a+16>>2]=45760;c[a+20>>2]=45792;c[a+24>>2]=45824;c[a+28>>2]=45856;c[a+32>>2]=45888;c[a+36>>2]=45920;c[a+40>>2]=45952;c[a+44>>2]=45984;c[a+48>>2]=46016;c[a+52>>2]=46048;c[a+56>>2]=46080;c[a+60>>2]=46112;c[a+64>>2]=46144;oG(a+80|0,c[a+84>>2]|0);oG(a+68|0,c[a+72>>2]|0);return}function bY(a){a=a|0;a=a+-32|0;c[a>>2]=45564;c[a+4>>2]=45664;c[a+8>>2]=45696;c[a+12>>2]=45728;c[a+16>>2]=45760;c[a+20>>2]=45792;c[a+24>>2]=45824;c[a+28>>2]=45856;c[a+32>>2]=45888;c[a+36>>2]=45920;c[a+40>>2]=45952;c[a+44>>2]=45984;c[a+48>>2]=46016;c[a+52>>2]=46048;c[a+56>>2]=46080;c[a+60>>2]=46112;c[a+64>>2]=46144;oG(a+80|0,c[a+84>>2]|0);oG(a+68|0,c[a+72>>2]|0);P_(a);return}function cY(a,b){a=a|0;b=b|0;return}function dY(a){a=a|0;a=a+-36|0;c[a>>2]=45564;c[a+4>>2]=45664;c[a+8>>2]=45696;c[a+12>>2]=45728;c[a+16>>2]=45760;c[a+20>>2]=45792;c[a+24>>2]=45824;c[a+28>>2]=45856;c[a+32>>2]=45888;c[a+36>>2]=45920;c[a+40>>2]=45952;c[a+44>>2]=45984;c[a+48>>2]=46016;c[a+52>>2]=46048;c[a+56>>2]=46080;c[a+60>>2]=46112;c[a+64>>2]=46144;oG(a+80|0,c[a+84>>2]|0);oG(a+68|0,c[a+72>>2]|0);return}function eY(a){a=a|0;a=a+-36|0;c[a>>2]=45564;c[a+4>>2]=45664;c[a+8>>2]=45696;c[a+12>>2]=45728;c[a+16>>2]=45760;c[a+20>>2]=45792;c[a+24>>2]=45824;c[a+28>>2]=45856;c[a+32>>2]=45888;c[a+36>>2]=45920;c[a+40>>2]=45952;c[a+44>>2]=45984;c[a+48>>2]=46016;c[a+52>>2]=46048;c[a+56>>2]=46080;c[a+60>>2]=46112;c[a+64>>2]=46144;oG(a+80|0,c[a+84>>2]|0);oG(a+68|0,c[a+72>>2]|0);P_(a);return}function fY(a,b){a=a|0;b=b|0;return}function gY(a){a=a|0;a=a+-40|0;c[a>>2]=45564;c[a+4>>2]=45664;c[a+8>>2]=45696;c[a+12>>2]=45728;c[a+16>>2]=45760;c[a+20>>2]=45792;c[a+24>>2]=45824;c[a+28>>2]=45856;c[a+32>>2]=45888;c[a+36>>2]=45920;c[a+40>>2]=45952;c[a+44>>2]=45984;c[a+48>>2]=46016;c[a+52>>2]=46048;c[a+56>>2]=46080;c[a+60>>2]=46112;c[a+64>>2]=46144;oG(a+80|0,c[a+84>>2]|0);oG(a+68|0,c[a+72>>2]|0);return}function hY(a){a=a|0;a=a+-40|0;c[a>>2]=45564;c[a+4>>2]=45664;c[a+8>>2]=45696;c[a+12>>2]=45728;c[a+16>>2]=45760;c[a+20>>2]=45792;c[a+24>>2]=45824;c[a+28>>2]=45856;c[a+32>>2]=45888;c[a+36>>2]=45920;c[a+40>>2]=45952;c[a+44>>2]=45984;c[a+48>>2]=46016;c[a+52>>2]=46048;c[a+56>>2]=46080;c[a+60>>2]=46112;c[a+64>>2]=46144;oG(a+80|0,c[a+84>>2]|0);oG(a+68|0,c[a+72>>2]|0);P_(a);return}function iY(a,b){a=a|0;b=b|0;return}function jY(a){a=a|0;a=a+-44|0;c[a>>2]=45564;c[a+4>>2]=45664;c[a+8>>2]=45696;c[a+12>>2]=45728;c[a+16>>2]=45760;c[a+20>>2]=45792;c[a+24>>2]=45824;c[a+28>>2]=45856;c[a+32>>2]=45888;c[a+36>>2]=45920;c[a+40>>2]=45952;c[a+44>>2]=45984;c[a+48>>2]=46016;c[a+52>>2]=46048;c[a+56>>2]=46080;c[a+60>>2]=46112;c[a+64>>2]=46144;oG(a+80|0,c[a+84>>2]|0);oG(a+68|0,c[a+72>>2]|0);return}function kY(a){a=a|0;a=a+-44|0;c[a>>2]=45564;c[a+4>>2]=45664;c[a+8>>2]=45696;c[a+12>>2]=45728;c[a+16>>2]=45760;c[a+20>>2]=45792;c[a+24>>2]=45824;c[a+28>>2]=45856;c[a+32>>2]=45888;c[a+36>>2]=45920;c[a+40>>2]=45952;c[a+44>>2]=45984;c[a+48>>2]=46016;c[a+52>>2]=46048;c[a+56>>2]=46080;c[a+60>>2]=46112;c[a+64>>2]=46144;oG(a+80|0,c[a+84>>2]|0);oG(a+68|0,c[a+72>>2]|0);P_(a);return}function lY(a,b){a=a|0;b=b|0;return}function mY(a,b){a=a|0;b=b|0;return}function nY(a){a=a|0;a=a+-48|0;c[a>>2]=45564;c[a+4>>2]=45664;c[a+8>>2]=45696;c[a+12>>2]=45728;c[a+16>>2]=45760;c[a+20>>2]=45792;c[a+24>>2]=45824;c[a+28>>2]=45856;c[a+32>>2]=45888;c[a+36>>2]=45920;c[a+40>>2]=45952;c[a+44>>2]=45984;c[a+48>>2]=46016;c[a+52>>2]=46048;c[a+56>>2]=46080;c[a+60>>2]=46112;c[a+64>>2]=46144;oG(a+80|0,c[a+84>>2]|0);oG(a+68|0,c[a+72>>2]|0);return}function oY(a){a=a|0;a=a+-48|0;c[a>>2]=45564;c[a+4>>2]=45664;c[a+8>>2]=45696;c[a+12>>2]=45728;c[a+16>>2]=45760;c[a+20>>2]=45792;c[a+24>>2]=45824;c[a+28>>2]=45856;c[a+32>>2]=45888;c[a+36>>2]=45920;c[a+40>>2]=45952;c[a+44>>2]=45984;c[a+48>>2]=46016;c[a+52>>2]=46048;c[a+56>>2]=46080;c[a+60>>2]=46112;c[a+64>>2]=46144;oG(a+80|0,c[a+84>>2]|0);oG(a+68|0,c[a+72>>2]|0);P_(a);return}function pY(a,b){a=a|0;b=b|0;return}function qY(a,b){a=a|0;b=b|0;return}function rY(a){a=a|0;var b=0;b=a+-52|0;c[b>>2]=45564;c[a+-48>>2]=45664;c[a+-44>>2]=45696;c[a+-40>>2]=45728;c[b+16>>2]=45760;c[b+20>>2]=45792;c[b+24>>2]=45824;c[b+28>>2]=45856;c[b+32>>2]=45888;c[b+36>>2]=45920;c[b+40>>2]=45952;c[b+44>>2]=45984;c[b+48>>2]=46016;c[b+52>>2]=46048;c[b+56>>2]=46080;c[b+60>>2]=46112;c[b+64>>2]=46144;oG(b+80|0,c[b+84>>2]|0);oG(b+68|0,c[b+72>>2]|0);return}function sY(a){a=a|0;var b=0;b=a+-52|0;c[b>>2]=45564;c[a+-48>>2]=45664;c[a+-44>>2]=45696;c[a+-40>>2]=45728;c[b+16>>2]=45760;c[b+20>>2]=45792;c[b+24>>2]=45824;c[b+28>>2]=45856;c[b+32>>2]=45888;c[b+36>>2]=45920;c[b+40>>2]=45952;c[b+44>>2]=45984;c[b+48>>2]=46016;c[b+52>>2]=46048;c[b+56>>2]=46080;c[b+60>>2]=46112;c[b+64>>2]=46144;oG(b+80|0,c[b+84>>2]|0);oG(b+68|0,c[b+72>>2]|0);P_(b);return}function tY(a,b){a=a|0;b=b|0;return}function uY(a,b){a=a|0;b=b|0;return}function vY(a){a=a|0;a=a+-56|0;c[a>>2]=45564;c[a+4>>2]=45664;c[a+8>>2]=45696;c[a+12>>2]=45728;c[a+16>>2]=45760;c[a+20>>2]=45792;c[a+24>>2]=45824;c[a+28>>2]=45856;c[a+32>>2]=45888;c[a+36>>2]=45920;c[a+40>>2]=45952;c[a+44>>2]=45984;c[a+48>>2]=46016;c[a+52>>2]=46048;c[a+56>>2]=46080;c[a+60>>2]=46112;c[a+64>>2]=46144;oG(a+80|0,c[a+84>>2]|0);oG(a+68|0,c[a+72>>2]|0);return}function wY(a){a=a|0;a=a+-56|0;c[a>>2]=45564;c[a+4>>2]=45664;c[a+8>>2]=45696;c[a+12>>2]=45728;c[a+16>>2]=45760;c[a+20>>2]=45792;c[a+24>>2]=45824;c[a+28>>2]=45856;c[a+32>>2]=45888;c[a+36>>2]=45920;c[a+40>>2]=45952;c[a+44>>2]=45984;c[a+48>>2]=46016;c[a+52>>2]=46048;c[a+56>>2]=46080;c[a+60>>2]=46112;c[a+64>>2]=46144;oG(a+80|0,c[a+84>>2]|0);oG(a+68|0,c[a+72>>2]|0);P_(a);return}function xY(a){a=a|0;a=a+-60|0;c[a>>2]=45564;c[a+4>>2]=45664;c[a+8>>2]=45696;c[a+12>>2]=45728;c[a+16>>2]=45760;c[a+20>>2]=45792;c[a+24>>2]=45824;c[a+28>>2]=45856;c[a+32>>2]=45888;c[a+36>>2]=45920;c[a+40>>2]=45952;c[a+44>>2]=45984;c[a+48>>2]=46016;c[a+52>>2]=46048;c[a+56>>2]=46080;c[a+60>>2]=46112;c[a+64>>2]=46144;oG(a+80|0,c[a+84>>2]|0);oG(a+68|0,c[a+72>>2]|0);return}function yY(a){a=a|0;a=a+-60|0;c[a>>2]=45564;c[a+4>>2]=45664;c[a+8>>2]=45696;c[a+12>>2]=45728;c[a+16>>2]=45760;c[a+20>>2]=45792;c[a+24>>2]=45824;c[a+28>>2]=45856;c[a+32>>2]=45888;c[a+36>>2]=45920;c[a+40>>2]=45952;c[a+44>>2]=45984;c[a+48>>2]=46016;c[a+52>>2]=46048;c[a+56>>2]=46080;c[a+60>>2]=46112;c[a+64>>2]=46144;oG(a+80|0,c[a+84>>2]|0);oG(a+68|0,c[a+72>>2]|0);P_(a);return}function zY(a){a=a|0;a=a+-64|0;c[a>>2]=45564;c[a+4>>2]=45664;c[a+8>>2]=45696;c[a+12>>2]=45728;c[a+16>>2]=45760;c[a+20>>2]=45792;c[a+24>>2]=45824;c[a+28>>2]=45856;c[a+32>>2]=45888;c[a+36>>2]=45920;c[a+40>>2]=45952;c[a+44>>2]=45984;c[a+48>>2]=46016;c[a+52>>2]=46048;c[a+56>>2]=46080;c[a+60>>2]=46112;c[a+64>>2]=46144;oG(a+80|0,c[a+84>>2]|0);oG(a+68|0,c[a+72>>2]|0);return}function AY(a){a=a|0;a=a+-64|0;c[a>>2]=45564;c[a+4>>2]=45664;c[a+8>>2]=45696;c[a+12>>2]=45728;c[a+16>>2]=45760;c[a+20>>2]=45792;c[a+24>>2]=45824;c[a+28>>2]=45856;c[a+32>>2]=45888;c[a+36>>2]=45920;c[a+40>>2]=45952;c[a+44>>2]=45984;c[a+48>>2]=46016;c[a+52>>2]=46048;c[a+56>>2]=46080;c[a+60>>2]=46112;c[a+64>>2]=46144;oG(a+80|0,c[a+84>>2]|0);oG(a+68|0,c[a+72>>2]|0);P_(a);return}function BY(a,b){a=a|0;b=b|0;return}function CY(a){a=a|0;return}function DY(a){a=a|0;P_(a);return}function EY(a,b){a=a|0;b=b|0;return}function FY(a){a=a|0;return}function GY(a){a=a|0;P_(a+(c[(c[a>>2]|0)+-12>>2]|0)|0);return}function HY(a){a=a|0;return}function IY(a){a=a|0;P_(a);return}function JY(a,b){a=a|0;b=b|0;return}function KY(a){a=a|0;return}function LY(a){a=a|0;P_(a+(c[(c[a>>2]|0)+-12>>2]|0)|0);return}function MY(a){a=a|0;return}function NY(a){a=a|0;P_(a);return}function OY(a,b){a=a|0;b=b|0;return}function PY(a){a=a|0;return}function QY(a){a=a|0;P_(a+(c[(c[a>>2]|0)+-12>>2]|0)|0);return}function RY(a){a=a|0;return}function SY(a){a=a|0;P_(a);return}function TY(a,b){a=a|0;b=b|0;return}function UY(a){a=a|0;return}function VY(a){a=a|0;P_(a+(c[(c[a>>2]|0)+-12>>2]|0)|0);return}function WY(a){a=a|0;return}function XY(a){a=a|0;P_(a);return}function YY(a,b){a=a|0;b=b|0;return}function ZY(a){a=a|0;return}function _Y(a){a=a|0;P_(a+(c[(c[a>>2]|0)+-12>>2]|0)|0);return}function $Y(a){a=a|0;return}function aZ(a){a=a|0;P_(a);return}function bZ(a,b){a=a|0;b=b|0;return}function cZ(a){a=a|0;return}function dZ(a){a=a|0;P_(a+(c[(c[a>>2]|0)+-12>>2]|0)|0);return}function eZ(a){a=a|0;return}function fZ(a){a=a|0;P_(a);return}function gZ(a,b){a=a|0;b=b|0;return}function hZ(a){a=a|0;return}function iZ(a){a=a|0;P_(a+(c[(c[a>>2]|0)+-12>>2]|0)|0);return}function jZ(a){a=a|0;return}function kZ(a){a=a|0;P_(a);return}function lZ(a,b){a=a|0;b=b|0;return}function mZ(a){a=a|0;return}function nZ(a){a=a|0;P_(a+(c[(c[a>>2]|0)+-12>>2]|0)|0);return}function oZ(a){a=a|0;return}function pZ(a){a=a|0;P_(a);return}function qZ(a,b){a=a|0;b=b|0;return}function rZ(a){a=a|0;return}function sZ(a){a=a|0;P_(a+(c[(c[a>>2]|0)+-12>>2]|0)|0);return}function tZ(a){a=a|0;return}function uZ(a){a=a|0;P_(a);return}function vZ(a,b){a=a|0;b=b|0;return}function wZ(a){a=a|0;return}function xZ(a){a=a|0;P_(a+(c[(c[a>>2]|0)+-12>>2]|0)|0);return}function yZ(a){a=a|0;return}function zZ(a){a=a|0;P_(a);return}function AZ(a,b){a=a|0;b=b|0;return}function BZ(a){a=a|0;return}function CZ(a){a=a|0;P_(a+(c[(c[a>>2]|0)+-12>>2]|0)|0);return}function DZ(a){a=a|0;return}function EZ(a){a=a|0;P_(a);return}function FZ(a,b){a=a|0;b=b|0;return}function GZ(a){a=a|0;return}function HZ(a){a=a|0;P_(a+(c[(c[a>>2]|0)+-12>>2]|0)|0);return}function IZ(a){a=a|0;var b=0;wb(9864,79131,62043,1,79138,1488);a=O_(4)|0;c[a>>2]=0;b=O_(4)|0;c[b>>2]=0;_a(9864,79141,9872,79145,141,a|0,9872,79149,10,b|0);b=O_(4)|0;c[b>>2]=4;a=O_(4)|0;c[a>>2]=4;_a(9864,79154,9880,79145,142,b|0,9880,79149,11,a|0);fb(9864);wb(9904,79158,62043,2,79138,1489);a=O_(4)|0;c[a>>2]=0;b=O_(4)|0;c[b>>2]=0;_a(9904,79167,10272,79145,143,a|0,10272,79149,12,b|0);b=O_(4)|0;c[b>>2]=4;a=O_(4)|0;c[a>>2]=4;_a(9904,79171,10272,79145,143,b|0,10272,79149,12,a|0);fb(9904);gc(9872,79177,4,0);Ra(9872,79184,0);Ra(9872,79191,1);Ra(9872,79204,2);Ra(9872,79221,3);gc(9912,79238,4,0);Ra(9912,79249,0);Ra(9912,79260,1);Ra(9912,79278,2);gc(9920,79304,4,0);Ra(9920,79319,0);Ra(9920,79330,1);return}function JZ(a){a=a|0;Sb(79342,1,47172,79357,1,1);Sb(79360,1,47176,79381,75,1490);Sb(79384,2,47180,79145,144,860);Sb(79397,3,47188,79410,52,13);Sb(79415,3,47200,79410,53,14);Sb(79428,3,47188,79410,52,15);Sb(79436,3,47200,79410,53,16);Sb(79444,3,47188,79410,52,17);Sb(79455,3,47200,79410,53,18);Sb(79466,3,47212,79410,54,19);Sb(79475,3,47200,79410,53,20);Sb(79484,3,47188,79410,52,21);Sb(79494,3,47200,79410,53,22);Sb(79504,3,47212,79410,54,23);Sb(79513,3,47200,79410,53,24);Sb(79522,3,47188,79410,52,25);Sb(79532,3,47200,79410,53,26);Sb(79522,3,47188,79410,52,25);Sb(79532,3,47200,79410,53,26);Sb(79542,3,47200,79410,53,27);Sb(79550,3,47200,79410,53,28);Sb(79558,3,47200,79410,53,29);Sb(79567,3,47200,79410,53,30);Sb(79578,3,47200,79410,53,31);Sb(79594,4,47224,79608,6,14);Sb(79614,5,47240,79628,21,4);Sb(79635,3,47212,79410,54,32);Sb(79651,3,47260,79668,1,1);Sb(79673,2,47272,79145,145,76);Sb(79682,2,47280,79145,146,861);Sb(79694,4,47288,79608,7,15);return}function KZ(){IZ(0);JZ(0);return}function LZ(){var a=0;a=O_(16)|0;c[a>>2]=0;c[a+4>>2]=0;c[a+8>>2]=0;c[a+12>>2]=0;return a|0}function MZ(a){a=a|0;if(!a)return;o2(a+4|0);P_(a);return}function NZ(a,b){a=a|0;b=b|0;return c[b+(c[a>>2]|0)>>2]|0}function OZ(a,b,d){a=a|0;b=b|0;d=d|0;c[b+(c[a>>2]|0)>>2]=d;return}function PZ(b,d){b=b|0;d=d|0;var e=0,f=0,g=0;f=c[b>>2]|0;e=a[d+f>>0]|0;g=(e&1)==0;e=g?(e&255)>>>1:c[d+(f+4)>>2]|0;b=w1(e+4|0)|0;c[b>>2]=e;Rba(b+4|0,(g?d+(f+1)|0:c[d+(f+8)>>2]|0)|0,e|0)|0;return b|0}function QZ(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0;h=i;i=i+16|0;g=h;b=c[b>>2]|0;f=d+b|0;l2(g,e+4|0,c[e>>2]|0);if(!(a[f>>0]&1)){a[d+(b+1)>>0]=0;a[f>>0]=0}else{a[c[d+(b+8)>>2]>>0]=0;c[d+(b+4)>>2]=0}u2(f,0);c[f>>2]=c[g>>2];c[f+4>>2]=c[g+4>>2];c[f+8>>2]=c[g+8>>2];c[g>>2]=0;c[g+4>>2]=0;c[g+8>>2]=0;o2(g);i=h;return}function RZ(){var a=0;a=O_(8)|0;kM(a,0,1);return a|0}function SZ(a){a=a|0;if(!a)return;P_(a);return}function TZ(a,b){a=a|0;b=b|0;return c[b+(c[a>>2]|0)>>2]|0}function UZ(a,b,d){a=a|0;b=b|0;d=d|0;c[b+(c[a>>2]|0)>>2]=d;return}function VZ(a){a=a|0;return +(+Ac[a&1]())}function WZ(b){b=b|0;var d=0,e=0,f=0,g=0;d=i;i=i+16|0;e=d;oc[b&2047](e);f=a[e>>0]|0;g=(f&1)==0;f=g?(f&255)>>>1:c[e+4>>2]|0;b=w1(f+4|0)|0;c[b>>2]=f;Rba(b+4|0,(g?e+1|0:c[e+8>>2]|0)|0,f|0)|0;o2(e);i=d;return b|0}function XZ(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0;d=i;i=i+32|0;h=d+16|0;e=d;l2(e,b+4|0,c[b>>2]|0);pc[a&1023](h,e);a=O_(16)|0;f=c[h>>2]|0;g=a+4|0;b=h+4|0;c[g>>2]=c[b>>2];c[g+4>>2]=c[b+4>>2];c[g+8>>2]=c[b+8>>2];c[b>>2]=0;c[b+4>>2]=0;c[b+8>>2]=0;c[a>>2]=f;o2(b);o2(e);i=d;return a|0}function YZ(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0;e=i;i=i+32|0;h=e+16|0;f=e;l2(f,b+4|0,c[b>>2]|0);Dc[a&63](h,f,d);a=O_(16)|0;b=c[h>>2]|0;g=a+4|0;d=h+4|0;c[g>>2]=c[d>>2];c[g+4>>2]=c[d+4>>2];c[g+8>>2]=c[d+8>>2];c[d>>2]=0;c[d+4>>2]=0;c[d+8>>2]=0;c[a>>2]=b;o2(d);o2(f);i=e;return a|0}function ZZ(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,j=0;e=i;i=i+48|0;j=e+24|0;f=e+12|0;g=e;l2(f,b+4|0,c[b>>2]|0);l2(g,d+4|0,c[d>>2]|0);Dc[a&63](j,f,g);a=O_(16)|0;b=c[j>>2]|0;h=a+4|0;d=j+4|0;c[h>>2]=c[d>>2];c[h+4>>2]=c[d+4>>2];c[h+8>>2]=c[d+8>>2];c[d>>2]=0;c[d+4>>2]=0;c[d+8>>2]=0;c[a>>2]=b;o2(d);o2(g);o2(f);i=e;return a|0}function _Z(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0;e=i;i=i+48|0;h=e+24|0;f=e+8|0;g=e;l2(f,b+4|0,c[b>>2]|0);lM(g,d);Dc[a&63](h,f,g);a=O_(16)|0;b=c[h>>2]|0;g=a+4|0;d=h+4|0;c[g>>2]=c[d>>2];c[g+4>>2]=c[d+4>>2];c[g+8>>2]=c[d+8>>2];c[d>>2]=0;c[d+4>>2]=0;c[d+8>>2]=0;c[a>>2]=b;o2(d);o2(f);i=e;return a|0}function $Z(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,j=0;f=i;i=i+48|0;j=f+24|0;g=f+12|0;h=f;l2(g,b+4|0,c[b>>2]|0);l2(h,d+4|0,c[d>>2]|0);Hc[a&15](j,g,h,e);a=O_(16)|0;d=c[j>>2]|0;b=a+4|0;e=j+4|0;c[b>>2]=c[e>>2];c[b+4>>2]=c[e+4>>2];c[b+8>>2]=c[e+8>>2];c[e>>2]=0;c[e+4>>2]=0;c[e+8>>2]=0;c[a>>2]=d;o2(e);o2(h);o2(g);i=f;return a|0}function a_(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,j=0,k=0;g=i;i=i+48|0;k=g+24|0;h=g+12|0;j=g;l2(h,b+4|0,c[b>>2]|0);l2(j,d+4|0,c[d>>2]|0);mc[a&7](k,h,j,e,f);a=O_(16)|0;e=c[k>>2]|0;d=a+4|0;f=k+4|0;c[d>>2]=c[f>>2];c[d+4>>2]=c[f+4>>2];c[d+8>>2]=c[f+8>>2];c[f>>2]=0;c[f+4>>2]=0;c[f+8>>2]=0;c[a>>2]=e;o2(f);o2(j);o2(h);i=g;return a|0}function b_(a,b,d){a=a|0;b=b|0;d=+d;var e=0,f=0,g=0,h=0,j=0;e=i;i=i+32|0;j=e+16|0;f=e;l2(f,b+4|0,c[b>>2]|0);Fc[a&1](j,f,d);a=O_(16)|0;g=c[j>>2]|0;h=a+4|0;b=j+4|0;c[h>>2]=c[b>>2];c[h+4>>2]=c[b+4>>2];c[h+8>>2]=c[b+8>>2];c[b>>2]=0;c[b+4>>2]=0;c[b+8>>2]=0;c[a>>2]=g;o2(b);o2(f);i=e;return a|0}function c_(a,b){a=a|0;b=b|0;var d=0,e=0;d=i;i=i+16|0;e=d;l2(e,b+4|0,c[b>>2]|0);a=rc[a&127](e)|0;o2(e);i=d;return a|0}function d_(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;d=i;i=i+32|0;f=d+16|0;e=d;l2(e,b+4|0,c[b>>2]|0);pc[a&1023](f,e);a=O_(8)|0;lM(a,f);o2(e);i=d;return a|0}function e_(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0;f=i;i=i+32|0;h=f+16|0;g=f;l2(g,b+4|0,c[b>>2]|0);Hc[a&15](h,g,d,e);a=O_(8)|0;lM(a,h);o2(g);i=f;return a|0}function f_(a){a=a|0;var b=0;b=MF()|0;l2(a,b,f1(b)|0);return}function g_(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,j=0,k=0,l=0;k=i;i=i+176|0;f=k+160|0;j=k+16|0;e=k;g=j+64|0;l=j+8|0;c[l>>2]=12564;h=j+12|0;c[j>>2]=12704;c[g>>2]=12724;c[j+4>>2]=0;T2(j+64|0,h);c[j+136>>2]=0;c[j+140>>2]=-1;c[j>>2]=12544;c[j+64>>2]=12584;c[l>>2]=12564;W2(h);c[h>>2]=12740;l=j+44|0;c[l>>2]=0;c[l+4>>2]=0;c[l+8>>2]=0;c[l+12>>2]=0;c[j+60>>2]=24;c[f>>2]=0;c[f+4>>2]=0;c[f+8>>2]=0;$d(h,f);o2(f);f=b+4|0;c[f>>2]=0;c[f+4>>2]=0;c[f+8>>2]=0;d=NF((a[d>>0]&1)==0?d+1|0:c[d+8>>2]|0,j+8|0)|0;c[b>>2]=d;if(d){Ld(j,12592);O2(g);i=k;return}RE(e,h);p2(f,e)|0;o2(e);Ld(j,12592);O2(g);i=k;return}function h_(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,j=0,k=0,l=0,m=0;l=i;i=i+176|0;g=l+160|0;k=l+16|0;f=l;h=k+64|0;m=k+8|0;c[m>>2]=12564;j=k+12|0;c[k>>2]=12704;c[h>>2]=12724;c[k+4>>2]=0;T2(k+64|0,j);c[k+136>>2]=0;c[k+140>>2]=-1;c[k>>2]=12544;c[k+64>>2]=12584;c[m>>2]=12564;W2(j);c[j>>2]=12740;m=k+44|0;c[m>>2]=0;c[m+4>>2]=0;c[m+8>>2]=0;c[m+12>>2]=0;c[k+60>>2]=24;c[g>>2]=0;c[g+4>>2]=0;c[g+8>>2]=0;$d(j,g);o2(g);g=b+4|0;c[g>>2]=0;c[g+4>>2]=0;c[g+8>>2]=0;e=YF((a[d>>0]&1)==0?d+1|0:c[d+8>>2]|0,e,k+8|0)|0;c[b>>2]=e;if(e){Ld(k,12592);O2(h);i=l;return}RE(f,j);p2(g,f)|0;o2(f);Ld(k,12592);O2(h);i=l;return}function i_(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,j=0,k=0,l=0,m=0;l=i;i=i+176|0;g=l+160|0;k=l+16|0;f=l;h=k+64|0;m=k+8|0;c[m>>2]=12564;j=k+12|0;c[k>>2]=12704;c[h>>2]=12724;c[k+4>>2]=0;T2(k+64|0,j);c[k+136>>2]=0;c[k+140>>2]=-1;c[k>>2]=12544;c[k+64>>2]=12584;c[m>>2]=12564;W2(j);c[j>>2]=12740;m=k+44|0;c[m>>2]=0;c[m+4>>2]=0;c[m+8>>2]=0;c[m+12>>2]=0;c[k+60>>2]=24;c[g>>2]=0;c[g+4>>2]=0;c[g+8>>2]=0;$d(j,g);o2(g);g=b+4|0;c[g>>2]=0;c[g+4>>2]=0;c[g+8>>2]=0;e=ZF((a[d>>0]&1)==0?d+1|0:c[d+8>>2]|0,(a[e>>0]&1)==0?e+1|0:c[e+8>>2]|0,k+8|0)|0;c[b>>2]=e;if(e){Ld(k,12592);O2(h);i=l;return}RE(f,j);p2(g,f)|0;o2(f);Ld(k,12592);O2(h);i=l;return}function j_(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,j=0,k=0,l=0,m=0;l=i;i=i+176|0;g=l+160|0;k=l+16|0;f=l;h=k+64|0;m=k+8|0;c[m>>2]=12564;j=k+12|0;c[k>>2]=12704;c[h>>2]=12724;c[k+4>>2]=0;T2(k+64|0,j);c[k+136>>2]=0;c[k+140>>2]=-1;c[k>>2]=12544;c[k+64>>2]=12584;c[m>>2]=12564;W2(j);c[j>>2]=12740;m=k+44|0;c[m>>2]=0;c[m+4>>2]=0;c[m+8>>2]=0;c[m+12>>2]=0;c[k+60>>2]=24;c[g>>2]=0;c[g+4>>2]=0;c[g+8>>2]=0;$d(j,g);o2(g);g=b+4|0;c[g>>2]=0;c[g+4>>2]=0;c[g+8>>2]=0;e=SF((a[d>>0]&1)==0?d+1|0:c[d+8>>2]|0,e,k+8|0)|0;c[b>>2]=e;if(e){Ld(k,12592);O2(h);i=l;return}RE(f,j);p2(g,f)|0;o2(f);Ld(k,12592);O2(h);i=l;return}function k_(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,j=0,k=0,l=0,m=0;l=i;i=i+176|0;g=l+160|0;k=l+16|0;f=l;h=k+64|0;m=k+8|0;c[m>>2]=12564;j=k+12|0;c[k>>2]=12704;c[h>>2]=12724;c[k+4>>2]=0;T2(k+64|0,j);c[k+136>>2]=0;c[k+140>>2]=-1;c[k>>2]=12544;c[k+64>>2]=12584;c[m>>2]=12564;W2(j);c[j>>2]=12740;m=k+44|0;c[m>>2]=0;c[m+4>>2]=0;c[m+8>>2]=0;c[m+12>>2]=0;c[k+60>>2]=24;c[g>>2]=0;c[g+4>>2]=0;c[g+8>>2]=0;$d(j,g);o2(g);g=b+4|0;c[g>>2]=0;c[g+4>>2]=0;c[g+8>>2]=0;e=RF((a[d>>0]&1)==0?d+1|0:c[d+8>>2]|0,(a[e>>0]&1)==0?e+1|0:c[e+8>>2]|0,k+8|0)|0;c[b>>2]=e;if(e){Ld(k,12592);O2(h);i=l;return}RE(f,j);p2(g,f)|0;o2(f);Ld(k,12592);O2(h);i=l;return}function l_(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,j=0,k=0,l=0,m=0;l=i;i=i+176|0;g=l+160|0;k=l+16|0;f=l;h=k+64|0;m=k+8|0;c[m>>2]=12564;j=k+12|0;c[k>>2]=12704;c[h>>2]=12724;c[k+4>>2]=0;T2(k+64|0,j);c[k+136>>2]=0;c[k+140>>2]=-1;c[k>>2]=12544;c[k+64>>2]=12584;c[m>>2]=12564;W2(j);c[j>>2]=12740;m=k+44|0;c[m>>2]=0;c[m+4>>2]=0;c[m+8>>2]=0;c[m+12>>2]=0;c[k+60>>2]=24;c[g>>2]=0;c[g+4>>2]=0;c[g+8>>2]=0;$d(j,g);o2(g);g=b+4|0;c[g>>2]=0;c[g+4>>2]=0;c[g+8>>2]=0;e=QF((a[d>>0]&1)==0?d+1|0:c[d+8>>2]|0,e,k+8|0)|0;c[b>>2]=e;if(e){Ld(k,12592);O2(h);i=l;return}RE(f,j);p2(g,f)|0;o2(f);Ld(k,12592);O2(h);i=l;return}function m_(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,j=0,k=0,l=0,m=0;l=i;i=i+176|0;g=l+160|0;k=l+16|0;f=l;h=k+64|0;m=k+8|0;c[m>>2]=12564;j=k+12|0;c[k>>2]=12704;c[h>>2]=12724;c[k+4>>2]=0;T2(k+64|0,j);c[k+136>>2]=0;c[k+140>>2]=-1;c[k>>2]=12544;c[k+64>>2]=12584;c[m>>2]=12564;W2(j);c[j>>2]=12740;m=k+44|0;c[m>>2]=0;c[m+4>>2]=0;c[m+8>>2]=0;c[m+12>>2]=0;c[k+60>>2]=24;c[g>>2]=0;c[g+4>>2]=0;c[g+8>>2]=0;$d(j,g);o2(g);g=b+4|0;c[g>>2]=0;c[g+4>>2]=0;c[g+8>>2]=0;e=PF((a[d>>0]&1)==0?d+1|0:c[d+8>>2]|0,(a[e>>0]&1)==0?e+1|0:c[e+8>>2]|0,k+8|0)|0;c[b>>2]=e;if(e){Ld(k,12592);O2(h);i=l;return}RE(f,j);p2(g,f)|0;o2(f);Ld(k,12592);O2(h);i=l;return}function n_(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0;l=i;i=i+192|0;f=l+168|0;k=l+24|0;m=l+16|0;g=l;h=k+64|0;o=k+8|0;c[o>>2]=12564;j=k+12|0;c[k>>2]=12704;c[h>>2]=12724;c[k+4>>2]=0;T2(k+64|0,j);c[k+136>>2]=0;c[k+140>>2]=-1;c[k>>2]=12544;c[k+64>>2]=12584;c[o>>2]=12564;W2(j);c[j>>2]=12740;o=k+44|0;c[o>>2]=0;c[o+4>>2]=0;c[o+8>>2]=0;c[o+12>>2]=0;c[k+60>>2]=24;c[f>>2]=0;c[f+4>>2]=0;c[f+8>>2]=0;$d(j,f);o2(f);f=b+4|0;c[f>>2]=0;c[f+4>>2]=0;c[f+8>>2]=0;o=a[d>>0]|0;n=c[d+8>>2]|0;lM(m,e);d=_F((o&1)==0?d+1|0:n,m,k+8|0)|0;c[b>>2]=d;if(d){Ld(k,12592);O2(h);i=l;return}RE(g,j);p2(f,g)|0;o2(g);Ld(k,12592);O2(h);i=l;return}function o_(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,j=0,k=0,l=0,m=0;l=i;i=i+176|0;g=l+160|0;k=l+16|0;f=l;h=k+64|0;m=k+8|0;c[m>>2]=12564;j=k+12|0;c[k>>2]=12704;c[h>>2]=12724;c[k+4>>2]=0;T2(k+64|0,j);c[k+136>>2]=0;c[k+140>>2]=-1;c[k>>2]=12544;c[k+64>>2]=12584;c[m>>2]=12564;W2(j);c[j>>2]=12740;m=k+44|0;c[m>>2]=0;c[m+4>>2]=0;c[m+8>>2]=0;c[m+12>>2]=0;c[k+60>>2]=24;c[g>>2]=0;c[g+4>>2]=0;c[g+8>>2]=0;$d(j,g);o2(g);g=b+4|0;c[g>>2]=0;c[g+4>>2]=0;c[g+8>>2]=0;e=$F((a[d>>0]&1)==0?d+1|0:c[d+8>>2]|0,(a[e>>0]&1)==0?e+1|0:c[e+8>>2]|0,k+8|0)|0;c[b>>2]=e;if(e){Ld(k,12592);O2(h);i=l;return}RE(f,j);p2(g,f)|0;o2(f);Ld(k,12592);O2(h);i=l;return}function p_(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,j=0,k=0,l=0,m=0;l=i;i=i+176|0;g=l+160|0;k=l+16|0;f=l;h=k+64|0;m=k+8|0;c[m>>2]=12564;j=k+12|0;c[k>>2]=12704;c[h>>2]=12724;c[k+4>>2]=0;T2(k+64|0,j);c[k+136>>2]=0;c[k+140>>2]=-1;c[k>>2]=12544;c[k+64>>2]=12584;c[m>>2]=12564;W2(j);c[j>>2]=12740;m=k+44|0;c[m>>2]=0;c[m+4>>2]=0;c[m+8>>2]=0;c[m+12>>2]=0;c[k+60>>2]=24;c[g>>2]=0;c[g+4>>2]=0;c[g+8>>2]=0;$d(j,g);o2(g);g=b+4|0;c[g>>2]=0;c[g+4>>2]=0;c[g+8>>2]=0;e=aG((a[d>>0]&1)==0?d+1|0:c[d+8>>2]|0,e,k+8|0)|0;c[b>>2]=e;if(e){Ld(k,12592);O2(h);i=l;return}RE(f,j);p2(g,f)|0;o2(f);Ld(k,12592);O2(h);i=l;return}function q_(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,j=0,k=0,l=0,m=0;l=i;i=i+176|0;g=l+160|0;k=l+16|0;f=l;h=k+64|0;m=k+8|0;c[m>>2]=12564;j=k+12|0;c[k>>2]=12704;c[h>>2]=12724;c[k+4>>2]=0;T2(k+64|0,j);c[k+136>>2]=0;c[k+140>>2]=-1;c[k>>2]=12544;c[k+64>>2]=12584;c[m>>2]=12564;W2(j);c[j>>2]=12740;m=k+44|0;c[m>>2]=0;c[m+4>>2]=0;c[m+8>>2]=0;c[m+12>>2]=0;c[k+60>>2]=24;c[g>>2]=0;c[g+4>>2]=0;c[g+8>>2]=0;$d(j,g);o2(g);g=b+4|0;c[g>>2]=0;c[g+4>>2]=0;c[g+8>>2]=0;e=bG((a[d>>0]&1)==0?d+1|0:c[d+8>>2]|0,(a[e>>0]&1)==0?e+1|0:c[e+8>>2]|0,k+8|0)|0;c[b>>2]=e;if(e){Ld(k,12592);O2(h);i=l;return}RE(f,j);p2(g,f)|0;o2(f);Ld(k,12592);O2(h);i=l;return}function r_(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0;l=i;i=i+192|0;f=l+168|0;k=l+24|0;m=l+16|0;g=l;h=k+64|0;o=k+8|0;c[o>>2]=12564;j=k+12|0;c[k>>2]=12704;c[h>>2]=12724;c[k+4>>2]=0;T2(k+64|0,j);c[k+136>>2]=0;c[k+140>>2]=-1;c[k>>2]=12544;c[k+64>>2]=12584;c[o>>2]=12564;W2(j);c[j>>2]=12740;o=k+44|0;c[o>>2]=0;c[o+4>>2]=0;c[o+8>>2]=0;c[o+12>>2]=0;c[k+60>>2]=24;c[f>>2]=0;c[f+4>>2]=0;c[f+8>>2]=0;$d(j,f);o2(f);f=b+4|0;c[f>>2]=0;c[f+4>>2]=0;c[f+8>>2]=0;o=a[d>>0]|0;n=c[d+8>>2]|0;lM(m,e);d=cG((o&1)==0?d+1|0:n,m,k+8|0)|0;c[b>>2]=d;if(d){Ld(k,12592);O2(h);i=l;return}RE(g,j);p2(f,g)|0;o2(g);Ld(k,12592);O2(h);i=l;return}function s_(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,j=0,k=0,l=0,m=0;l=i;i=i+176|0;g=l+160|0;k=l+16|0;f=l;h=k+64|0;m=k+8|0;c[m>>2]=12564;j=k+12|0;c[k>>2]=12704;c[h>>2]=12724;c[k+4>>2]=0;T2(k+64|0,j);c[k+136>>2]=0;c[k+140>>2]=-1;c[k>>2]=12544;c[k+64>>2]=12584;c[m>>2]=12564;W2(j);c[j>>2]=12740;m=k+44|0;c[m>>2]=0;c[m+4>>2]=0;c[m+8>>2]=0;c[m+12>>2]=0;c[k+60>>2]=24;c[g>>2]=0;c[g+4>>2]=0;c[g+8>>2]=0;$d(j,g);o2(g);g=b+4|0;c[g>>2]=0;c[g+4>>2]=0;c[g+8>>2]=0;e=dG((a[d>>0]&1)==0?d+1|0:c[d+8>>2]|0,(a[e>>0]&1)==0?e+1|0:c[e+8>>2]|0,k+8|0)|0;c[b>>2]=e;if(e){Ld(k,12592);O2(h);i=l;return}RE(f,j);p2(g,f)|0;o2(f);Ld(k,12592);O2(h);i=l;return}function t_(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,j=0,k=0,l=0,m=0;l=i;i=i+176|0;g=l+160|0;k=l+16|0;f=l;h=k+64|0;m=k+8|0;c[m>>2]=12564;j=k+12|0;c[k>>2]=12704;c[h>>2]=12724;c[k+4>>2]=0;T2(k+64|0,j);c[k+136>>2]=0;c[k+140>>2]=-1;c[k>>2]=12544;c[k+64>>2]=12584;c[m>>2]=12564;W2(j);c[j>>2]=12740;m=k+44|0;c[m>>2]=0;c[m+4>>2]=0;c[m+8>>2]=0;c[m+12>>2]=0;c[k+60>>2]=24;c[g>>2]=0;c[g+4>>2]=0;c[g+8>>2]=0;$d(j,g);o2(g);g=b+4|0;c[g>>2]=0;c[g+4>>2]=0;c[g+8>>2]=0;e=eG((a[d>>0]&1)==0?d+1|0:c[d+8>>2]|0,e,k+8|0)|0;c[b>>2]=e;if(e){Ld(k,12592);O2(h);i=l;return}RE(f,j);p2(g,f)|0;o2(f);Ld(k,12592);O2(h);i=l;return}function u_(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,j=0,k=0,l=0,m=0;l=i;i=i+176|0;g=l+160|0;k=l+16|0;f=l;h=k+64|0;m=k+8|0;c[m>>2]=12564;j=k+12|0;c[k>>2]=12704;c[h>>2]=12724;c[k+4>>2]=0;T2(k+64|0,j);c[k+136>>2]=0;c[k+140>>2]=-1;c[k>>2]=12544;c[k+64>>2]=12584;c[m>>2]=12564;W2(j);c[j>>2]=12740;m=k+44|0;c[m>>2]=0;c[m+4>>2]=0;c[m+8>>2]=0;c[m+12>>2]=0;c[k+60>>2]=24;c[g>>2]=0;c[g+4>>2]=0;c[g+8>>2]=0;$d(j,g);o2(g);g=b+4|0;c[g>>2]=0;c[g+4>>2]=0;c[g+8>>2]=0;e=fG((a[d>>0]&1)==0?d+1|0:c[d+8>>2]|0,(a[e>>0]&1)==0?e+1|0:c[e+8>>2]|0,k+8|0)|0;c[b>>2]=e;if(e){Ld(k,12592);O2(h);i=l;return}RE(f,j);p2(g,f)|0;o2(f);Ld(k,12592);O2(h);i=l;return}function v_(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,j=0,k=0,l=0,m=0;l=i;i=i+176|0;g=l+160|0;k=l+16|0;f=l;h=k+64|0;m=k+8|0;c[m>>2]=12564;j=k+12|0;c[k>>2]=12704;c[h>>2]=12724;c[k+4>>2]=0;T2(k+64|0,j);c[k+136>>2]=0;c[k+140>>2]=-1;c[k>>2]=12544;c[k+64>>2]=12584;c[m>>2]=12564;W2(j);c[j>>2]=12740;m=k+44|0;c[m>>2]=0;c[m+4>>2]=0;c[m+8>>2]=0;c[m+12>>2]=0;c[k+60>>2]=24;c[g>>2]=0;c[g+4>>2]=0;c[g+8>>2]=0;$d(j,g);o2(g);g=b+4|0;c[g>>2]=0;c[g+4>>2]=0;c[g+8>>2]=0;e=gG((a[d>>0]&1)==0?d+1|0:c[d+8>>2]|0,(a[e>>0]&1)==0?e+1|0:c[e+8>>2]|0,k+8|0)|0;c[b>>2]=e;if(e){Ld(k,12592);O2(h);i=l;return}RE(f,j);p2(g,f)|0;o2(f);Ld(k,12592);O2(h);i=l;return}function w_(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,j=0,k=0,l=0,m=0;l=i;i=i+176|0;g=l+160|0;k=l+16|0;f=l;h=k+64|0;m=k+8|0;c[m>>2]=12564;j=k+12|0;c[k>>2]=12704;c[h>>2]=12724;c[k+4>>2]=0;T2(k+64|0,j);c[k+136>>2]=0;c[k+140>>2]=-1;c[k>>2]=12544;c[k+64>>2]=12584;c[m>>2]=12564;W2(j);c[j>>2]=12740;m=k+44|0;c[m>>2]=0;c[m+4>>2]=0;c[m+8>>2]=0;c[m+12>>2]=0;c[k+60>>2]=24;c[g>>2]=0;c[g+4>>2]=0;c[g+8>>2]=0;$d(j,g);o2(g);g=b+4|0;c[g>>2]=0;c[g+4>>2]=0;c[g+8>>2]=0;e=hG((a[d>>0]&1)==0?d+1|0:c[d+8>>2]|0,(a[e>>0]&1)==0?e+1|0:c[e+8>>2]|0,k+8|0)|0;c[b>>2]=e;if(e){Ld(k,12592);O2(h);i=l;return}RE(f,j);p2(g,f)|0;o2(f);Ld(k,12592);O2(h);i=l;return}function x_(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,j=0,k=0,l=0,m=0;l=i;i=i+176|0;g=l+160|0;k=l+16|0;f=l;h=k+64|0;m=k+8|0;c[m>>2]=12564;j=k+12|0;c[k>>2]=12704;c[h>>2]=12724;c[k+4>>2]=0;T2(k+64|0,j);c[k+136>>2]=0;c[k+140>>2]=-1;c[k>>2]=12544;c[k+64>>2]=12584;c[m>>2]=12564;W2(j);c[j>>2]=12740;m=k+44|0;c[m>>2]=0;c[m+4>>2]=0;c[m+8>>2]=0;c[m+12>>2]=0;c[k+60>>2]=24;c[g>>2]=0;c[g+4>>2]=0;c[g+8>>2]=0;$d(j,g);o2(g);g=b+4|0;c[g>>2]=0;c[g+4>>2]=0;c[g+8>>2]=0;e=iG((a[d>>0]&1)==0?d+1|0:c[d+8>>2]|0,(a[e>>0]&1)==0?e+1|0:c[e+8>>2]|0,k+8|0)|0;c[b>>2]=e;if(e){Ld(k,12592);O2(h);i=l;return}RE(f,j);p2(g,f)|0;o2(f);Ld(k,12592);O2(h);i=l;return}function y_(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,j=0,k=0,l=0,m=0;l=i;i=i+176|0;g=l+160|0;k=l+16|0;f=l;h=k+64|0;m=k+8|0;c[m>>2]=12564;j=k+12|0;c[k>>2]=12704;c[h>>2]=12724;c[k+4>>2]=0;T2(k+64|0,j);c[k+136>>2]=0;c[k+140>>2]=-1;c[k>>2]=12544;c[k+64>>2]=12584;c[m>>2]=12564;W2(j);c[j>>2]=12740;m=k+44|0;c[m>>2]=0;c[m+4>>2]=0;c[m+8>>2]=0;c[m+12>>2]=0;c[k+60>>2]=24;c[g>>2]=0;c[g+4>>2]=0;c[g+8>>2]=0;$d(j,g);o2(g);g=b+4|0;c[g>>2]=0;c[g+4>>2]=0;c[g+8>>2]=0;e=jG((a[d>>0]&1)==0?d+1|0:c[d+8>>2]|0,(a[e>>0]&1)==0?e+1|0:c[e+8>>2]|0,k+8|0)|0;c[b>>2]=e;if(e){Ld(k,12592);O2(h);i=l;return}RE(f,j);p2(g,f)|0;o2(f);Ld(k,12592);O2(h);i=l;return}function z_(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,j=0,k=0,l=0,m=0;l=i;i=i+176|0;g=l+160|0;k=l+16|0;f=l;h=k+64|0;m=k+8|0;c[m>>2]=12564;j=k+12|0;c[k>>2]=12704;c[h>>2]=12724;c[k+4>>2]=0;T2(k+64|0,j);c[k+136>>2]=0;c[k+140>>2]=-1;c[k>>2]=12544;c[k+64>>2]=12584;c[m>>2]=12564;W2(j);c[j>>2]=12740;m=k+44|0;c[m>>2]=0;c[m+4>>2]=0;c[m+8>>2]=0;c[m+12>>2]=0;c[k+60>>2]=24;c[g>>2]=0;c[g+4>>2]=0;c[g+8>>2]=0;$d(j,g);o2(g);g=b+4|0;c[g>>2]=0;c[g+4>>2]=0;c[g+8>>2]=0;e=TF((a[d>>0]&1)==0?d+1|0:c[d+8>>2]|0,(a[e>>0]&1)==0?e+1|0:c[e+8>>2]|0,k+8|0)|0;c[b>>2]=e;if(e){Ld(k,12592);O2(h);i=l;return}RE(f,j);p2(g,f)|0;o2(f);Ld(k,12592);O2(h);i=l;return}function A_(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,j=0,k=0,l=0,m=0,n=0;m=i;i=i+176|0;h=m+160|0;l=m+16|0;g=m;j=l+64|0;n=l+8|0;c[n>>2]=12564;k=l+12|0;c[l>>2]=12704;c[j>>2]=12724;c[l+4>>2]=0;T2(l+64|0,k);c[l+136>>2]=0;c[l+140>>2]=-1;c[l>>2]=12544;c[l+64>>2]=12584;c[n>>2]=12564;W2(k);c[k>>2]=12740;n=l+44|0;c[n>>2]=0;c[n+4>>2]=0;c[n+8>>2]=0;c[n+12>>2]=0;c[l+60>>2]=24;c[h>>2]=0;c[h+4>>2]=0;c[h+8>>2]=0;$d(k,h);o2(h);h=b+4|0;c[h>>2]=0;c[h+4>>2]=0;c[h+8>>2]=0;f=WF((a[d>>0]&1)==0?d+1|0:c[d+8>>2]|0,(a[e>>0]&1)==0?e+1|0:c[e+8>>2]|0,f,l+8|0)|0;c[b>>2]=f;if(f){Ld(l,12592);O2(j);i=m;return}RE(g,k);p2(h,g)|0;o2(g);Ld(l,12592);O2(j);i=m;return}function B_(b,d,e,f,g){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,j=0,k=0,l=0,m=0,n=0,o=0;n=i;i=i+176|0;j=n+160|0;m=n+16|0;h=n;k=m+64|0;o=m+8|0;c[o>>2]=12564;l=m+12|0;c[m>>2]=12704;c[k>>2]=12724;c[m+4>>2]=0;T2(m+64|0,l);c[m+136>>2]=0;c[m+140>>2]=-1;c[m>>2]=12544;c[m+64>>2]=12584;c[o>>2]=12564;W2(l);c[l>>2]=12740;o=m+44|0;c[o>>2]=0;c[o+4>>2]=0;c[o+8>>2]=0;c[o+12>>2]=0;c[m+60>>2]=24;c[j>>2]=0;c[j+4>>2]=0;c[j+8>>2]=0;$d(l,j);o2(j);j=b+4|0;c[j>>2]=0;c[j+4>>2]=0;c[j+8>>2]=0;g=XF((a[d>>0]&1)==0?d+1|0:c[d+8>>2]|0,(a[e>>0]&1)==0?e+1|0:c[e+8>>2]|0,f,g,m+8|0)|0;c[b>>2]=g;if(g){Ld(m,12592);O2(k);i=n;return}RE(h,l);p2(j,h)|0;o2(h);Ld(m,12592);O2(k);i=n;return}function C_(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0;l=i;i=i+192|0;f=l+168|0;k=l+24|0;m=l+16|0;g=l;h=k+64|0;o=k+8|0;c[o>>2]=12564;j=k+12|0;c[k>>2]=12704;c[h>>2]=12724;c[k+4>>2]=0;T2(k+64|0,j);c[k+136>>2]=0;c[k+140>>2]=-1;c[k>>2]=12544;c[k+64>>2]=12584;c[o>>2]=12564;W2(j);c[j>>2]=12740;o=k+44|0;c[o>>2]=0;c[o+4>>2]=0;c[o+8>>2]=0;c[o+12>>2]=0;c[k+60>>2]=24;c[f>>2]=0;c[f+4>>2]=0;c[f+8>>2]=0;$d(j,f);o2(f);f=b+4|0;c[f>>2]=0;c[f+4>>2]=0;c[f+8>>2]=0;o=a[d>>0]|0;n=c[d+8>>2]|0;lM(m,e);d=UF((o&1)==0?d+1|0:n,m,k+8|0)|0;c[b>>2]=d;if(d){Ld(k,12592);O2(h);i=l;return}RE(g,j);p2(f,g)|0;o2(g);Ld(k,12592);O2(h);i=l;return}function D_(b,d,e){b=b|0;d=d|0;e=+e;var f=0,g=0,h=0,j=0,k=0,l=0,m=0;l=i;i=i+176|0;g=l+160|0;k=l+16|0;f=l;h=k+64|0;m=k+8|0;c[m>>2]=12564;j=k+12|0;c[k>>2]=12704;c[h>>2]=12724;c[k+4>>2]=0;T2(k+64|0,j);c[k+136>>2]=0;c[k+140>>2]=-1;c[k>>2]=12544;c[k+64>>2]=12584;c[m>>2]=12564;W2(j);c[j>>2]=12740;m=k+44|0;c[m>>2]=0;c[m+4>>2]=0;c[m+8>>2]=0;c[m+12>>2]=0;c[k+60>>2]=24;c[g>>2]=0;c[g+4>>2]=0;c[g+8>>2]=0;$d(j,g);o2(g);g=b+4|0;c[g>>2]=0;c[g+4>>2]=0;c[g+8>>2]=0;d=VF((a[d>>0]&1)==0?d+1|0:c[d+8>>2]|0,e,k+8|0)|0;c[b>>2]=d;if(d){Ld(k,12592);O2(h);i=l;return}RE(f,j);p2(g,f)|0;o2(f);Ld(k,12592);O2(h);i=l;return}function E_(b){b=b|0;return lG((a[b>>0]&1)==0?b+1|0:c[b+8>>2]|0)|0}function F_(b,d){b=b|0;d=d|0;kG(b,(a[d>>0]&1)==0?d+1|0:c[d+8>>2]|0);return}function G_(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;OF(b,(a[d>>0]&1)==0?d+1|0:c[d+8>>2]|0,e,f);return}function H_(a){a=a|0;return e1(c[a+4>>2]|0)|0}function I_(a){a=a|0;Rb(10200,79886);bb(10208,79891,1,1,0);tb(10216,79896,1,-128,127);tb(10232,79901,1,-128,127);tb(10224,79913,1,0,255);tb(10240,79927,2,-32768,32767);tb(10248,79933,2,0,65535);tb(10256,79948,4,-2147483648,2147483647);tb(10264,79952,4,0,-1);tb(10272,79965,4,-2147483648,2147483647);tb(10280,79970,4,0,-1);$b(10288,79984,4);$b(10296,79990,8);Qa(9880,79997);Qa(9936,80009);Vb(9960,4,80042);mb(9984,80055);Pb(9992,0,80071);Pb(1e4,0,80101);Pb(10008,1,80138);Pb(10016,2,80177);Pb(10024,3,80208);Pb(10032,4,80248);Pb(10040,5,80277);Pb(10048,4,80315);Pb(10056,5,80345);Pb(1e4,0,80384);Pb(10008,1,80416);Pb(10016,2,80449);Pb(10024,3,80482);Pb(10032,4,80516);Pb(10040,5,80549);Pb(10064,6,80583);Pb(10072,7,80614);Pb(10080,7,80646);return}function J_(){I_(0);return}function K_(a,b){a=a|0;b=b|0;var d=0;d=i;i=i+16|0;c[d>>2]=b;b=c[11942]|0;S0(b,a,d)|0;I0(10,b)|0;Ib()}function L_(a){a=a|0;Ha(81534,81563,1164,81642)}function M_(a){a=a|0;Ha(81663,81686,303,81642)}function N_(){var a=0,b=0;a=i;i=i+16|0;if(!(hb(47512,3)|0)){b=Nb(c[11877]|0)|0;i=a;return b|0}else K_(81765,a);return 0}function O_(a){a=a|0;var b=0;b=(a|0)==0?1:a;a=w1(b)|0;a:do if(!a){while(1){a=X_()|0;if(!a)break;Ec[a&3]();a=w1(b)|0;if(a)break a}b=ub(4)|0;c[b>>2]=47316;fc(b|0,10088,1400)}while(0);return a|0}function P_(a){a=a|0;x1(a);return}function Q_(a){a=a|0;P_(a);return}function R_(a){a=a|0;c[a>>2]=47316;return}function S_(a){a=a|0;return}function T_(a){a=a|0;P_(a);return}function U_(a){a=a|0;return 81814}function V_(a){a=a|0;var b=0;b=i;i=i+16|0;Ec[a&3]();K_(81829,b)}function W_(){var a=0,b=0;a=N_()|0;if(((a|0)!=0?(b=c[a>>2]|0,(b|0)!=0):0)?(a=b+48|0,(c[a>>2]&-256|0)==1126902528?(c[a+4>>2]|0)==1129074247:0):0)V_(c[b+12>>2]|0);b=c[11826]|0;c[11826]=b+0;V_(b)}function X_(){var a=0;a=c[11832]|0;c[11832]=a+0;return a|0}function Y_(a){a=a|0;return}function Z_(a){a=a|0;return}function __(a){a=a|0;return}function $_(a){a=a|0;return}function a$(a){a=a|0;return}function b$(a){a=a|0;P_(a);return}function c$(a){a=a|0;P_(a);return}function d$(a){a=a|0;P_(a);return}function e$(a){a=a|0;P_(a);return}function f$(a){a=a|0;P_(a);return}function g$(a,b,c){a=a|0;b=b|0;c=c|0;return (a|0)==(b|0)|0}function h$(a,b,c){a=a|0;b=b|0;c=c|0;return (a|0)==(b|0)|0}function i$(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0;h=i;i=i+64|0;g=h;if((a|0)!=(b|0))if((b|0)!=0?(f=o$(b,10120,10136,0)|0,(f|0)!=0):0){b=g;e=b+56|0;do{c[b>>2]=0;b=b+4|0}while((b|0)<(e|0));c[g>>2]=f;c[g+8>>2]=a;c[g+12>>2]=-1;c[g+48>>2]=1;Hc[c[(c[f>>2]|0)+28>>2]&15](f,g,c[d>>2]|0,1);if((c[g+24>>2]|0)==1){c[d>>2]=c[g+16>>2];b=1}else b=0}else b=0;else b=1;i=h;return b|0}function j$(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 k$(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;if((a|0)==(c[b+8>>2]|0))j$(0,b,d,e);return}function l$(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;if((a|0)==(c[b+8>>2]|0))j$(0,b,d,e);else{a=c[a+8>>2]|0;Hc[c[(c[a>>2]|0)+28>>2]&15](a,b,d,e)}return}function m$(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;Hc[c[(c[a>>2]|0)+28>>2]&15](a,b,d+f|0,(g&2|0)!=0?e:2);return}function n$(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0;a:do if((b|0)!=(c[d+8>>2]|0)){h=c[b+12>>2]|0;g=b+16+(h<<3)|0;m$(b+16|0,d,e,f);if((h|0)>1){h=d+54|0;b=b+24|0;do{m$(b,d,e,f);if(a[h>>0]|0)break a;b=b+8|0}while(b>>>0>>0)}}else j$(0,d,e,f);while(0);return}function o$(d,e,f,g){d=d|0;e=e|0;f=f|0;g=g|0;var h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0;r=i;i=i+64|0;q=r;p=c[d>>2]|0;o=d+(c[p+-8>>2]|0)|0;p=c[p+-4>>2]|0;c[q>>2]=f;c[q+4>>2]=d;c[q+8>>2]=e;c[q+12>>2]=g;g=q+16|0;d=q+20|0;e=q+24|0;h=q+28|0;j=q+32|0;k=q+40|0;l=(p|0)==(f|0);m=g;n=m+36|0;do{c[m>>2]=0;m=m+4|0}while((m|0)<(n|0));b[g+36>>1]=0;a[g+38>>0]=0;a:do if(l){c[q+48>>2]=1;vc[c[(c[f>>2]|0)+20>>2]&15](f,q,o,o,1,0);g=(c[e>>2]|0)==1?o:0}else{mc[c[(c[p>>2]|0)+24>>2]&7](p,q,o,1,0);switch(c[q+36>>2]|0){case 0:{g=(c[k>>2]|0)==1&(c[h>>2]|0)==1&(c[j>>2]|0)==1?c[d>>2]|0:0;break a}case 1:break;default:{g=0;break a}}if((c[e>>2]|0)!=1?!((c[k>>2]|0)==0&(c[h>>2]|0)==1&(c[j>>2]|0)==1):0){g=0;break}g=c[g>>2]|0}while(0);i=r;return g|0}function p$(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;f=d+16|0;b=c[f>>2]|0;if(!b){c[f>>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((b|0)!=(e|0)){g=d+36|0;c[g>>2]=(c[g>>2]|0)+1;a[d+54>>0]=1;break}b=d+24|0;f=c[b>>2]|0;if((f|0)==2){c[b>>2]=g;f=g}if((f|0)==1?(c[d+48>>2]|0)==1:0)a[d+54>>0]=1}while(0);return}function q$(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((b|0)==(c[d+8>>2]|0)){if((c[d+4>>2]|0)==(e|0)?(h=d+28|0,(c[h>>2]|0)!=1):0)c[h>>2]=f}else{if((b|0)!=(c[d>>2]|0)){q=c[b+12>>2]|0;j=b+16+(q<<3)|0;s$(b+16|0,d,e,f,g);h=b+24|0;if((q|0)<=1)break;i=c[b+8>>2]|0;if((i&2|0)==0?(k=d+36|0,(c[k>>2]|0)!=1):0){if(!(i&1)){i=d+54|0;while(1){if(a[i>>0]|0)break a;if((c[k>>2]|0)==1)break a;s$(h,d,e,f,g);h=h+8|0;if(h>>>0>=j>>>0)break a}}i=d+24|0;b=d+54|0;while(1){if(a[b>>0]|0)break a;if((c[k>>2]|0)==1?(c[i>>2]|0)==1:0)break a;s$(h,d,e,f,g);h=h+8|0;if(h>>>0>=j>>>0)break a}}i=d+54|0;while(1){if(a[i>>0]|0)break a;s$(h,d,e,f,g);h=h+8|0;if(h>>>0>=j>>>0)break a}}if((c[d+16>>2]|0)!=(e|0)?(p=d+20|0,(c[p>>2]|0)!=(e|0)):0){c[d+32>>2]=f;m=d+44|0;if((c[m>>2]|0)==4)break;i=c[b+12>>2]|0;j=b+16+(i<<3)|0;k=d+52|0;f=d+53|0;n=d+54|0;l=b+8|0;o=d+24|0;b:do if((i|0)>0){i=0;h=0;b=b+16|0;while(1){a[k>>0]=0;a[f>>0]=0;r$(b,d,e,e,1,g);if(a[n>>0]|0){q=20;break b}do if(a[f>>0]|0){if(!(a[k>>0]|0))if(!(c[l>>2]&1)){h=1;q=20;break b}else{h=1;break}if((c[o>>2]|0)==1)break b;if(!(c[l>>2]&2))break b;else{i=1;h=1}}while(0);b=b+8|0;if(b>>>0>=j>>>0){q=20;break}}}else{i=0;h=0;q=20}while(0);do if((q|0)==20){if((!i?(c[p>>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)break}else q=24;if((q|0)==24?h:0)break;c[m>>2]=4;break a}while(0);c[m>>2]=3;break}if((f|0)==1)c[d+32>>2]=1}while(0);return}function r$(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;vc[c[(c[a>>2]|0)+20>>2]&15](a,b,d,e+h|0,(i&2|0)!=0?f:2,g);return}function s$(a,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;mc[c[(c[a>>2]|0)+24>>2]&7](a,b,d+g|0,(h&2|0)!=0?e:2,f);return}function t$(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;a:do if((b|0)==(c[d+8>>2]|0)){if((c[d+4>>2]|0)==(e|0)?(h=d+28|0,(c[h>>2]|0)!=1):0)c[h>>2]=f}else{if((b|0)!=(c[d>>2]|0)){j=c[b+8>>2]|0;mc[c[(c[j>>2]|0)+24>>2]&7](j,d,e,f,g);break}if((c[d+16>>2]|0)!=(e|0)?(i=d+20|0,(c[i>>2]|0)!=(e|0)):0){c[d+32>>2]=f;f=d+44|0;if((c[f>>2]|0)==4)break;h=d+52|0;a[h>>0]=0;k=d+53|0;a[k>>0]=0;b=c[b+8>>2]|0;vc[c[(c[b>>2]|0)+20>>2]&15](b,d,e,e,1,g);if(a[k>>0]|0){if(!(a[h>>0]|0)){h=1;j=13}}else{h=0;j=13}do if((j|0)==13){c[i>>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;if(h)break}else j=16;if((j|0)==16?h:0)break;c[f>>2]=4;break a}while(0);c[f>>2]=3;break}if((f|0)==1)c[d+32>>2]=1}while(0);return}function u$(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;do if((b|0)==(c[d+8>>2]|0)){if((c[d+4>>2]|0)==(e|0)?(i=d+28|0,(c[i>>2]|0)!=1):0)c[i>>2]=f}else if((b|0)==(c[d>>2]|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}while(0);return}function v$(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((b|0)==(c[d+8>>2]|0))p$(0,d,e,f,g);else{m=d+52|0;n=a[m>>0]|0;o=d+53|0;p=a[o>>0]|0;l=c[b+12>>2]|0;i=b+16+(l<<3)|0;a[m>>0]=0;a[o>>0]=0;r$(b+16|0,d,e,f,g,h);a:do if((l|0)>1){j=d+24|0;k=b+8|0;l=d+54|0;b=b+24|0;do{if(a[l>>0]|0)break a;if(!(a[m>>0]|0)){if((a[o>>0]|0)!=0?(c[k>>2]&1|0)==0:0)break a}else{if((c[j>>2]|0)==1)break a;if(!(c[k>>2]&2))break a}a[m>>0]=0;a[o>>0]=0;r$(b,d,e,f,g,h);b=b+8|0}while(b>>>0>>0)}while(0);a[m>>0]=n;a[o>>0]=p}return}function w$(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((a|0)==(c[b+8>>2]|0))p$(0,b,d,e,f);else{a=c[a+8>>2]|0;vc[c[(c[a>>2]|0)+20>>2]&15](a,b,d,e,f,g)}return}function x$(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((a|0)==(c[b+8>>2]|0))p$(0,b,d,e,f);return}function y$(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;f=i;i=i+16|0;e=f;c[e>>2]=c[d>>2];a=tc[c[(c[a>>2]|0)+16>>2]&63](a,b,e)|0;if(a)c[d>>2]=c[e>>2];i=f;return a&1|0}function z$(a){a=a|0;if(!a)a=0;else a=(o$(a,10120,10168,0)|0)!=0;return a&1|0}function A$(){var a=0;a=ub(4)|0;R_(a);fc(a|0,10088,1400)}function B$(){var a=0,b=0,d=0,e=0,f=0,g=0,h=0,j=0;f=i;i=i+48|0;h=f+32|0;d=f+24|0;j=f+16|0;g=f;f=f+36|0;a=N_()|0;if((a|0)!=0?(e=c[a>>2]|0,(e|0)!=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]=c[11879];K_(82108,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(tc[c[(c[10104>>2]|0)+16>>2]&63](10104,e,f)|0){j=c[f>>2]|0;f=c[11879]|0;j=rc[c[(c[j>>2]|0)+8>>2]&127](j)|0;c[g>>2]=f;c[g+4>>2]=a;c[g+8>>2]=j;K_(82022,g)}else{c[j>>2]=c[11879];c[j+4>>2]=a;K_(82067,j)}}K_(82146,h)}function C$(){var a=0;a=i;i=i+16|0;if(!(Fb(47508,1491)|0)){i=a;return}else K_(81869,a)}function D$(a){a=a|0;var b=0;b=i;i=i+16|0;x1(a);if(!(dc(c[11877]|0,0)|0)){i=b;return}else K_(81919,b)}function E$(a){a=a|0;Ha(81972,81563,1175,82001)}function F$(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;a=$0(a,b,c)|0;return a|0}function G$(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;a=a1(a,b,c)|0;return a|0}function H$(){return 47784}function I$(){return 47788}function J$(){return 47792}function K$(a){a=a|0;return ((a|0)==32|(a+-9|0)>>>0<5)&1|0}function L$(a){a=a|0;if((a+-48|0)>>>0<10)a=1;else a=((a|32)+-97|0)>>>0<6;return a&1|0}function M$(){var a=0;if(!(c[11880]|0))a=47796;else a=c[(Zb()|0)+60>>2]|0;return a|0}function N$(b){b=b|0;var c=0,e=0;c=0;while(1){if((d[82167+c>>0]|0)==(b|0)){e=2;break}c=c+1|0;if((c|0)==87){c=87;b=82255;e=5;break}}if((e|0)==2)if(!c)b=82255;else{b=82255;e=5}if((e|0)==5)while(1){e=b;while(1){b=e+1|0;if(!(a[e>>0]|0))break;else e=b}c=c+-1|0;if(!c)break;else e=5}return b|0}function O$(b,e,f){b=b|0;e=e|0;f=f|0;var g=0.0,h=0,j=0.0,k=0,l=0,m=0.0,n=0,o=0,p=0,q=0.0,r=0.0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0.0;L=i;i=i+512|0;H=L;switch(e|0){case 0:{K=24;J=-149;A=4;break}case 1:{K=53;J=-1074;A=4;break}case 2:{K=53;J=-1074;A=4;break}default:g=0.0}a:do if((A|0)==4){E=b+4|0;C=b+100|0;do{e=c[E>>2]|0;if(e>>>0<(c[C>>2]|0)>>>0){c[E>>2]=e+1;e=d[e>>0]|0}else e=R$(b)|0}while((K$(e)|0)!=0);b:do switch(e|0){case 43:case 45:{h=1-(((e|0)==45&1)<<1)|0;e=c[E>>2]|0;if(e>>>0<(c[C>>2]|0)>>>0){c[E>>2]=e+1;e=d[e>>0]|0;I=h;break b}else{e=R$(b)|0;I=h;break b}}default:I=1}while(0);h=e;e=0;do{if((h|32|0)!=(a[84059+e>>0]|0))break;do if(e>>>0<7){h=c[E>>2]|0;if(h>>>0<(c[C>>2]|0)>>>0){c[E>>2]=h+1;h=d[h>>0]|0;break}else{h=R$(b)|0;break}}while(0);e=e+1|0}while(e>>>0<8);c:do switch(e|0){case 8:break;case 3:{A=23;break}default:{k=(f|0)!=0;if(k&e>>>0>3)if((e|0)==8)break c;else{A=23;break c}d:do if(!e){e=0;do{if((h|32|0)!=(a[86944+e>>0]|0))break d;do if(e>>>0<2){h=c[E>>2]|0;if(h>>>0<(c[C>>2]|0)>>>0){c[E>>2]=h+1;h=d[h>>0]|0;break}else{h=R$(b)|0;break}}while(0);e=e+1|0}while(e>>>0<3)}while(0);switch(e|0){case 3:{e=c[E>>2]|0;if(e>>>0<(c[C>>2]|0)>>>0){c[E>>2]=e+1;e=d[e>>0]|0}else e=R$(b)|0;if((e|0)==40)e=1;else{if(!(c[C>>2]|0)){g=s;break a}c[E>>2]=(c[E>>2]|0)+-1;g=s;break a}while(1){h=c[E>>2]|0;if(h>>>0<(c[C>>2]|0)>>>0){c[E>>2]=h+1;h=d[h>>0]|0}else h=R$(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[C>>2]|0)==0;if(!h)c[E>>2]=(c[E>>2]|0)+-1;if(!k){c[(M$()|0)>>2]=22;Q$(b,0);g=0.0;break a}if(!e){g=s;break a}while(1){e=e+-1|0;if(!h)c[E>>2]=(c[E>>2]|0)+-1;if(!e){g=s;break a}}}case 0:{do if((h|0)==48){e=c[E>>2]|0;if(e>>>0<(c[C>>2]|0)>>>0){c[E>>2]=e+1;e=d[e>>0]|0}else e=R$(b)|0;if((e|32|0)!=120){if(!(c[C>>2]|0)){e=48;break}c[E>>2]=(c[E>>2]|0)+-1;e=48;break}e=c[E>>2]|0;if(e>>>0<(c[C>>2]|0)>>>0){c[E>>2]=e+1;e=d[e>>0]|0;k=0}else{e=R$(b)|0;k=0}e:while(1){switch(e|0){case 46:{A=74;break e}case 48:break;default:{y=0;l=0;x=0;h=0;n=k;o=0;w=0;m=1.0;k=0;g=0.0;break e}}e=c[E>>2]|0;if(e>>>0<(c[C>>2]|0)>>>0){c[E>>2]=e+1;e=d[e>>0]|0;k=1;continue}else{e=R$(b)|0;k=1;continue}}if((A|0)==74){e=c[E>>2]|0;if(e>>>0<(c[C>>2]|0)>>>0){c[E>>2]=e+1;e=d[e>>0]|0}else e=R$(b)|0;if((e|0)==48){k=0;h=0;do{e=c[E>>2]|0;if(e>>>0<(c[C>>2]|0)>>>0){c[E>>2]=e+1;e=d[e>>0]|0}else e=R$(b)|0;k=Tba(k|0,h|0,-1,-1)|0;h=D}while((e|0)==48);y=0;l=0;x=k;n=1;o=1;w=0;m=1.0;k=0;g=0.0}else{y=0;l=0;x=0;h=0;n=k;o=1;w=0;m=1.0;k=0;g=0.0}}while(1){u=e+-48|0;p=e|32;if(u>>>0>=10){v=(e|0)==46;if(!(v|(p+-97|0)>>>0<6)){p=x;u=y;break}if(v)if(!o){v=l;h=y;u=y;o=1;p=w;j=m}else{p=x;u=y;e=46;break}else A=86}else A=86;if((A|0)==86){A=0;e=(e|0)>57?p+-87|0:u;do if(!((y|0)<0|(y|0)==0&l>>>0<8)){if((y|0)<0|(y|0)==0&l>>>0<14){r=m*.0625;p=w;j=r;g=g+r*+(e|0);break}if((w|0)!=0|(e|0)==0){p=w;j=m}else{p=1;j=m;g=g+m*.5}}else{p=w;j=m;k=e+(k<<4)|0}while(0);l=Tba(l|0,y|0,1,0)|0;v=x;u=D;n=1}e=c[E>>2]|0;if(e>>>0<(c[C>>2]|0)>>>0){c[E>>2]=e+1;y=u;x=v;e=d[e>>0]|0;w=p;m=j;continue}else{y=u;x=v;e=R$(b)|0;w=p;m=j;continue}}if(!n){e=(c[C>>2]|0)==0;if(!e)c[E>>2]=(c[E>>2]|0)+-1;if(f){if(!e?(z=c[E>>2]|0,c[E>>2]=z+-1,(o|0)!=0):0)c[E>>2]=z+-2}else Q$(b,0);g=+(I|0)*0.0;break a}n=(o|0)==0;o=n?l:p;n=n?u:h;if((u|0)<0|(u|0)==0&l>>>0<8){h=u;do{k=k<<4;l=Tba(l|0,h|0,1,0)|0;h=D}while((h|0)<0|(h|0)==0&l>>>0<8)}if((e|32|0)==112){h=k1(b,f)|0;e=D;if((h|0)==0&(e|0)==-2147483648){if(!f){Q$(b,0);g=0.0;break a}if(!(c[C>>2]|0)){h=0;e=0}else{c[E>>2]=(c[E>>2]|0)+-1;h=0;e=0}}}else if(!(c[C>>2]|0)){h=0;e=0}else{c[E>>2]=(c[E>>2]|0)+-1;h=0;e=0}H=Vba(o|0,n|0,2)|0;H=Tba(H|0,D|0,-32,-1)|0;e=Tba(H|0,D|0,h|0,e|0)|0;h=D;if(!k){g=+(I|0)*0.0;break a}if((h|0)>0|(h|0)==0&e>>>0>(0-J|0)>>>0){c[(M$()|0)>>2]=34;g=+(I|0)*1797693134862315708145274.0e284*1797693134862315708145274.0e284;break a}H=J+-106|0;G=((H|0)<0)<<31>>31;if((h|0)<(G|0)|(h|0)==(G|0)&e>>>0>>0){c[(M$()|0)>>2]=34;g=+(I|0)*2.2250738585072014e-308*2.2250738585072014e-308;break a}if((k|0)>-1){do{G=!(g>=.5);H=G&1|k<<1;k=H^1;g=g+(G?g:g+-1.0);e=Tba(e|0,h|0,-1,-1)|0;h=D}while((H|0)>-1);l=e;m=g}else{l=e;m=g}e=Pba(32,0,J|0,((J|0)<0)<<31>>31|0)|0;e=Tba(l|0,h|0,e|0,D|0)|0;J=D;if(0>(J|0)|0==(J|0)&K>>>0>e>>>0)if((e|0)<0){e=0;A=127}else A=125;else{e=K;A=125}if((A|0)==125)if((e|0)<53)A=127;else{h=e;j=+(I|0);g=0.0}if((A|0)==127){g=+(I|0);h=e;j=g;g=+b0(+g0(1.0,84-e|0),g)}K=(k&1|0)==0&(m!=0.0&(h|0)<32);g=j*(K?0.0:m)+(g+j*+(((K&1)+k|0)>>>0))-g;if(!(g!=0.0))c[(M$()|0)>>2]=34;g=+h0(g,l);break a}else e=h;while(0);F=J+K|0;G=0-F|0;k=0;f:while(1){switch(e|0){case 46:{A=138;break f}case 48:break;default:{h=0;p=0;o=0;break f}}e=c[E>>2]|0;if(e>>>0<(c[C>>2]|0)>>>0){c[E>>2]=e+1;e=d[e>>0]|0;k=1;continue}else{e=R$(b)|0;k=1;continue}}if((A|0)==138){e=c[E>>2]|0;if(e>>>0<(c[C>>2]|0)>>>0){c[E>>2]=e+1;e=d[e>>0]|0}else e=R$(b)|0;if((e|0)==48){h=0;e=0;while(1){h=Tba(h|0,e|0,-1,-1)|0;k=D;e=c[E>>2]|0;if(e>>>0<(c[C>>2]|0)>>>0){c[E>>2]=e+1;e=d[e>>0]|0}else e=R$(b)|0;if((e|0)==48)e=k;else{p=k;k=1;o=1;break}}}else{h=0;p=0;o=1}}c[H>>2]=0;n=e+-48|0;l=(e|0)==46;g:do if(l|n>>>0<10){B=H+496|0;y=0;v=0;w=l;A=p;u=k;z=o;k=0;l=0;o=0;h:while(1){do if(w)if(!z){h=y;p=v;z=1}else{p=A;e=y;n=v;break h}else{w=Tba(y|0,v|0,1,0)|0;v=D;x=(e|0)!=48;if((l|0)>=125){if(!x){p=A;y=w;break}c[B>>2]=c[B>>2]|1;p=A;y=w;break}p=H+(l<<2)|0;if(k)n=e+-48+((c[p>>2]|0)*10|0)|0;c[p>>2]=n;k=k+1|0;n=(k|0)==9;p=A;y=w;u=1;k=n?0:k;l=(n&1)+l|0;o=x?w:o}while(0);e=c[E>>2]|0;if(e>>>0<(c[C>>2]|0)>>>0){c[E>>2]=e+1;e=d[e>>0]|0}else e=R$(b)|0;n=e+-48|0;w=(e|0)==46;if(!(w|n>>>0<10)){n=z;A=161;break g}else A=p}u=(u|0)!=0;A=169}else{y=0;v=0;u=k;n=o;k=0;l=0;o=0;A=161}while(0);do if((A|0)==161){B=(n|0)==0;h=B?y:h;p=B?v:p;u=(u|0)!=0;if(!((e|32|0)==101&u))if((e|0)>-1){e=y;n=v;A=169;break}else{e=y;n=v;A=171;break}n=k1(b,f)|0;e=D;if((n|0)==0&(e|0)==-2147483648){if(!f){Q$(b,0);g=0.0;break}if(!(c[C>>2]|0)){n=0;e=0}else{c[E>>2]=(c[E>>2]|0)+-1;n=0;e=0}}h=Tba(n|0,e|0,h|0,p|0)|0;u=y;p=D;n=v;A=173}while(0);if((A|0)==169)if(c[C>>2]|0){c[E>>2]=(c[E>>2]|0)+-1;if(u){u=e;A=173}else A=172}else A=171;if((A|0)==171)if(u){u=e;A=173}else A=172;do if((A|0)==172){c[(M$()|0)>>2]=22;Q$(b,0);g=0.0}else if((A|0)==173){e=c[H>>2]|0;if(!e){g=+(I|0)*0.0;break}if(((n|0)<0|(n|0)==0&u>>>0<10)&((h|0)==(u|0)&(p|0)==(n|0))?K>>>0>30|(e>>>K|0)==0:0){g=+(I|0)*+(e>>>0);break}b=(J|0)/-2|0;E=((b|0)<0)<<31>>31;if((p|0)>(E|0)|(p|0)==(E|0)&h>>>0>b>>>0){c[(M$()|0)>>2]=34;g=+(I|0)*1797693134862315708145274.0e284*1797693134862315708145274.0e284;break}b=J+-106|0;E=((b|0)<0)<<31>>31;if((p|0)<(E|0)|(p|0)==(E|0)&h>>>0>>0){c[(M$()|0)>>2]=34;g=+(I|0)*2.2250738585072014e-308*2.2250738585072014e-308;break}if(k){if((k|0)<9){n=H+(l<<2)|0;e=c[n>>2]|0;do{e=e*10|0;k=k+1|0}while((k|0)!=9);c[n>>2]=e}l=l+1|0}if((o|0)<9?(o|0)<=(h|0)&(h|0)<18:0){if((h|0)==9){g=+(I|0)*+((c[H>>2]|0)>>>0);break}if((h|0)<9){g=+(I|0)*+((c[H>>2]|0)>>>0)/+(c[47800+(8-h<<2)>>2]|0);break}b=K+27+($(h,-3)|0)|0;e=c[H>>2]|0;if((b|0)>30|(e>>>b|0)==0){g=+(I|0)*+(e>>>0)*+(c[47800+(h+-10<<2)>>2]|0);break}}e=(h|0)%9|0;if(!e){k=0;e=0}else{u=(h|0)>-1?e:e+9|0;n=c[47800+(8-u<<2)>>2]|0;if(l){o=1e9/(n|0)|0;k=0;e=0;p=0;do{C=H+(p<<2)|0;E=c[C>>2]|0;b=((E>>>0)/(n>>>0)|0)+e|0;c[C>>2]=b;e=$((E>>>0)%(n>>>0)|0,o)|0;b=(p|0)==(k|0)&(b|0)==0;p=p+1|0;h=b?h+-9|0:h;k=b?p&127:k}while((p|0)!=(l|0));if(e){c[H+(l<<2)>>2]=e;l=l+1|0}}else{k=0;l=0}e=0;h=9-u+h|0}i:while(1){v=(h|0)<18;w=(h|0)==18;x=H+(k<<2)|0;do{if(!v){if(!w)break i;if((c[x>>2]|0)>>>0>=9007199){h=18;break i}}n=0;o=l+127|0;while(1){u=o&127;p=H+(u<<2)|0;o=Vba(c[p>>2]|0,0,29)|0;o=Tba(o|0,D|0,n|0,0)|0;n=D;if(n>>>0>0|(n|0)==0&o>>>0>1e9){b=aca(o|0,n|0,1e9,0)|0;o=bca(o|0,n|0,1e9,0)|0;n=b}else n=0;c[p>>2]=o;b=(u|0)==(k|0);l=(u|0)!=(l+127&127|0)|b?l:(o|0)==0?u:l;if(b)break;else o=u+-1|0}e=e+-29|0}while((n|0)==0);k=k+127&127;if((k|0)==(l|0)){b=l+127&127;l=H+((l+126&127)<<2)|0;c[l>>2]=c[l>>2]|c[H+(b<<2)>>2];l=b}c[H+(k<<2)>>2]=n;h=h+9|0}j:while(1){y=l+1&127;x=H+((l+127&127)<<2)|0;while(1){v=(h|0)==18;w=(h|0)>27?9:1;u=v^1;while(1){o=k&127;p=(o|0)==(l|0);do if(!p){n=c[H+(o<<2)>>2]|0;if(n>>>0<9007199){A=219;break}if(n>>>0>9007199)break;n=k+1&127;if((n|0)==(l|0)){A=219;break}n=c[H+(n<<2)>>2]|0;if(n>>>0<254740991){A=219;break}if(!(n>>>0>254740991|u)){h=o;break j}}else A=219;while(0);if((A|0)==219?(A=0,v):0){A=220;break j}e=e+w|0;if((k|0)==(l|0))k=l;else break}u=(1<>>w;o=k;n=0;p=k;while(1){E=H+(p<<2)|0;b=c[E>>2]|0;k=(b>>>w)+n|0;c[E>>2]=k;n=$(b&u,v)|0;k=(p|0)==(o|0)&(k|0)==0;p=p+1&127;h=k?h+-9|0:h;k=k?p:o;if((p|0)==(l|0))break;else o=k}if(!n)continue;if((y|0)!=(k|0))break;c[x>>2]=c[x>>2]|1}c[H+(l<<2)>>2]=n;l=y}if((A|0)==220)if(p){c[H+(y+-1<<2)>>2]=0;h=l;l=y}else h=o;g=+((c[H+(h<<2)>>2]|0)>>>0);h=k+1&127;if((h|0)==(l|0)){l=k+2&127;c[H+(l+-1<<2)>>2]=0}r=+(I|0);j=r*(g*1.0e9+ +((c[H+(h<<2)>>2]|0)>>>0));v=e+53|0;p=v-J|0;u=(p|0)<(K|0);h=u&1;o=u?((p|0)<0?0:p):K;if((o|0)<53){M=+b0(+g0(1.0,105-o|0),j);m=+d0(j,+g0(1.0,53-o|0));q=M;g=m;m=M+(j-m)}else{q=0.0;g=0.0;m=j}n=k+2&127;do if((n|0)==(l|0))j=g;else{n=c[H+(n<<2)>>2]|0;do if(n>>>0>=5e8){if(n>>>0>5e8){g=r*.75+g;break}if((k+3&127|0)==(l|0)){g=r*.5+g;break}else{g=r*.75+g;break}}else{if((n|0)==0?(k+3&127|0)==(l|0):0)break;g=r*.25+g}while(0);if((53-o|0)<=1){j=g;break}if(+d0(g,1.0)!=0.0){j=g;break}j=g+1.0}while(0);g=m+j-q;do if((v&2147483647|0)>(-2-F|0)){if(+O(+g)>=9007199254740992.0){h=u&(o|0)==(p|0)?0:h;e=e+1|0;g=g*.5}if((e+50|0)<=(G|0)?!(j!=0.0&(h|0)!=0):0)break;c[(M$()|0)>>2]=34}while(0);g=+h0(g,e)}while(0);break a}default:{if(c[C>>2]|0)c[E>>2]=(c[E>>2]|0)+-1;c[(M$()|0)>>2]=22;Q$(b,0);g=0.0;break a}}}}while(0);if((A|0)==23){h=(c[C>>2]|0)==0;if(!h)c[E>>2]=(c[E>>2]|0)+-1;if((f|0)!=0&e>>>0>3)do{if(!h)c[E>>2]=(c[E>>2]|0)+-1;e=e+-1|0}while(e>>>0>3)}g=+(I|0)*t}while(0);i=L;return +g}function P$(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[(M$()|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=R$(b)|0}while((K$(i)|0)!=0);b:do switch(i|0){case 43:case 45:{j=((i|0)==45)<<31>>31;i=c[r>>2]|0;if(i>>>0<(c[q>>2]|0)>>>0){c[r>>2]=i+1;i=d[i>>0]|0;p=j;break b}else{i=R$(b)|0;p=j;break b}}default:p=0}while(0);j=(e|0)==0;do if((e&-17|0)==0&(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=R$(b)|0;if((i|32|0)!=120)if(j){e=8;n=46;break}else{n=32;break}e=c[r>>2]|0;if(e>>>0<(c[q>>2]|0)>>>0){c[r>>2]=e+1;i=d[e>>0]|0}else i=R$(b)|0;if((d[84068+(i+1)>>0]|0)>15){g=(c[q>>2]|0)==0;if(!g)c[r>>2]=(c[r>>2]|0)+-1;if(!f){Q$(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((d[84068+(i+1)>>0]|0)>>>0>>0)n=32;else{if(c[q>>2]|0)c[r>>2]=(c[r>>2]|0)+-1;Q$(b,0);c[(M$()|0)>>2]=22;h=0;g=0;break a}}while(0);if((n|0)==32)if((e|0)==10){e=i+-48|0;if(e>>>0<10){i=0;while(1){j=(i*10|0)+e|0;e=c[r>>2]|0;if(e>>>0<(c[q>>2]|0)>>>0){c[r>>2]=e+1;i=d[e>>0]|0}else i=R$(b)|0;e=i+-48|0;if(!(e>>>0<10&j>>>0<429496729)){e=j;break}else i=j}j=0}else{e=0;j=0}f=i+-48|0;if(f>>>0<10){while(1){k=$ba(e|0,j|0,10,0)|0;l=D;m=((f|0)<0)<<31>>31;o=~m;if(l>>>0>o>>>0|(l|0)==(o|0)&k>>>0>~f>>>0){k=e;break}e=Tba(k|0,l|0,f|0,m|0)|0;j=D;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=R$(b)|0;f=i+-48|0;if(!(f>>>0<10&(j>>>0<429496729|(j|0)==429496729&e>>>0<2576980378))){k=e;break}}if(f>>>0>9){i=k;e=p}else{e=10;n=72}}else{i=e;e=p}}else n=46;c:do if((n|0)==46){if(!(e+-1&e)){n=a[84325+((e*23|0)>>>5&7)>>0]|0;j=a[84068+(i+1)>>0]|0;f=j&255;if(f>>>0>>0){i=0;while(1){k=f|i<>2]|0;if(i>>>0<(c[q>>2]|0)>>>0){c[r>>2]=i+1;i=d[i>>0]|0}else i=R$(b)|0;j=a[84068+(i+1)>>0]|0;f=j&255;if(!(k>>>0<134217728&f>>>0>>0))break;else i=k}f=0}else{f=0;k=0}l=Uba(-1,-1,n|0)|0;m=D;if((j&255)>>>0>=e>>>0|(f>>>0>m>>>0|(f|0)==(m|0)&k>>>0>l>>>0)){j=f;n=72;break}else i=f;while(1){k=Vba(k|0,i|0,n|0)|0;f=D;k=j&255|k;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=R$(b)|0;j=a[84068+(i+1)>>0]|0;if((j&255)>>>0>=e>>>0|(f>>>0>m>>>0|(f|0)==(m|0)&k>>>0>l>>>0)){j=f;n=72;break c}else i=f}}j=a[84068+(i+1)>>0]|0;f=j&255;if(f>>>0>>0){i=0;while(1){k=f+($(i,e)|0)|0;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=R$(b)|0;j=a[84068+(i+1)>>0]|0;f=j&255;if(!(k>>>0<119304647&f>>>0>>0))break;else i=k}f=0}else{k=0;f=0}if((j&255)>>>0>>0){n=aca(-1,-1,e|0,0)|0;o=D;m=f;while(1){if(m>>>0>o>>>0|(m|0)==(o|0)&k>>>0>n>>>0){j=m;n=72;break c}f=$ba(k|0,m|0,e|0,0)|0;l=D;j=j&255;if(l>>>0>4294967295|(l|0)==-1&f>>>0>~j>>>0){j=m;n=72;break c}k=Tba(j|0,0,f|0,l|0)|0;f=D;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=R$(b)|0;j=a[84068+(i+1)>>0]|0;if((j&255)>>>0>=e>>>0){j=f;n=72;break}else m=f}}else{j=f;n=72}}while(0);if((n|0)==72)if((d[84068+(i+1)>>0]|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=R$(b)|0}while((d[84068+(i+1)>>0]|0)>>>0>>0);c[(M$()|0)>>2]=34;j=h;i=g;e=(g&1|0)==0&0==0?p:0}else{i=k;e=p}if(c[q>>2]|0)c[r>>2]=(c[r>>2]|0)+-1;if(!(j>>>0>>0|(j|0)==(h|0)&i>>>0>>0)){if(!((g&1|0)!=0|0!=0|(e|0)!=0)){c[(M$()|0)>>2]=34;g=Tba(g|0,h|0,-1,-1)|0;h=D;break}if(j>>>0>h>>>0|(j|0)==(h|0)&i>>>0>g>>>0){c[(M$()|0)>>2]=34;break}}g=((e|0)<0)<<31>>31;g=Pba(i^e|0,j^g|0,e|0,g|0)|0;h=D}while(0);D=h;return g|0}function Q$(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;c[a+104>>2]=b;d=c[a+4>>2]|0;e=c[a+8>>2]|0;f=e-d|0;c[a+108>>2]=f;if((b|0)!=0&(f|0)>(b|0))c[a+100>>2]=d+b;else c[a+100>>2]=e;return}function R$(b){b=b|0;var e=0,f=0,g=0,h=0,i=0,j=0;f=b+104|0;i=c[f>>2]|0;if((i|0)!=0?(c[b+108>>2]|0)>=(i|0):0)j=4;else{e=D0(b)|0;if((e|0)>=0){h=c[f>>2]|0;f=b+8|0;if(h){g=c[f>>2]|0;i=c[b+4>>2]|0;f=g;h=h-(c[b+108>>2]|0)+-1|0;if((f-i|0)>(h|0))c[b+100>>2]=i+h;else j=9}else{g=c[f>>2]|0;f=g;j=9}if((j|0)==9)c[b+100>>2]=f;f=c[b+4>>2]|0;if(g){b=b+108|0;c[b>>2]=g+1-f+(c[b>>2]|0)}f=f+-1|0;if((d[f>>0]|0|0)!=(e|0))a[f>>0]=e}else j=4}if((j|0)==4){c[b+100>>2]=0;e=-1}return e|0}function S$(a){a=a|0;if(a>>>0>4294963200){c[(M$()|0)>>2]=0-a;a=-1}return a|0}function T$(a){a=a|0;return 0}function U$(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return d|0}function V$(a,b){a=a|0;b=b|0;return -1|0}function W$(a){a=a|0;x1(a);return}function X$(a,b){a=a|0;b=b|0;return (a+-48|0)>>>0<10|0}function Y$(a,b){a=a|0;b=b|0;return L$(a)|0}function Z$(b,c,d){b=b|0;c=c|0;d=d|0;if(((a[c>>0]|0)!=0?(d1(c,88914)|0)!=0:0)?(d1(c,84334)|0)!=0:0)d=0;else if(!d)d=y1(1,4)|0;return d|0}function _$(a,b){a=a|0;b=b|0;return 84340}function $$(a){a=a|0;var b=0,d=0;b=(Zb()|0)+176|0;d=c[b>>2]|0;if(a)c[b>>2]=a;return d|0}function a0(a,b){a=+a;b=+b;var d=0,e=0;h[k>>3]=a;e=c[k>>2]|0;d=c[k+4>>2]|0;h[k>>3]=b;d=c[k+4>>2]&-2147483648|d&2147483647;c[k>>2]=e;c[k+4>>2]=d;return +(+h[k>>3])}function b0(a,b){a=+a;b=+b;return +(+a0(a,b))}function c0(a,b){a=+a;b=+b;var d=0,e=0,f=0,g=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0;h[k>>3]=a;d=c[k>>2]|0;m=c[k+4>>2]|0;h[k>>3]=b;n=c[k>>2]|0;o=c[k+4>>2]|0;e=Uba(d|0,m|0,52)|0;e=e&2047;j=Uba(n|0,o|0,52)|0;j=j&2047;p=m&-2147483648;i=Vba(n|0,o|0,1)|0;l=D;a:do if(!((i|0)==0&(l|0)==0)?(g=o&2147483647,!(g>>>0>2146435072|(g|0)==2146435072&n>>>0>0|(e|0)==2047)):0){f=Vba(d|0,m|0,1)|0;g=D;if(!(g>>>0>l>>>0|(g|0)==(l|0)&f>>>0>i>>>0))return +((f|0)==(i|0)&(g|0)==(l|0)?a*0.0:a);if(!e){e=Vba(d|0,m|0,12)|0;f=D;if((f|0)>-1|(f|0)==-1&e>>>0>4294967295){g=e;e=0;do{e=e+-1|0;g=Vba(g|0,f|0,1)|0;f=D}while((f|0)>-1|(f|0)==-1&g>>>0>4294967295)}else e=0;d=Vba(d|0,m|0,1-e|0)|0;f=D}else f=m&1048575|1048576;if(!j){g=Vba(n|0,o|0,12)|0;i=D;if((i|0)>-1|(i|0)==-1&g>>>0>4294967295){j=0;do{j=j+-1|0;g=Vba(g|0,i|0,1)|0;i=D}while((i|0)>-1|(i|0)==-1&g>>>0>4294967295)}else j=0;n=Vba(n|0,o|0,1-j|0)|0;m=D}else m=o&1048575|1048576;l=Pba(d|0,f|0,n|0,m|0)|0;i=D;g=(i|0)>-1|(i|0)==-1&l>>>0>4294967295;b:do if((e|0)>(j|0)){while(1){if(g)if((d|0)==(n|0)&(f|0)==(m|0))break;else{d=l;f=i}d=Vba(d|0,f|0,1)|0;f=D;e=e+-1|0;l=Pba(d|0,f|0,n|0,m|0)|0;i=D;g=(i|0)>-1|(i|0)==-1&l>>>0>4294967295;if((e|0)<=(j|0))break b}b=a*0.0;break a}while(0);if(g)if((d|0)==(n|0)&(f|0)==(m|0)){b=a*0.0;break}else{f=i;d=l}if(f>>>0<1048576|(f|0)==1048576&d>>>0<0)do{d=Vba(d|0,f|0,1)|0;f=D;e=e+-1|0}while(f>>>0<1048576|(f|0)==1048576&d>>>0<0);if((e|0)>0){o=Tba(d|0,f|0,0,-1048576)|0;d=D;e=Vba(e|0,0,52)|0;d=d|D;e=o|e}else{e=Uba(d|0,f|0,1-e|0)|0;d=D}c[k>>2]=e;c[k+4>>2]=d|p;b=+h[k>>3]}else q=3;while(0);if((q|0)==3){b=a*b;b=b/b}return +b}function d0(a,b){a=+a;b=+b;return +(+c0(a,b))}function e0(a,b){a=+a;b=b|0;var d=0,e=0,f=0;h[k>>3]=a;d=c[k>>2]|0;e=c[k+4>>2]|0;f=Uba(d|0,e|0,52)|0;f=f&2047;switch(f|0){case 0:{if(a!=0.0){a=+e0(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+-1022;c[k>>2]=d;c[k+4>>2]=e&-2146435073|1071644672;a=+h[k>>3]}}return +a}function f0(a,b){a=+a;b=b|0;return +(+e0(a,b))}function g0(a,b){a=+a;b=b|0;var d=0;if((b|0)>1023){a=a*8988465674311579538646525.0e283;d=b+-1023|0;if((d|0)>1023){d=b+-2046|0;d=(d|0)>1023?1023:d;a=a*8988465674311579538646525.0e283}}else if((b|0)<-1022){a=a*2.2250738585072014e-308;d=b+1022|0;if((d|0)<-1022){d=b+2044|0;d=(d|0)<-1022?-1022:d;a=a*2.2250738585072014e-308}}else d=b;d=Vba(d+1023|0,0,52)|0;b=D;c[k>>2]=d;c[k+4>>2]=b;return +(a*+h[k>>3])}function h0(a,b){a=+a;b=b|0;return +(+g0(a,b))}function i0(a,b,c){a=a|0;b=b|0;c=c|0;return j0(0,a,b,(c|0)!=0?c:47832)|0}function j0(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,j=0,k=0,l=0,m=0;l=i;i=i+16|0;g=l;j=(f|0)==0?47836:f;f=c[j>>2]|0;a:do if(!d)if(!f)f=0;else k=15;else{h=(b|0)==0?g:b;if(!e)f=-2;else{if(!f){f=a[d>>0]|0;g=f&255;if(f<<24>>24>-1){c[h>>2]=g;f=f<<24>>24!=0&1;break}f=g+-194|0;if(f>>>0>50){k=15;break}f=c[47564+(f<<2)>>2]|0;g=e+-1|0;if(g){d=d+1|0;k=9}}else{g=e;k=9}b:do if((k|0)==9){b=a[d>>0]|0;m=(b&255)>>>3;if((m+-16|m+(f>>26))>>>0>7){k=15;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){k=15;break a}}c[j>>2]=0;c[h>>2]=f;f=e-g|0;break a}while(0);c[j>>2]=f;f=-2}}while(0);if((k|0)==15){c[j>>2]=0;c[(M$()|0)>>2]=84;f=-1}i=l;return f|0}function k0(a){a=a|0;if(!a)a=1;else a=(c[a>>2]|0)==0;return a&1|0}function l0(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0;o=i;i=i+1040|0;l=o+8|0;n=o;k=c[b>>2]|0;c[n>>2]=k;m=(a|0)!=0;e=m?e:256;a=m?a:l;g=k;a:do if((e|0)!=0&(k|0)!=0){j=e;k=g;e=0;while(1){g=d>>>2;h=g>>>0>=j>>>0;if(!(d>>>0>131|h)){g=k;break a}g=h?j:g;d=d-g|0;g=m0(a,n,g,f)|0;if((g|0)==-1){e=d;break}p=(a|0)==(l|0);k=p?0:g;h=j-k|0;a=p?a:a+(g<<2)|0;e=g+e|0;g=c[n>>2]|0;if((j|0)!=(k|0)&(g|0)!=0){j=h;k=g}else{j=h;break a}}d=e;j=0;g=c[n>>2]|0;e=-1}else{j=e;e=0}while(0);b:do if((g|0)!=0?(j|0)!=0&(d|0)!=0:0){h=g;g=a;while(1){a=j0(g,h,d,f)|0;if((a+2|0)>>>0<3)break;h=(c[n>>2]|0)+a|0;c[n>>2]=h;j=j+-1|0;e=e+1|0;if(!((j|0)!=0&(d|0)!=(a|0)))break b;else{d=d-a|0;g=g+4|0}}switch(a|0){case -1:{e=-1;break b}case 0:{c[n>>2]=0;break b}default:{c[f>>2]=0;break b}}}while(0);if(m)c[b>>2]=c[n>>2];i=o;return e|0}function m0(b,e,f,g){b=b|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,l=0,m=0;h=c[e>>2]|0;if((g|0)!=0?(i=c[g>>2]|0,(i|0)!=0):0)if(!b){g=f;j=h;m=16}else{c[g>>2]=0;l=b;g=f;k=i;m=37}else if(!b){g=f;m=7}else{i=b;g=f;m=6}a:while(1)if((m|0)==6){if(!g){m=26;break}else b=i;while(1){i=a[h>>0]|0;do if(((i&255)+-1|0)>>>0<127?g>>>0>4&(h&3|0)==0:0){j=h;while(1){h=c[j>>2]|0;if((h+-16843009|h)&-2139062144){i=h;h=j;m=32;break}c[b>>2]=h&255;c[b+4>>2]=d[j+1>>0];c[b+8>>2]=d[j+2>>0];h=j+4|0;i=b+16|0;c[b+12>>2]=d[j+3>>0];g=g+-4|0;if(g>>>0>4){b=i;j=h}else{m=31;break}}if((m|0)==31){b=i;i=a[h>>0]|0;break}else if((m|0)==32){i=i&255;break}}while(0);i=i&255;if((i+-1|0)>>>0>=127)break;h=h+1|0;c[b>>2]=i;g=g+-1|0;if(!g){m=26;break a}else b=b+4|0}i=i+-194|0;if(i>>>0>50){m=48;break}l=b;k=c[47564+(i<<2)>>2]|0;h=h+1|0;m=37;continue}else if((m|0)==7){i=a[h>>0]|0;if(((i&255)+-1|0)>>>0<127?(h&3|0)==0:0){i=c[h>>2]|0;if(!((i+-16843009|i)&-2139062144))do{h=h+4|0;g=g+-4|0;i=c[h>>2]|0}while(((i+-16843009|i)&-2139062144|0)==0);i=i&255}i=i&255;if((i+-1|0)>>>0<127){g=g+-1|0;h=h+1|0;m=7;continue}i=i+-194|0;if(i>>>0>50){m=48;break}i=c[47564+(i<<2)>>2]|0;j=h+1|0;m=16;continue}else if((m|0)==16){m=(d[j>>0]|0)>>>3;if((m+-16|m+(i>>26))>>>0>7){m=17;break}h=j+1|0;if(i&33554432){if((a[h>>0]&-64)<<24>>24!=-128){m=20;break}h=j+2|0;if(i&524288){if((a[h>>0]&-64)<<24>>24!=-128){m=23;break}h=j+3|0}}g=g+-1|0;m=7;continue}else if((m|0)==37){i=d[h>>0]|0;m=i>>>3;if((m+-16|m+(k>>26))>>>0>7){m=38;break}j=h+1|0;b=i+-128|k<<6;if((b|0)<0){i=d[j>>0]|0;if((i&192|0)!=128){m=41;break}j=h+2|0;b=i+-128|b<<6;if((b|0)<0){i=d[j>>0]|0;if((i&192|0)!=128){m=44;break}b=i+-128|b<<6;h=h+3|0}else h=j}else h=j;c[l>>2]=b;i=l+4|0;g=g+-1|0;m=6;continue}if((m|0)==17){h=j+-1|0;m=47}else if((m|0)==20){h=j+-1|0;m=47}else if((m|0)==23){h=j+-1|0;m=47}else if((m|0)==26)c[e>>2]=h;else if((m|0)==38){b=l;i=k;h=h+-1|0;m=47}else if((m|0)==41){g=l;f=h+-1|0;m=52}else if((m|0)==44){g=l;f=h+-1|0;m=52}if((m|0)==47)if(!i)m=48;else{g=b;f=h;m=52}if((m|0)==48)if(!(a[h>>0]|0)){if(b){c[b>>2]=0;c[e>>2]=0}f=f-g|0}else{g=b;f=h;m=52}if((m|0)==52){c[(M$()|0)>>2]=84;if(!g)f=-1;else{c[e>>2]=f;f=-1}}return f|0}function n0(b,e,f){b=b|0;e=e|0;f=f|0;var g=0,h=0,j=0,k=0;k=i;i=i+16|0;g=k;a:do if(!e)g=0;else{do if(f){j=(b|0)==0?g:b;g=a[e>>0]|0;b=g&255;if(g<<24>>24>-1){c[j>>2]=b;g=g<<24>>24!=0&1;break a}g=b+-194|0;if(g>>>0<=50){b=e+1|0;h=c[47564+(g<<2)>>2]|0;if(f>>>0<4?(h&-2147483648>>>((f*6|0)+-6|0)|0)!=0:0)break;g=d[b>>0]|0;f=g>>>3;if((f+-16|f+(h>>26))>>>0<=7){g=g+-128|h<<6;if((g|0)>=0){c[j>>2]=g;g=2;break a}b=d[e+2>>0]|0;if((b&192|0)==128){b=b+-128|g<<6;if((b|0)>=0){c[j>>2]=b;g=3;break a}g=d[e+3>>0]|0;if((g&192|0)==128){c[j>>2]=g+-128|b<<6;g=4;break a}}}}}while(0);c[(M$()|0)>>2]=84;g=-1}while(0);i=k;return g|0}function o0(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(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[(M$()|0)>>2]=84;b=-1;break}}else b=1;while(0);return b|0}function p0(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0;m=i;i=i+272|0;j=m+8|0;l=m;h=c[b>>2]|0;c[l>>2]=h;k=(a|0)!=0;f=k?e:256;e=k?a:j;a=h;a:do if((f|0)!=0&(h|0)!=0){h=f;g=a;f=0;while(1){a=d>>>0>=h>>>0;if(!(a|d>>>0>32)){a=g;break a}a=a?h:d;d=d-a|0;a=q0(e,l,a,0)|0;if((a|0)==-1){f=d;break}o=(e|0)==(j|0);n=o?0:a;g=h-n|0;e=o?e:e+a|0;f=a+f|0;a=c[l>>2]|0;if((h|0)!=(n|0)&(a|0)!=0){h=g;g=a}else{h=g;break a}}d=f;h=0;a=c[l>>2]|0;f=-1}else{h=f;f=0}while(0);b:do if((a|0)!=0?(h|0)!=0&(d|0)!=0:0){g=a;a=e;while(1){e=o0(a,c[g>>2]|0,0)|0;if((e+1|0)>>>0<2)break;g=(c[l>>2]|0)+4|0;c[l>>2]=g;d=d+-1|0;f=f+1|0;if(!((h|0)!=(e|0)&(d|0)!=0))break b;else{h=h-e|0;a=a+e|0}}if(!e)c[l>>2]=0;else f=-1}while(0);if(k)c[b>>2]=c[l>>2];i=m;return f|0}function q0(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,j=0,k=0;k=i;i=i+16|0;j=k;a:do if(!b){b=c[d>>2]|0;f=c[b>>2]|0;if(!f)e=0;else{e=0;do{if(f>>>0>127){f=o0(j,f,0)|0;if((f|0)==-1){e=-1;break a}}else f=1;e=f+e|0;b=b+4|0;f=c[b>>2]|0}while((f|0)!=0)}}else{b:do if(e>>>0>3){f=e;g=c[d>>2]|0;while(1){h=c[g>>2]|0;if((h+-1|0)>>>0>126){if(!h)break;h=o0(b,h,0)|0;if((h|0)==-1){e=-1;break a}b=b+h|0;f=f-h|0}else{a[b>>0]=h;b=b+1|0;f=f+-1|0;g=c[d>>2]|0}g=g+4|0;c[d>>2]=g;if(f>>>0<=3)break b}a[b>>0]=0;c[d>>2]=0;e=e-f|0;break a}else f=e;while(0);if(f){g=c[d>>2]|0;while(1){h=c[g>>2]|0;if((h+-1|0)>>>0>126){if(!h){g=19;break}h=o0(j,h,0)|0;if((h|0)==-1){e=-1;break a}if(f>>>0>>0){g=22;break}o0(b,c[g>>2]|0,0)|0;b=b+h|0;f=f-h|0}else{a[b>>0]=h;b=b+1|0;f=f+-1|0;g=c[d>>2]|0}g=g+4|0;c[d>>2]=g;if(!f)break a}if((g|0)==19){a[b>>0]=0;c[d>>2]=0;e=e-f|0;break}else if((g|0)==22){e=e-f|0;break}}}while(0);i=k;return e|0}function r0(a,b){a=a|0;b=b|0;if(!a)a=0;else a=o0(a,b,0)|0;return a|0}function s0(a){a=a|0;return 0}function t0(a){a=a|0;return}function u0(b,e){b=b|0;e=e|0;var f=0,g=0,h=0,j=0,k=0,l=0,m=0;m=i;i=i+16|0;l=m;k=e&255;a[l>>0]=k;g=b+16|0;h=c[g>>2]|0;if(!h)if(!(C0(b)|0)){h=c[g>>2]|0;j=4}else f=-1;else j=4;do if((j|0)==4){g=b+20|0;j=c[g>>2]|0;if(j>>>0>>0?(f=e&255,(f|0)!=(a[b+75>>0]|0)):0){c[g>>2]=j+1;a[j>>0]=k;break}if((tc[c[b+36>>2]&63](b,l,1)|0)==1)f=d[l>>0]|0;else f=-1}while(0);i=m;return f|0}function v0(a){a=a|0;var b=0,d=0;b=i;i=i+16|0;d=b;c[d>>2]=c[a+60>>2];a=S$(kb(6,d|0)|0)|0;i=b;return a|0}function w0(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0;m=i;i=i+48|0;h=m+16|0;g=m;f=m+32|0;c[f>>2]=d;j=f+4|0;l=b+48|0;n=c[l>>2]|0;c[j>>2]=e-((n|0)!=0&1);k=b+44|0;c[f+8>>2]=c[k>>2];c[f+12>>2]=n;if(!(c[11880]|0)){c[h>>2]=c[b+60>>2];c[h+4>>2]=f;c[h+8>>2]=2;f=S$(Wa(145,h|0)|0)|0}else{Ua(1492,b|0);c[g>>2]=c[b+60>>2];c[g+4>>2]=f;c[g+8>>2]=2;f=S$(Wa(145,g|0)|0)|0;Ya(0)}if((f|0)>=1){j=c[j>>2]|0;if(f>>>0>j>>>0){h=c[k>>2]|0;g=b+4|0;c[g>>2]=h;c[b+8>>2]=h+(f-j);if(!(c[l>>2]|0))f=e;else{c[g>>2]=h+1;a[d+(e+-1)>>0]=a[h>>0]|0;f=e}}}else{c[b>>2]=c[b>>2]|f&48^16;c[b+8>>2]=0;c[b+4>>2]=0}i=m;return f|0}function x0(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0;f=i;i=i+32|0;g=f;e=f+20|0;c[g>>2]=c[a+60>>2];c[g+4>>2]=0;c[g+8>>2]=b;c[g+12>>2]=e;c[g+16>>2]=d;if((S$(Va(140,g|0)|0)|0)<0){c[e>>2]=-1;a=-1}else a=c[e>>2]|0;i=f;return a|0}function y0(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0;q=i;i=i+48|0;n=q+16|0;m=q;e=q+32|0;o=a+28|0;f=c[o>>2]|0;c[e>>2]=f;p=a+20|0;f=(c[p>>2]|0)-f|0;c[e+4>>2]=f;c[e+8>>2]=b;c[e+12>>2]=d;k=a+60|0;l=a+44|0;b=2;f=f+d|0;while(1){if(!(c[11880]|0)){c[n>>2]=c[k>>2];c[n+4>>2]=e;c[n+8>>2]=b;h=S$(Xa(146,n|0)|0)|0}else{Ua(1493,a|0);c[m>>2]=c[k>>2];c[m+4>>2]=e;c[m+8>>2]=b;h=S$(Xa(146,m|0)|0)|0;Ya(0)}if((f|0)==(h|0)){f=6;break}if((h|0)<0){f=8;break}f=f-h|0;g=c[e+4>>2]|0;if(h>>>0<=g>>>0)if((b|0)==2){c[o>>2]=(c[o>>2]|0)+h;j=g;b=2}else j=g;else{j=c[l>>2]|0;c[o>>2]=j;c[p>>2]=j;j=c[e+12>>2]|0;h=h-g|0;e=e+8|0;b=b+-1|0}c[e>>2]=(c[e>>2]|0)+h;c[e+4>>2]=j-h}if((f|0)==6){n=c[l>>2]|0;c[a+16>>2]=n+(c[a+48>>2]|0);a=n;c[o>>2]=a;c[p>>2]=a}else if((f|0)==8){c[a+16>>2]=0;c[o>>2]=0;c[p>>2]=0;c[a>>2]=c[a>>2]|32;if((b|0)==2)d=0;else d=d-(c[e+4>>2]|0)|0}i=q;return d|0}function z0(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0;g=i;i=i+80|0;f=g;c[b+36>>2]=32;if((c[b>>2]&64|0)==0?(c[f>>2]=c[b+60>>2],c[f+4>>2]=21505,c[f+8>>2]=g+12,(sb(54,f|0)|0)!=0):0)a[b+75>>0]=-1;f=y0(b,d,e)|0;i=g;return f|0}function A0(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=b1(g,0,h)|0;f=(f|0)==0?h:f-g|0;d=f>>>0>>0?f:d;Rba(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 B0(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+44|0;if((c[d>>2]|0)>>>0>(c[e>>2]|0)>>>0)tc[c[b+36>>2]&63](b,0,0)|0;c[b+16>>2]=0;c[b+28>>2]=0;c[d>>2]=0;d=c[b>>2]|0;if(d&20)if(!(d&4))d=-1;else{c[b>>2]=d|32;d=-1}else{d=c[e>>2]|0;c[b+8>>2]=d;c[b+4>>2]=d;d=0}return d|0}function C0(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;d=c[b+44>>2]|0;c[b+28>>2]=d;c[b+20>>2]=d;c[b+16>>2]=d+(c[b+48>>2]|0);d=0}else{c[b>>2]=d|32;d=-1}return d|0}function D0(a){a=a|0;var b=0,e=0;e=i;i=i+16|0;b=e;if((c[a+8>>2]|0)==0?(B0(a)|0)!=0:0)b=-1;else if((tc[c[a+32>>2]&63](a,b,1)|0)==1)b=d[b>>0]|0;else b=-1;i=e;return b|0}function E0(a){a=a|0;var b=0;if((c[a+76>>2]|0)>-1){b=(s0(a)|0)==0;c[a>>2]=c[a>>2]&-49;if(!b)t0(a)}else c[a>>2]=c[a>>2]&-49;return}function F0(a){a=a|0;var b=0;if((c[a+76>>2]|0)>-1){b=(s0(a)|0)==0;a=(c[a>>2]|0)>>>5&1}else a=(c[a>>2]|0)>>>5&1;return a|0}function G0(a){a=a|0;var b=0,d=0;do if(a){if((c[a+76>>2]|0)<=-1){b=n1(a)|0;break}d=(s0(a)|0)==0;b=n1(a)|0;if(!d)t0(a)}else{if(!(c[11945]|0))b=0;else b=G0(c[11945]|0)|0;jb(47548);a=c[11886]|0;if(a)do{if((c[a+76>>2]|0)>-1)d=s0(a)|0;else d=0;if((c[a+20>>2]|0)>>>0>(c[a+28>>2]|0)>>>0)b=n1(a)|0|b;if(d)t0(a);a=c[a+56>>2]|0}while((a|0)!=0);bc(47548)}while(0);return b|0}function H0(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;e=i;i=i+16|0;f=e;c[f>>2]=d;d=S0(a,b,f)|0;i=e;return d|0}function I0(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0;if((c[d+76>>2]|0)>=0?(s0(d)|0)!=0:0){if((a[d+75>>0]|0)!=(b|0)?(f=d+20|0,g=c[f>>2]|0,g>>>0<(c[d+16>>2]|0)>>>0):0){c[f>>2]=g+1;a[g>>0]=b;e=b&255}else e=u0(d,b)|0;t0(d)}else i=3;do if((i|0)==3){if((a[d+75>>0]|0)!=(b|0)?(h=d+20|0,e=c[h>>2]|0,e>>>0<(c[d+16>>2]|0)>>>0):0){c[h>>2]=e+1;a[e>>0]=b;e=b&255;break}e=u0(d,b)|0}while(0);return e|0}function J0(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;j=$(e,d)|0;if((c[f+76>>2]|0)>-1)k=s0(f)|0;else k=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;i=(c[f+8>>2]|0)-h|0;if((i|0)>0){i=i>>>0>>0?i:j;Rba(b|0,h|0,i|0)|0;c[g>>2]=h+i;b=b+i|0;g=j-i|0}else g=j;a:do if(!g)l=13;else{i=f+32|0;h=g;while(1){if(B0(f)|0){e=h;break}g=tc[c[i>>2]&63](f,b,h)|0;if((g+1|0)>>>0<2){e=h;break}if((h|0)==(g|0)){l=13;break a}else{b=b+g|0;h=h-g|0}}if(k)t0(f);e=((j-e|0)>>>0)/(d>>>0)|0}while(0);if((l|0)==13)if(k)t0(f);return e|0}function K0(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0;f=e+16|0;g=c[f>>2]|0;if(!g)if(!(C0(e)|0)){g=c[f>>2]|0;h=4}else f=0;else h=4;a:do if((h|0)==4){i=e+20|0;h=c[i>>2]|0;if((g-h|0)>>>0>>0){f=tc[c[e+36>>2]&63](e,b,d)|0;break}b:do if((a[e+75>>0]|0)>-1){f=d;while(1){if(!f){g=h;f=0;break b}g=f+-1|0;if((a[b+g>>0]|0)==10)break;else f=g}if((tc[c[e+36>>2]&63](e,b,f)|0)>>>0>>0)break a;d=d-f|0;b=b+f|0;g=c[i>>2]|0}else{g=h;f=0}while(0);Rba(g|0,b|0,d|0)|0;c[i>>2]=(c[i>>2]|0)+d;f=f+d|0}while(0);return f|0}function L0(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0;f=$(d,b)|0;if((c[e+76>>2]|0)>-1){g=(s0(e)|0)==0;a=K0(a,f,e)|0;if(!g)t0(e)}else a=K0(a,f,e)|0;if((a|0)!=(f|0))d=(a>>>0)/(b>>>0)|0;return d|0}function M0(a){a=a|0;var b=0,e=0,f=0;if((c[a+76>>2]|0)>=0?(s0(a)|0)!=0:0){b=a+4|0;e=c[b>>2]|0;if(e>>>0<(c[a+8>>2]|0)>>>0){c[b>>2]=e+1;b=d[e>>0]|0}else b=D0(a)|0}else f=3;do if((f|0)==3){b=a+4|0;e=c[b>>2]|0;if(e>>>0<(c[a+8>>2]|0)>>>0){c[b>>2]=e+1;b=d[e>>0]|0;break}else{b=D0(a)|0;break}}while(0);return b|0}function N0(a,b){a=a|0;b=b|0;var d=0,e=0;d=i;i=i+16|0;e=d;c[e>>2]=b;b=S0(c[11944]|0,a,e)|0;i=d;return b|0}function O0(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0;f=i;i=i+16|0;g=f;c[g>>2]=e;e=U0(a,b,d,g)|0;i=f;return e|0}function P0(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;e=i;i=i+16|0;f=e;c[f>>2]=d;d=V0(a,b,f)|0;i=e;return d|0}function Q0(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0;do if((b|0)!=-1){if((c[d+76>>2]|0)>-1)g=s0(d)|0;else g=0;if(!((c[d+8>>2]|0)==0?(B0(d)|0)!=0:0))h=6;if((h|0)==6?(e=d+4|0,f=c[e>>2]|0,f>>>0>((c[d+44>>2]|0)+-8|0)>>>0):0){h=f+-1|0;c[e>>2]=h;a[h>>0]=b;c[d>>2]=c[d>>2]&-17;if(!g)break;t0(d);break}if(g){t0(d);b=-1}else b=-1}else b=-1;while(0);return b|0}function R0(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,j=0;j=i;i=i+16|0;e=j;f=w1(240)|0;do if(f){c[e>>2]=c[d>>2];e=U0(f,240,b,e)|0;if(e>>>0<240){b=z1(f,e+1|0)|0;c[a>>2]=(b|0)!=0?b:f;break}x1(f);if((e|0)>=0?(h=e+1|0,g=w1(h)|0,c[a>>2]=g,(g|0)!=0):0)e=U0(g,h,b,d)|0;else e=-1}else e=-1;while(0);i=j;return e|0}function S0(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0;s=i;i=i+224|0;o=s+80|0;r=s+96|0;q=s;p=s+136|0;f=r;g=f+40|0;do{c[f>>2]=0;f=f+4|0}while((f|0)<(g|0));c[o>>2]=c[e>>2];if((o1(0,d,o,q,r)|0)<0)e=-1;else{if((c[b+76>>2]|0)>-1)m=s0(b)|0;else m=0;e=c[b>>2]|0;n=e&32;if((a[b+74>>0]|0)<1)c[b>>2]=e&-33;e=b+48|0;if(!(c[e>>2]|0)){g=b+44|0;h=c[g>>2]|0;c[g>>2]=p;j=b+28|0;c[j>>2]=p;k=b+20|0;c[k>>2]=p;c[e>>2]=80;l=b+16|0;c[l>>2]=p+80;f=o1(b,d,o,q,r)|0;if(h){tc[c[b+36>>2]&63](b,0,0)|0;f=(c[k>>2]|0)==0?-1:f;c[g>>2]=h;c[e>>2]=0;c[l>>2]=0;c[j>>2]=0;c[k>>2]=0}}else f=o1(b,d,o,q,r)|0;e=c[b>>2]|0;c[b>>2]=e|n;if(m)t0(b);e=(e&32|0)==0?f:-1}i=s;return e|0}function T0(e,f,j){e=e|0;f=f|0;j=j|0;var k=0,l=0,m=0,n=0,o=0,p=0.0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0;P=i;i=i+304|0;H=P+16|0;J=P+8|0;I=P+33|0;K=P;y=P+32|0;if((c[e+76>>2]|0)>-1)O=s0(e)|0;else O=0;k=a[f>>0]|0;a:do if(k<<24>>24){L=e+4|0;M=e+100|0;G=e+108|0;z=e+8|0;A=I+10|0;B=I+33|0;C=J+4|0;E=I+46|0;F=I+94|0;m=k;k=0;n=f;s=0;l=0;f=0;b:while(1){c:do if(!(K$(m&255)|0)){m=(a[n>>0]|0)==37;d:do if(m){q=n+1|0;o=a[q>>0]|0;e:do switch(o<<24>>24){case 37:break d;case 42:{x=0;o=n+2|0;break}default:{o=(o&255)+-48|0;if(o>>>0<10?(a[n+2>>0]|0)==36:0){c[H>>2]=c[j>>2];while(1){x=(c[H>>2]|0)+(4-1)&~(4-1);m=c[x>>2]|0;c[H>>2]=x+4;if(o>>>0>1)o=o+-1|0;else break}x=m;o=n+3|0;break e}o=(c[j>>2]|0)+(4-1)&~(4-1);x=c[o>>2]|0;c[j>>2]=o+4;o=q}}while(0);m=a[o>>0]|0;n=m&255;if((n+-48|0)>>>0<10){m=0;while(1){q=(m*10|0)+-48+n|0;o=o+1|0;m=a[o>>0]|0;n=m&255;if((n+-48|0)>>>0>=10)break;else m=q}}else q=0;if(m<<24>>24==109){o=o+1|0;r=a[o>>0]|0;m=(x|0)!=0&1;l=0;f=0}else{r=m;m=0}n=o+1|0;switch(r&255|0){case 104:{w=(a[n>>0]|0)==104;n=w?o+2|0:n;o=w?-2:-1;break}case 108:{w=(a[n>>0]|0)==108;n=w?o+2|0:n;o=w?3:1;break}case 106:{o=3;break}case 116:case 122:{o=1;break}case 76:{o=2;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:{n=o;o=0;break}default:{N=152;break b}}r=d[n>>0]|0;t=(r&47|0)==3;r=t?r|32:r;t=t?1:o;switch(r|0){case 99:{w=s;v=(q|0)<1?1:q;break}case 91:{w=s;v=q;break}case 110:{if(!x){o=s;break c}switch(t|0){case -2:{a[x>>0]=s;o=s;break c}case -1:{b[x>>1]=s;o=s;break c}case 0:{c[x>>2]=s;o=s;break c}case 1:{c[x>>2]=s;o=s;break c}case 3:{o=x;c[o>>2]=s;c[o+4>>2]=((s|0)<0)<<31>>31;o=s;break c}default:{o=s;break c}}}default:{Q$(e,0);do{o=c[L>>2]|0;if(o>>>0<(c[M>>2]|0)>>>0){c[L>>2]=o+1;o=d[o>>0]|0}else o=R$(e)|0}while((K$(o)|0)!=0);o=c[L>>2]|0;if(c[M>>2]|0){o=o+-1|0;c[L>>2]=o}w=(c[G>>2]|0)+s+o-(c[z>>2]|0)|0;v=q}}Q$(e,v);o=c[L>>2]|0;q=c[M>>2]|0;if(o>>>0>>0)c[L>>2]=o+1;else{if((R$(e)|0)<0){N=152;break b}q=c[M>>2]|0}if(q)c[L>>2]=(c[L>>2]|0)+-1;f:do switch(r|0){case 91:case 99:case 115:{u=(r|0)==99;g:do if((r&239|0)==99){Qba(I|0,-1,257)|0;a[I>>0]=0;if((r|0)==115){a[B>>0]=0;a[A>>0]=0;a[A+1>>0]=0;a[A+2>>0]=0;a[A+3>>0]=0;a[A+4>>0]=0}}else{Q=n+1|0;s=(a[Q>>0]|0)==94;o=s&1;r=s?Q:n;n=s?n+2|0:Q;Qba(I|0,s&1|0,257)|0;a[I>>0]=0;switch(a[n>>0]|0){case 45:{s=(o^1)&255;a[E>>0]=s;n=r+2|0;break}case 93:{s=(o^1)&255;a[F>>0]=s;n=r+2|0;break}default:s=(o^1)&255}while(1){o=a[n>>0]|0;h:do switch(o<<24>>24){case 0:{N=152;break b}case 93:break g;case 45:{r=n+1|0;o=a[r>>0]|0;switch(o<<24>>24){case 93:case 0:{o=45;break h}default:{}}n=a[n+-1>>0]|0;if((n&255)<(o&255)){n=n&255;do{n=n+1|0;a[I+n>>0]=s;o=a[r>>0]|0}while((n|0)<(o&255|0));n=r}else n=r;break}default:{}}while(0);a[I+((o&255)+1)>>0]=s;n=n+1|0}}while(0);r=u?v+1|0:31;s=(t|0)==1;t=(m|0)!=0;i:do if(s){if(t){f=w1(r<<2)|0;if(!f){l=0;N=152;break b}}else f=x;c[J>>2]=0;c[C>>2]=0;l=0;j:while(1){q=(f|0)==0;do{k:while(1){o=c[L>>2]|0;if(o>>>0<(c[M>>2]|0)>>>0){c[L>>2]=o+1;o=d[o>>0]|0}else o=R$(e)|0;if(!(a[I+(o+1)>>0]|0))break j;a[y>>0]=o;switch(j0(K,y,1,J)|0){case -1:{l=0;N=152;break b}case -2:break;default:break k}}if(!q){c[f+(l<<2)>>2]=c[K>>2];l=l+1|0}}while(!(t&(l|0)==(r|0)));l=r<<1|1;o=z1(f,l<<2)|0;if(!o){l=0;N=152;break b}Q=r;r=l;f=o;l=Q}if(!(k0(J)|0)){l=0;N=152;break b}else{q=l;l=0}}else{if(t){l=w1(r)|0;if(!l){l=0;f=0;N=152;break b}else o=0;while(1){do{f=c[L>>2]|0;if(f>>>0<(c[M>>2]|0)>>>0){c[L>>2]=f+1;f=d[f>>0]|0}else f=R$(e)|0;if(!(a[I+(f+1)>>0]|0)){q=o;f=0;break i}a[l+o>>0]=f;o=o+1|0}while((o|0)!=(r|0));f=r<<1|1;o=z1(l,f)|0;if(!o){f=0;N=152;break b}else{Q=r;r=f;l=o;o=Q}}}if(!x){l=q;while(1){f=c[L>>2]|0;if(f>>>0>>0){c[L>>2]=f+1;f=d[f>>0]|0}else f=R$(e)|0;if(!(a[I+(f+1)>>0]|0)){q=0;l=0;f=0;break i}l=c[M>>2]|0}}else{l=0;while(1){f=c[L>>2]|0;if(f>>>0>>0){c[L>>2]=f+1;f=d[f>>0]|0}else f=R$(e)|0;if(!(a[I+(f+1)>>0]|0)){q=l;l=x;f=0;break i}a[x+l>>0]=f;q=c[M>>2]|0;l=l+1|0}}}while(0);o=c[L>>2]|0;if(c[M>>2]|0){o=o+-1|0;c[L>>2]=o}o=o-(c[z>>2]|0)+(c[G>>2]|0)|0;if(!o)break b;if(!((o|0)==(v|0)|u^1))break b;do if(t)if(s){c[x>>2]=f;break}else{c[x>>2]=l;break}while(0);if(!u){if(f)c[f+(q<<2)>>2]=0;if(!l){l=0;break f}a[l+q>>0]=0}break}case 120:case 88:case 112:{o=16;N=134;break}case 111:{o=8;N=134;break}case 117:case 100:{o=10;N=134;break}case 105:{o=0;N=134;break}case 71:case 103:case 70:case 102:case 69:case 101:case 65:case 97:{p=+O$(e,t,0);if((c[G>>2]|0)==((c[z>>2]|0)-(c[L>>2]|0)|0))break b;if(x)switch(t|0){case 0:{g[x>>2]=p;break f}case 1:{h[x>>3]=p;break f}case 2:{h[x>>3]=p;break f}default:break f}break}default:{}}while(0);l:do if((N|0)==134){N=0;o=P$(e,o,0,-1,-1)|0;if((c[G>>2]|0)==((c[z>>2]|0)-(c[L>>2]|0)|0))break b;if((x|0)!=0&(r|0)==112){c[x>>2]=o;break}if(x)switch(t|0){case -2:{a[x>>0]=o;break l}case -1:{b[x>>1]=o;break l}case 0:{c[x>>2]=o;break l}case 1:{c[x>>2]=o;break l}case 3:{Q=x;c[Q>>2]=o;c[Q+4>>2]=D;break l}default:break l}}while(0);k=((x|0)!=0&1)+k|0;o=(c[G>>2]|0)+w+(c[L>>2]|0)-(c[z>>2]|0)|0;break c}while(0);n=n+(m&1)|0;Q$(e,0);m=c[L>>2]|0;if(m>>>0<(c[M>>2]|0)>>>0){c[L>>2]=m+1;m=d[m>>0]|0}else m=R$(e)|0;if((m|0)!=(d[n>>0]|0)){N=21;break b}o=s+1|0}else{while(1){m=n+1|0;if(!(K$(d[m>>0]|0)|0))break;else n=m}Q$(e,0);do{m=c[L>>2]|0;if(m>>>0<(c[M>>2]|0)>>>0){c[L>>2]=m+1;m=d[m>>0]|0}else m=R$(e)|0}while((K$(m)|0)!=0);m=c[L>>2]|0;if(c[M>>2]|0){m=m+-1|0;c[L>>2]=m}o=(c[G>>2]|0)+s+m-(c[z>>2]|0)|0}while(0);n=n+1|0;m=a[n>>0]|0;if(!(m<<24>>24))break a;else s=o}if((N|0)==21){if(c[M>>2]|0)c[L>>2]=(c[L>>2]|0)+-1;if((k|0)!=0|(m|0)>-1)break;else{k=0;N=153}}else if((N|0)==152)if(!k){k=m;N=153}if((N|0)==153){m=k;k=-1}if(m){x1(l);x1(f)}}else k=0;while(0);if(O)t0(e);i=P;return k|0}function U0(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,j=0,k=0,l=0,m=0,n=0;n=i;i=i+128|0;g=n+112|0;m=n;h=m;j=47840;k=h+112|0;do{c[h>>2]=c[j>>2];h=h+4|0;j=j+4|0}while((h|0)<(k|0));if((d+-1|0)>>>0>2147483646)if(!d){d=1;l=4}else{c[(M$()|0)>>2]=75;d=-1}else{g=b;l=4}if((l|0)==4){l=-2-g|0;l=d>>>0>l>>>0?l:d;c[m+48>>2]=l;b=m+20|0;c[b>>2]=g;c[m+44>>2]=g;d=g+l|0;g=m+16|0;c[g>>2]=d;c[m+28>>2]=d;d=S0(m,e,f)|0;if(l){e=c[b>>2]|0;a[e+(((e|0)==(c[g>>2]|0))<<31>>31)>>0]=0}}i=n;return d|0}function V0(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0;g=i;i=i+112|0;e=g;f=e;h=f+112|0;do{c[f>>2]=0;f=f+4|0}while((f|0)<(h|0));c[e+32>>2]=55;c[e+44>>2]=a;c[e+76>>2]=-1;c[e+84>>2]=a;h=T0(e,b,d)|0;i=g;return h|0}function W0(a){a=a|0;return +(+Z0(a,0))}function X0(b){b=b|0;var c=0,d=0,e=0,f=0;while(1){c=b+1|0;if(!(K$(a[b>>0]|0)|0))break;else b=c}d=a[b>>0]|0;switch(d<<24>>24|0){case 45:{e=1;f=5;break}case 43:{e=0;f=5;break}default:e=0}if((f|0)==5){b=c;d=a[c>>0]|0}c=(d<<24>>24)+-48|0;if(c>>>0<10){d=b;b=0;do{d=d+1|0;b=(b*10|0)-c|0;c=(a[d>>0]|0)+-48|0}while(c>>>0<10)}else b=0;return ((e|0)!=0?b:0-b|0)|0}function Y0(b){b=b|0;var c=0,d=0,e=0,f=0;while(1){c=b+1|0;if(!(K$(a[b>>0]|0)|0))break;else b=c}d=a[b>>0]|0;switch(d<<24>>24|0){case 45:{e=1;f=5;break}case 43:{e=0;f=5;break}default:e=0}if((f|0)==5){b=c;d=a[c>>0]|0}c=(d<<24>>24)+-48|0;if(c>>>0<10){d=b;b=0;do{d=d+1|0;b=(b*10|0)-c|0;c=(a[d>>0]|0)+-48|0}while(c>>>0<10)}else b=0;return ((e|0)!=0?b:0-b|0)|0}function Z0(a,b){a=a|0;b=b|0;return +(+q1(a,b,1))}function _0(a,b,c){a=a|0;b=b|0;c=c|0;return +(+q1(a,b,2))}function $0(a,b,c){a=a|0;b=b|0;c=c|0;a=r1(a,b,c,-1,-1)|0;return a|0}function a1(a,b,c){a=a|0;b=b|0;c=c|0;a=r1(a,b,c,0,-2147483648)|0;return a|0}function b1(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=$(h,16843009)|0;c:do if(e>>>0>3)while(1){h=c[b>>2]^f;if((h&-2139062144^-2139062144)&h+-16843009)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)!=0?b:0)|0}function c1(b,c,d){b=b|0;c=c|0;d=d|0;var e=0,f=0;a:do if(!d)d=0;else{f=d;e=b;while(1){b=a[e>>0]|0;d=a[c>>0]|0;if(b<<24>>24!=d<<24>>24)break;f=f+-1|0;if(!f){d=0;break a}else{e=e+1|0;c=c+1|0}}d=(b&255)-(d&255)|0}while(0);return d|0}function d1(b,c){b=b|0;c=c|0;var d=0,e=0;e=a[b>>0]|0;d=a[c>>0]|0;if(e<<24>>24==0?1:e<<24>>24!=d<<24>>24)c=e;else{do{b=b+1|0;c=c+1|0;e=a[b>>0]|0;d=a[c>>0]|0}while(!(e<<24>>24==0?1:e<<24>>24!=d<<24>>24));c=e}return (c&255)-(d&255)|0}function e1(a){a=a|0;var b=0,c=0;c=(f1(a)|0)+1|0;b=w1(c)|0;if(!b)b=0;else Rba(b|0,a|0,c|0)|0;return b|0}function f1(b){b=b|0;var d=0,e=0,f=0;f=b;a:do if(!(f&3))e=4;else{d=b;b=f;while(1){if(!(a[d>>0]|0))break a;d=d+1|0;b=d;if(!(b&3)){b=d;e=4;break}}}while(0);if((e|0)==4){while(1){d=c[b>>2]|0;if(!((d&-2139062144^-2139062144)&d+-16843009))b=b+4|0;else break}if((d&255)<<24>>24)do b=b+1|0;while((a[b>>0]|0)!=0)}return b-f|0}function g1(a){a=a|0;var b=0;b=a;while(1)if(!(c[b>>2]|0))break;else b=b+4|0;return b-a>>2|0}function h1(a,b,d){a=a|0;b=b|0;d=d|0;var e=0;if(d){e=a;while(1){d=d+-1|0;c[e>>2]=c[b>>2];if(!d)break;else{b=b+4|0;e=e+4|0}}}return a|0}function i1(a,b,d){a=a|0;b=b|0;d=d|0;var e=0;e=(d|0)==0;if(a-b>>2>>>0>>0){if(!e)do{d=d+-1|0;c[a+(d<<2)>>2]=c[b+(d<<2)>>2]}while((d|0)!=0)}else if(!e){e=b;b=a;while(1){d=d+-1|0;c[b>>2]=c[e>>2];if(!d)break;else{e=e+4|0;b=b+4|0}}}return a|0}function j1(a,b,d){a=a|0;b=b|0;d=d|0;var e=0;if(d){e=a;while(1){d=d+-1|0;c[e>>2]=b;if(!d)break;else e=e+4|0}}return a|0}function k1(a,b){a=a|0;b=b|0;var e=0,f=0,g=0,h=0,i=0,j=0;i=a+4|0;e=c[i>>2]|0;j=a+100|0;if(e>>>0<(c[j>>2]|0)>>>0){c[i>>2]=e+1;e=d[e>>0]|0}else e=R$(a)|0;switch(e|0){case 43:case 45:{f=(e|0)==45&1;e=c[i>>2]|0;if(e>>>0<(c[j>>2]|0)>>>0){c[i>>2]=e+1;e=d[e>>0]|0}else e=R$(a)|0;if((b|0)!=0&(e+-48|0)>>>0>9?(c[j>>2]|0)!=0:0){c[i>>2]=(c[i>>2]|0)+-1;h=f}else h=f;break}default:h=0}if((e+-48|0)>>>0>9)if(!(c[j>>2]|0)){f=-2147483648;e=0}else{c[i>>2]=(c[i>>2]|0)+-1;f=-2147483648;e=0}else{f=0;do{f=e+-48+(f*10|0)|0;e=c[i>>2]|0;if(e>>>0<(c[j>>2]|0)>>>0){c[i>>2]=e+1;e=d[e>>0]|0}else e=R$(a)|0}while((e+-48|0)>>>0<10&(f|0)<214748364);b=((f|0)<0)<<31>>31;if((e+-48|0)>>>0<10){do{b=$ba(f|0,b|0,10,0)|0;f=D;e=Tba(e|0,((e|0)<0)<<31>>31|0,-48,-1)|0;f=Tba(e|0,D|0,b|0,f|0)|0;b=D;e=c[i>>2]|0;if(e>>>0<(c[j>>2]|0)>>>0){c[i>>2]=e+1;e=d[e>>0]|0}else e=R$(a)|0}while((e+-48|0)>>>0<10&((b|0)<21474836|(b|0)==21474836&f>>>0<2061584302));g=f}else g=f;if((e+-48|0)>>>0<10)do{e=c[i>>2]|0;if(e>>>0<(c[j>>2]|0)>>>0){c[i>>2]=e+1;e=d[e>>0]|0}else e=R$(a)|0}while((e+-48|0)>>>0<10);if(c[j>>2]|0)c[i>>2]=(c[i>>2]|0)+-1;a=(h|0)!=0;e=Pba(0,0,g|0,b|0)|0;f=a?D:b;e=a?e:g}D=f;return e|0}function l1(a){a=a|0;if(!(c[a+68>>2]|0))t0(a);return}function m1(a){a=a|0;if(!(c[a+68>>2]|0))t0(a);return}function n1(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0;b=a+20|0;g=a+28|0;if((c[b>>2]|0)>>>0>(c[g>>2]|0)>>>0?(tc[c[a+36>>2]&63](a,0,0)|0,(c[b>>2]|0)==0):0)b=-1;else{h=a+4|0;d=c[h>>2]|0;e=a+8|0;f=c[e>>2]|0;if(d>>>0>>0)tc[c[a+40>>2]&63](a,d-f|0,1)|0;c[a+16>>2]=0;c[g>>2]=0;c[b>>2]=0;c[e>>2]=0;c[h>>2]=0;b=0}return b|0}function o1(e,f,g,j,l){e=e|0;f=f|0;g=g|0;j=j|0;l=l|0;var m=0,n=0,o=0,p=0,q=0.0,r=0,s=0,t=0,u=0,v=0.0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0;ha=i;i=i+624|0;ca=ha+24|0;ea=ha+16|0;da=ha+588|0;Y=ha+576|0;ba=ha;V=ha+536|0;ga=ha+8|0;fa=ha+528|0;M=(e|0)!=0;N=V+40|0;U=N;V=V+39|0;W=ga+4|0;X=Y+12|0;Y=Y+11|0;Z=da;_=X;aa=_-Z|0;O=-2-Z|0;P=_+2|0;Q=ca+288|0;R=da+9|0;S=R;T=da+8|0;m=0;w=f;n=0;f=0;a:while(1){do if((m|0)>-1)if((n|0)>(2147483647-m|0)){c[(M$()|0)>>2]=75;m=-1;break}else{m=n+m|0;break}while(0);n=a[w>>0]|0;if(!(n<<24>>24)){L=245;break}else o=w;b:while(1){switch(n<<24>>24){case 37:{n=o;L=9;break b}case 0:{n=o;break b}default:{}}K=o+1|0;n=a[K>>0]|0;o=K}c:do if((L|0)==9)while(1){L=0;if((a[n+1>>0]|0)!=37)break c;o=o+1|0;n=n+2|0;if((a[n>>0]|0)==37)L=9;else break}while(0);y=o-w|0;if(M?(c[e>>2]&32|0)==0:0)K0(w,y,e)|0;if((o|0)!=(w|0)){w=n;n=y;continue}r=n+1|0;o=a[r>>0]|0;p=(o<<24>>24)+-48|0;if(p>>>0<10){K=(a[n+2>>0]|0)==36;r=K?n+3|0:r;o=a[r>>0]|0;u=K?p:-1;f=K?1:f}else u=-1;n=o<<24>>24;d:do if((n&-32|0)==32){p=0;while(1){if(!(1<>24)+-32|p;r=r+1|0;o=a[r>>0]|0;n=o<<24>>24;if((n&-32|0)!=32){s=p;n=r;break}}}else{s=0;n=r}while(0);do if(o<<24>>24==42){p=n+1|0;o=(a[p>>0]|0)+-48|0;if(o>>>0<10?(a[n+2>>0]|0)==36:0){c[l+(o<<2)>>2]=10;f=1;n=n+3|0;o=c[j+((a[p>>0]|0)+-48<<3)>>2]|0}else{if(f){m=-1;break a}if(!M){x=s;n=p;f=0;K=0;break}f=(c[g>>2]|0)+(4-1)&~(4-1);o=c[f>>2]|0;c[g>>2]=f+4;f=0;n=p}if((o|0)<0){x=s|8192;K=0-o|0}else{x=s;K=o}}else{p=(o<<24>>24)+-48|0;if(p>>>0<10){o=0;do{o=(o*10|0)+p|0;n=n+1|0;p=(a[n>>0]|0)+-48|0}while(p>>>0<10);if((o|0)<0){m=-1;break a}else{x=s;K=o}}else{x=s;K=0}}while(0);e:do if((a[n>>0]|0)==46){p=n+1|0;o=a[p>>0]|0;if(o<<24>>24!=42){r=(o<<24>>24)+-48|0;if(r>>>0<10){n=p;o=0}else{n=p;r=0;break}while(1){o=(o*10|0)+r|0;n=n+1|0;r=(a[n>>0]|0)+-48|0;if(r>>>0>=10){r=o;break e}}}p=n+2|0;o=(a[p>>0]|0)+-48|0;if(o>>>0<10?(a[n+3>>0]|0)==36:0){c[l+(o<<2)>>2]=10;n=n+4|0;r=c[j+((a[p>>0]|0)+-48<<3)>>2]|0;break}if(f){m=-1;break a}if(M){n=(c[g>>2]|0)+(4-1)&~(4-1);r=c[n>>2]|0;c[g>>2]=n+4;n=p}else{n=p;r=0}}else r=-1;while(0);t=0;while(1){o=(a[n>>0]|0)+-65|0;if(o>>>0>57){m=-1;break a}p=n+1|0;o=a[86420+(t*58|0)+o>>0]|0;s=o&255;if((s+-1|0)>>>0<8){n=p;t=s}else{J=p;break}}if(!(o<<24>>24)){m=-1;break}p=(u|0)>-1;do if(o<<24>>24==19)if(p){m=-1;break a}else L=52;else{if(p){c[l+(u<<2)>>2]=s;H=j+(u<<3)|0;I=c[H+4>>2]|0;L=ba;c[L>>2]=c[H>>2];c[L+4>>2]=I;L=52;break}if(!M){m=0;break a}t1(ba,s,g)}while(0);if((L|0)==52?(L=0,!M):0){w=J;n=y;continue}u=a[n>>0]|0;u=(t|0)!=0&(u&15|0)==3?u&-33:u;p=x&-65537;I=(x&8192|0)==0?x:p;f:do switch(u|0){case 110:switch(t|0){case 0:{c[c[ba>>2]>>2]=m;w=J;n=y;continue a}case 1:{c[c[ba>>2]>>2]=m;w=J;n=y;continue a}case 2:{w=c[ba>>2]|0;c[w>>2]=m;c[w+4>>2]=((m|0)<0)<<31>>31;w=J;n=y;continue a}case 3:{b[c[ba>>2]>>1]=m;w=J;n=y;continue a}case 4:{a[c[ba>>2]>>0]=m;w=J;n=y;continue a}case 6:{c[c[ba>>2]>>2]=m;w=J;n=y;continue a}case 7:{w=c[ba>>2]|0;c[w>>2]=m;c[w+4>>2]=((m|0)<0)<<31>>31;w=J;n=y;continue a}default:{w=J;n=y;continue a}}case 112:{t=I|8;r=r>>>0>8?r:8;u=120;L=64;break}case 88:case 120:{t=I;L=64;break}case 111:{p=ba;o=c[p>>2]|0;p=c[p+4>>2]|0;if((o|0)==0&(p|0)==0)n=N;else{n=N;do{n=n+-1|0;a[n>>0]=o&7|48;o=Uba(o|0,p|0,3)|0;p=D}while(!((o|0)==0&(p|0)==0))}if(!(I&8)){o=I;t=0;s=86900;L=77}else{t=U-n+1|0;o=I;r=(r|0)<(t|0)?t:r;t=0;s=86900;L=77}break}case 105:case 100:{o=ba;n=c[o>>2]|0;o=c[o+4>>2]|0;if((o|0)<0){n=Pba(0,0,n|0,o|0)|0;o=D;p=ba;c[p>>2]=n;c[p+4>>2]=o;p=1;s=86900;L=76;break f}if(!(I&2048)){s=I&1;p=s;s=(s|0)==0?86900:86902;L=76}else{p=1;s=86901;L=76}break}case 117:{o=ba;n=c[o>>2]|0;o=c[o+4>>2]|0;p=0;s=86900;L=76;break}case 99:{a[V>>0]=c[ba>>2];w=V;o=1;t=0;u=86900;n=N;break}case 109:{n=N$(c[(M$()|0)>>2]|0)|0;L=82;break}case 115:{n=c[ba>>2]|0;n=(n|0)!=0?n:86910;L=82;break}case 67:{c[ga>>2]=c[ba>>2];c[W>>2]=0;c[ba>>2]=ga;r=-1;L=86;break}case 83:{if(!r){v1(e,32,K,0,I);n=0;L=98}else L=86;break}case 65:case 71:case 70:case 69:case 97:case 103:case 102:case 101:{q=+h[ba>>3];c[ea>>2]=0;h[k>>3]=q;if((c[k+4>>2]|0)>=0)if(!(I&2048)){H=I&1;G=H;H=(H|0)==0?86918:86923}else{G=1;H=86920}else{q=-q;G=1;H=86917}h[k>>3]=q;F=c[k+4>>2]&2146435072;do if(F>>>0<2146435072|(F|0)==2146435072&0<0){v=+f0(q,ea)*2.0;o=v!=0.0;if(o)c[ea>>2]=(c[ea>>2]|0)+-1;C=u|32;if((C|0)==97){w=u&32;y=(w|0)==0?H:H+9|0;x=G|2;n=12-r|0;do if(!(r>>>0>11|(n|0)==0)){q=8.0;do{n=n+-1|0;q=q*16.0}while((n|0)!=0);if((a[y>>0]|0)==45){q=-(q+(-v-q));break}else{q=v+q-q;break}}else q=v;while(0);o=c[ea>>2]|0;n=(o|0)<0?0-o|0:o;n=u1(n,((n|0)<0)<<31>>31,X)|0;if((n|0)==(X|0)){a[Y>>0]=48;n=Y}a[n+-1>>0]=(o>>31&2)+43;t=n+-2|0;a[t>>0]=u+15;s=(r|0)<1;p=(I&8|0)==0;o=da;while(1){H=~~q;n=o+1|0;a[o>>0]=d[86884+H>>0]|w;q=(q-+(H|0))*16.0;do if((n-Z|0)==1){if(p&(s&q==0.0))break;a[n>>0]=46;n=o+2|0}while(0);if(!(q!=0.0))break;else o=n}r=(r|0)!=0&(O+n|0)<(r|0)?P+r-t|0:aa-t+n|0;p=r+x|0;v1(e,32,K,p,I);if(!(c[e>>2]&32))K0(y,x,e)|0;v1(e,48,K,p,I^65536);n=n-Z|0;if(!(c[e>>2]&32))K0(da,n,e)|0;o=_-t|0;v1(e,48,r-(n+o)|0,0,0);if(!(c[e>>2]&32))K0(t,o,e)|0;v1(e,32,K,p,I^8192);n=(p|0)<(K|0)?K:p;break}n=(r|0)<0?6:r;if(o){o=(c[ea>>2]|0)+-28|0;c[ea>>2]=o;q=v*268435456.0}else{q=v;o=c[ea>>2]|0}F=(o|0)<0?ca:Q;E=F;o=F;do{B=~~q>>>0;c[o>>2]=B;o=o+4|0;q=(q-+(B>>>0))*1.0e9}while(q!=0.0);p=o;o=c[ea>>2]|0;if((o|0)>0){s=F;while(1){t=(o|0)>29?29:o;r=p+-4|0;do if(r>>>0>>0)r=s;else{o=0;do{B=Vba(c[r>>2]|0,0,t|0)|0;B=Tba(B|0,D|0,o|0,0)|0;o=D;A=bca(B|0,o|0,1e9,0)|0;c[r>>2]=A;o=aca(B|0,o|0,1e9,0)|0;r=r+-4|0}while(r>>>0>=s>>>0);if(!o){r=s;break}r=s+-4|0;c[r>>2]=o}while(0);while(1){if(p>>>0<=r>>>0)break;o=p+-4|0;if(!(c[o>>2]|0))p=o;else break}o=(c[ea>>2]|0)-t|0;c[ea>>2]=o;if((o|0)>0)s=r;else break}}else r=F;if((o|0)<0){y=((n+25|0)/9|0)+1|0;z=(C|0)==102;w=r;while(1){x=0-o|0;x=(x|0)>9?9:x;do if(w>>>0

>>0){o=(1<>>x;r=0;t=w;do{B=c[t>>2]|0;c[t>>2]=(B>>>x)+r;r=$(B&o,s)|0;t=t+4|0}while(t>>>0

>>0);o=(c[w>>2]|0)==0?w+4|0:w;if(!r){r=o;break}c[p>>2]=r;r=o;p=p+4|0}else r=(c[w>>2]|0)==0?w+4|0:w;while(0);o=z?F:r;p=(p-o>>2|0)>(y|0)?o+(y<<2)|0:p;o=(c[ea>>2]|0)+x|0;c[ea>>2]=o;if((o|0)>=0){w=r;break}else w=r}}else w=r;do if(w>>>0

>>0){o=(E-w>>2)*9|0;s=c[w>>2]|0;if(s>>>0<10)break;else r=10;do{r=r*10|0;o=o+1|0}while(s>>>0>=r>>>0)}else o=0;while(0);A=(C|0)==103;B=(n|0)!=0;r=n-((C|0)!=102?o:0)+((B&A)<<31>>31)|0;if((r|0)<(((p-E>>2)*9|0)+-9|0)){t=r+9216|0;z=(t|0)/9|0;r=F+(z+-1023<<2)|0;t=((t|0)%9|0)+1|0;if((t|0)<9){s=10;do{s=s*10|0;t=t+1|0}while((t|0)!=9)}else s=10;x=c[r>>2]|0;y=(x>>>0)%(s>>>0)|0;if((y|0)==0?(F+(z+-1022<<2)|0)==(p|0):0)s=w;else L=163;do if((L|0)==163){L=0;v=(((x>>>0)/(s>>>0)|0)&1|0)==0?9007199254740992.0:9007199254740994.0;t=(s|0)/2|0;do if(y>>>0>>0)q=.5;else{if((y|0)==(t|0)?(F+(z+-1022<<2)|0)==(p|0):0){q=1.0;break}q=1.5}while(0);do if(G){if((a[H>>0]|0)!=45)break;v=-v;q=-q}while(0);t=x-y|0;c[r>>2]=t;if(!(v+q!=v)){s=w;break}C=t+s|0;c[r>>2]=C;if(C>>>0>999999999){o=w;while(1){s=r+-4|0;c[r>>2]=0;if(s>>>0>>0){o=o+-4|0;c[o>>2]=0}C=(c[s>>2]|0)+1|0;c[s>>2]=C;if(C>>>0>999999999)r=s;else{w=o;r=s;break}}}o=(E-w>>2)*9|0;t=c[w>>2]|0;if(t>>>0<10){s=w;break}else s=10;do{s=s*10|0;o=o+1|0}while(t>>>0>=s>>>0);s=w}while(0);C=r+4|0;w=s;p=p>>>0>C>>>0?C:p}y=0-o|0;while(1){if(p>>>0<=w>>>0){z=0;C=p;break}r=p+-4|0;if(!(c[r>>2]|0))p=r;else{z=1;C=p;break}}do if(A){n=(B&1^1)+n|0;if((n|0)>(o|0)&(o|0)>-5){u=u+-1|0;n=n+-1-o|0}else{u=u+-2|0;n=n+-1|0}p=I&8;if(p)break;do if(z){p=c[C+-4>>2]|0;if(!p){r=9;break}if(!((p>>>0)%10|0)){s=10;r=0}else{r=0;break}do{s=s*10|0;r=r+1|0}while(((p>>>0)%(s>>>0)|0|0)==0)}else r=9;while(0);p=((C-E>>2)*9|0)+-9|0;if((u|32|0)==102){p=p-r|0;p=(p|0)<0?0:p;n=(n|0)<(p|0)?n:p;p=0;break}else{p=p+o-r|0;p=(p|0)<0?0:p;n=(n|0)<(p|0)?n:p;p=0;break}}else p=I&8;while(0);x=n|p;s=(x|0)!=0&1;t=(u|32|0)==102;if(t){o=(o|0)>0?o:0;u=0}else{r=(o|0)<0?y:o;r=u1(r,((r|0)<0)<<31>>31,X)|0;if((_-r|0)<2)do{r=r+-1|0;a[r>>0]=48}while((_-r|0)<2);a[r+-1>>0]=(o>>31&2)+43;E=r+-2|0;a[E>>0]=u;o=_-E|0;u=E}y=G+1+n+s+o|0;v1(e,32,K,y,I);if(!(c[e>>2]&32))K0(H,G,e)|0;v1(e,48,K,y,I^65536);do if(t){r=w>>>0>F>>>0?F:w;o=r;do{p=u1(c[o>>2]|0,0,R)|0;do if((o|0)==(r|0)){if((p|0)!=(R|0))break;a[T>>0]=48;p=T}else{if(p>>>0<=da>>>0)break;do{p=p+-1|0;a[p>>0]=48}while(p>>>0>da>>>0)}while(0);if(!(c[e>>2]&32))K0(p,S-p|0,e)|0;o=o+4|0}while(o>>>0<=F>>>0);do if(x){if(c[e>>2]&32)break;K0(86952,1,e)|0}while(0);if((n|0)>0&o>>>0>>0){p=o;while(1){o=u1(c[p>>2]|0,0,R)|0;if(o>>>0>da>>>0)do{o=o+-1|0;a[o>>0]=48}while(o>>>0>da>>>0);if(!(c[e>>2]&32))K0(o,(n|0)>9?9:n,e)|0;p=p+4|0;o=n+-9|0;if(!((n|0)>9&p>>>0>>0)){n=o;break}else n=o}}v1(e,48,n+9|0,9,0)}else{t=z?C:w+4|0;if((n|0)>-1){s=(p|0)==0;r=w;do{o=u1(c[r>>2]|0,0,R)|0;if((o|0)==(R|0)){a[T>>0]=48;o=T}do if((r|0)==(w|0)){p=o+1|0;if(!(c[e>>2]&32))K0(o,1,e)|0;if(s&(n|0)<1){o=p;break}if(c[e>>2]&32){o=p;break}K0(86952,1,e)|0;o=p}else{if(o>>>0<=da>>>0)break;do{o=o+-1|0;a[o>>0]=48}while(o>>>0>da>>>0)}while(0);p=S-o|0;if(!(c[e>>2]&32))K0(o,(n|0)>(p|0)?p:n,e)|0;n=n-p|0;r=r+4|0}while(r>>>0>>0&(n|0)>-1)}v1(e,48,n+18|0,18,0);if(c[e>>2]&32)break;K0(u,_-u|0,e)|0}while(0);v1(e,32,K,y,I^8192);n=(y|0)<(K|0)?K:y}else{t=(u&32|0)!=0;s=q!=q|0.0!=0.0;o=s?0:G;r=o+3|0;v1(e,32,K,r,p);n=c[e>>2]|0;if(!(n&32)){K0(H,o,e)|0;n=c[e>>2]|0}if(!(n&32))K0(s?(t?86944:86948):t?86936:86940,3,e)|0;v1(e,32,K,r,I^8192);n=(r|0)<(K|0)?K:r}while(0);w=J;continue a}default:{p=I;o=r;t=0;u=86900;n=N}}while(0);g:do if((L|0)==64){p=ba;o=c[p>>2]|0;p=c[p+4>>2]|0;s=u&32;if(!((o|0)==0&(p|0)==0)){n=N;do{n=n+-1|0;a[n>>0]=d[86884+(o&15)>>0]|s;o=Uba(o|0,p|0,4)|0;p=D}while(!((o|0)==0&(p|0)==0));L=ba;if((t&8|0)==0|(c[L>>2]|0)==0&(c[L+4>>2]|0)==0){o=t;t=0;s=86900;L=77}else{o=t;t=2;s=86900+(u>>4)|0;L=77}}else{n=N;o=t;t=0;s=86900;L=77}}else if((L|0)==76){n=u1(n,o,N)|0;o=I;t=p;L=77}else if((L|0)==82){L=0;I=b1(n,0,r)|0;H=(I|0)==0;w=n;o=H?r:I-n|0;t=0;u=86900;n=H?n+r|0:I}else if((L|0)==86){L=0;o=0;n=0;s=c[ba>>2]|0;while(1){p=c[s>>2]|0;if(!p)break;n=r0(fa,p)|0;if((n|0)<0|n>>>0>(r-o|0)>>>0)break;o=n+o|0;if(r>>>0>o>>>0)s=s+4|0;else break}if((n|0)<0){m=-1;break a}v1(e,32,K,o,I);if(!o){n=0;L=98}else{p=0;r=c[ba>>2]|0;while(1){n=c[r>>2]|0;if(!n){n=o;L=98;break g}n=r0(fa,n)|0;p=n+p|0;if((p|0)>(o|0)){n=o;L=98;break g}if(!(c[e>>2]&32))K0(fa,n,e)|0;if(p>>>0>=o>>>0){n=o;L=98;break}else r=r+4|0}}}while(0);if((L|0)==98){L=0;v1(e,32,K,n,I^8192);w=J;n=(K|0)>(n|0)?K:n;continue}if((L|0)==77){L=0;p=(r|0)>-1?o&-65537:o;o=ba;o=(c[o>>2]|0)!=0|(c[o+4>>2]|0)!=0;if((r|0)!=0|o){o=(o&1^1)+(U-n)|0;w=n;o=(r|0)>(o|0)?r:o;u=s;n=N}else{w=N;o=0;u=s;n=N}}s=n-w|0;o=(o|0)<(s|0)?s:o;r=t+o|0;n=(K|0)<(r|0)?r:K;v1(e,32,n,r,p);if(!(c[e>>2]&32))K0(u,t,e)|0;v1(e,48,n,r,p^65536);v1(e,48,o,s,0);if(!(c[e>>2]&32))K0(w,s,e)|0;v1(e,32,n,r,p^8192);w=J}h:do if((L|0)==245)if(!e)if(f){m=1;while(1){f=c[l+(m<<2)>>2]|0;if(!f)break;t1(j+(m<<3)|0,f,g);m=m+1|0;if((m|0)>=10){m=1;break h}}if((m|0)<10)while(1){if(c[l+(m<<2)>>2]|0){m=-1;break h}m=m+1|0;if((m|0)>=10){m=1;break}}else m=1}else m=0;while(0);i=ha;return m|0}function p1(a,b,c){a=a|0;b=b|0;c=c|0;return A0(a,b,c)|0}function q1(a,b,d){a=a|0;b=b|0;d=d|0;var e=0.0,f=0,g=0,h=0,j=0;j=i;i=i+112|0;h=j;f=h;g=f+112|0;do{c[f>>2]=0;f=f+4|0}while((f|0)<(g|0));f=h+4|0;c[f>>2]=a;g=h+8|0;c[g>>2]=-1;c[h+44>>2]=a;c[h+76>>2]=-1;Q$(h,0);e=+O$(h,d,1);d=(c[f>>2]|0)-(c[g>>2]|0)+(c[h+108>>2]|0)|0;if(b)c[b>>2]=(d|0)!=0?a+d|0:a;i=j;return +e}function r1(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,j=0,k=0;k=i;i=i+112|0;j=k;c[j>>2]=0;g=j+4|0;c[g>>2]=a;c[j+44>>2]=a;h=j+8|0;c[h>>2]=(a|0)<0?-1:a+2147483647|0;c[j+76>>2]=-1;Q$(j,0);e=P$(j,d,1,e,f)|0;if(b)c[b>>2]=a+((c[g>>2]|0)+(c[j+108>>2]|0)-(c[h>>2]|0));i=k;return e|0}function s1(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;Rba(f|0,b|0,a|0)|0;c[e>>2]=(c[e>>2]|0)+a;return d|0}function t1(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 u1(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=bca(b|0,c|0,10,0)|0;d=d+-1|0;a[d>>0]=e|48;e=aca(b|0,c|0,10,0)|0;if(c>>>0>9|(c|0)==9&b>>>0>4294967295){b=e;c=D}else{b=e;break}}if(b)while(1){d=d+-1|0;a[d>>0]=(b>>>0)%10|0|48;if(b>>>0<10)break;else b=(b>>>0)/10|0}return d|0}function v1(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,j=0;j=i;i=i+256|0;h=j;do if((d|0)>(e|0)&(f&73728|0)==0){f=d-e|0;Qba(h|0,b|0,(f>>>0>256?256:f)|0)|0;b=c[a>>2]|0;g=(b&32|0)==0;if(f>>>0>255){e=d-e|0;do{if(g){K0(h,256,a)|0;b=c[a>>2]|0}f=f+-256|0;g=(b&32|0)==0}while(f>>>0>255);if(g)f=e&255;else break}else if(!g)break;K0(h,f,a)|0}while(0);i=j;return} +function raa(b,d,e,f,g,h){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;var j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0;z=i;i=i+320|0;r=z+208|0;j=z+200|0;y=z+24|0;x=z+12|0;v=z+8|0;w=z+40|0;t=z+4|0;s=z;u=M9(f)|0;W4(y,f,r,j);c[x>>2]=0;c[x+4>>2]=0;c[x+8>>2]=0;if(!(a[x>>0]&1))b=10;else b=(c[x>>2]&-2)+-1|0;s2(x,b,0);o=x+8|0;p=x+1|0;f=(a[x>>0]&1)==0?p:c[o>>2]|0;c[v>>2]=f;c[t>>2]=w;c[s>>2]=0;q=x+4|0;n=c[j>>2]|0;j=c[d>>2]|0;a:while(1){if(j){b=c[j+12>>2]|0;if((b|0)==(c[j+16>>2]|0))b=rc[c[(c[j>>2]|0)+36>>2]&127](j)|0;else b=c[b>>2]|0;if((b|0)==-1){c[d>>2]=0;j=0;l=1}else l=0}else{j=0;l=1}k=c[e>>2]|0;do if(k){b=c[k+12>>2]|0;if((b|0)==(c[k+16>>2]|0))b=rc[c[(c[k>>2]|0)+36>>2]&127](k)|0;else b=c[b>>2]|0;if((b|0)!=-1)if(l){m=k;break}else break a;else{c[e>>2]=0;A=16;break}}else A=16;while(0);if((A|0)==16){A=0;if(l){k=0;break}else m=0}k=a[x>>0]|0;k=(k&1)==0?(k&255)>>>1:c[q>>2]|0;if((c[v>>2]|0)==(f+k|0)){s2(x,k<<1,0);if(!(a[x>>0]&1))b=10;else b=(c[x>>2]&-2)+-1|0;s2(x,b,0);f=(a[x>>0]&1)==0?p:c[o>>2]|0;c[v>>2]=f+k}k=j+12|0;b=c[k>>2]|0;l=j+16|0;if((b|0)==(c[l>>2]|0))b=rc[c[(c[j>>2]|0)+36>>2]&127](j)|0;else b=c[b>>2]|0;if(S4(b,u,f,v,s,n,y,w,t,r)|0){k=m;break}b=c[k>>2]|0;if((b|0)==(c[l>>2]|0)){rc[c[(c[j>>2]|0)+40>>2]&127](j)|0;continue}else{c[k>>2]=b+4;continue}}r=a[y>>0]|0;b=c[t>>2]|0;if((((r&1)==0?(r&255)>>>1:c[y+4>>2]|0)|0)!=0?(b-w|0)<160:0){r=c[s>>2]|0;s=b+4|0;c[t>>2]=s;c[b>>2]=r;b=s}v=Eba(f,c[v>>2]|0,g,u)|0;c[h>>2]=v;c[h+4>>2]=D;B7(y,w,b,g);if(j){b=c[j+12>>2]|0;if((b|0)==(c[j+16>>2]|0))b=rc[c[(c[j>>2]|0)+36>>2]&127](j)|0;else b=c[b>>2]|0;if((b|0)==-1){c[d>>2]=0;f=1}else f=0}else f=1;do if(k){b=c[k+12>>2]|0;if((b|0)==(c[k+16>>2]|0))b=rc[c[(c[k>>2]|0)+36>>2]&127](k)|0;else b=c[b>>2]|0;if((b|0)!=-1)if(f)break;else{A=46;break}else{c[e>>2]=0;A=44;break}}else A=44;while(0);if((A|0)==44?f:0)A=46;if((A|0)==46)c[g>>2]=c[g>>2]|2;A=c[d>>2]|0;o2(x);o2(y);i=z;return A|0}function saa(b,d,e,f,h,j){b=b|0;d=d|0;e=e|0;f=f|0;h=h|0;j=j|0;var k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0;C=i;i=i+352|0;t=C+208|0;k=C+40|0;l=C+36|0;B=C+24|0;A=C+12|0;y=C+8|0;z=C+48|0;w=C+4|0;v=C;x=C+337|0;u=C+336|0;X4(B,f,t,k,l);c[A>>2]=0;c[A+4>>2]=0;c[A+8>>2]=0;if(!(a[A>>0]&1))b=10;else b=(c[A>>2]&-2)+-1|0;s2(A,b,0);q=A+8|0;r=A+1|0;f=(a[A>>0]&1)==0?r:c[q>>2]|0;c[y>>2]=f;c[w>>2]=z;c[v>>2]=0;a[x>>0]=1;a[u>>0]=69;s=A+4|0;p=c[k>>2]|0;o=c[l>>2]|0;k=c[d>>2]|0;a:while(1){if(k){b=c[k+12>>2]|0;if((b|0)==(c[k+16>>2]|0))b=rc[c[(c[k>>2]|0)+36>>2]&127](k)|0;else b=c[b>>2]|0;if((b|0)==-1){c[d>>2]=0;k=0;m=1}else m=0}else{k=0;m=1}l=c[e>>2]|0;do if(l){b=c[l+12>>2]|0;if((b|0)==(c[l+16>>2]|0))b=rc[c[(c[l>>2]|0)+36>>2]&127](l)|0;else b=c[b>>2]|0;if((b|0)!=-1)if(m)break;else break a;else{c[e>>2]=0;D=16;break}}else D=16;while(0);if((D|0)==16){D=0;if(m){l=0;break}else l=0}m=a[A>>0]|0;m=(m&1)==0?(m&255)>>>1:c[s>>2]|0;if((c[y>>2]|0)==(f+m|0)){s2(A,m<<1,0);if(!(a[A>>0]&1))b=10;else b=(c[A>>2]&-2)+-1|0;s2(A,b,0);f=(a[A>>0]&1)==0?r:c[q>>2]|0;c[y>>2]=f+m}m=k+12|0;b=c[m>>2]|0;n=k+16|0;if((b|0)==(c[n>>2]|0))b=rc[c[(c[k>>2]|0)+36>>2]&127](k)|0;else b=c[b>>2]|0;if(Y4(b,x,u,f,y,p,o,B,z,w,v,t)|0)break;b=c[m>>2]|0;if((b|0)==(c[n>>2]|0)){rc[c[(c[k>>2]|0)+40>>2]&127](k)|0;continue}else{c[m>>2]=b+4;continue}}u=a[B>>0]|0;b=c[w>>2]|0;if(!((a[x>>0]|0)==0?1:(((u&1)==0?(u&255)>>>1:c[B+4>>2]|0)|0)==0)?(b-z|0)<160:0){v=c[v>>2]|0;x=b+4|0;c[w>>2]=x;c[b>>2]=v;b=x}g[j>>2]=+Dba(f,c[y>>2]|0,h);B7(B,z,b,h);if(k){b=c[k+12>>2]|0;if((b|0)==(c[k+16>>2]|0))b=rc[c[(c[k>>2]|0)+36>>2]&127](k)|0;else b=c[b>>2]|0;if((b|0)==-1){c[d>>2]=0;f=1}else f=0}else f=1;do if(l){b=c[l+12>>2]|0;if((b|0)==(c[l+16>>2]|0))b=rc[c[(c[l>>2]|0)+36>>2]&127](l)|0;else b=c[b>>2]|0;if((b|0)!=-1)if(f)break;else{D=46;break}else{c[e>>2]=0;D=44;break}}else D=44;while(0);if((D|0)==44?f:0)D=46;if((D|0)==46)c[h>>2]=c[h>>2]|2;D=c[d>>2]|0;o2(A);o2(B);i=C;return D|0}function taa(b,d,e,f,g,j){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;j=j|0;var k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0;C=i;i=i+352|0;t=C+208|0;k=C+40|0;l=C+36|0;B=C+24|0;A=C+12|0;y=C+8|0;z=C+48|0;w=C+4|0;v=C;x=C+337|0;u=C+336|0;X4(B,f,t,k,l);c[A>>2]=0;c[A+4>>2]=0;c[A+8>>2]=0;if(!(a[A>>0]&1))b=10;else b=(c[A>>2]&-2)+-1|0;s2(A,b,0);q=A+8|0;r=A+1|0;f=(a[A>>0]&1)==0?r:c[q>>2]|0;c[y>>2]=f;c[w>>2]=z;c[v>>2]=0;a[x>>0]=1;a[u>>0]=69;s=A+4|0;p=c[k>>2]|0;o=c[l>>2]|0;k=c[d>>2]|0;a:while(1){if(k){b=c[k+12>>2]|0;if((b|0)==(c[k+16>>2]|0))b=rc[c[(c[k>>2]|0)+36>>2]&127](k)|0;else b=c[b>>2]|0;if((b|0)==-1){c[d>>2]=0;k=0;m=1}else m=0}else{k=0;m=1}l=c[e>>2]|0;do if(l){b=c[l+12>>2]|0;if((b|0)==(c[l+16>>2]|0))b=rc[c[(c[l>>2]|0)+36>>2]&127](l)|0;else b=c[b>>2]|0;if((b|0)!=-1)if(m)break;else break a;else{c[e>>2]=0;D=16;break}}else D=16;while(0);if((D|0)==16){D=0;if(m){l=0;break}else l=0}m=a[A>>0]|0;m=(m&1)==0?(m&255)>>>1:c[s>>2]|0;if((c[y>>2]|0)==(f+m|0)){s2(A,m<<1,0);if(!(a[A>>0]&1))b=10;else b=(c[A>>2]&-2)+-1|0;s2(A,b,0);f=(a[A>>0]&1)==0?r:c[q>>2]|0;c[y>>2]=f+m}m=k+12|0;b=c[m>>2]|0;n=k+16|0;if((b|0)==(c[n>>2]|0))b=rc[c[(c[k>>2]|0)+36>>2]&127](k)|0;else b=c[b>>2]|0;if(Y4(b,x,u,f,y,p,o,B,z,w,v,t)|0)break;b=c[m>>2]|0;if((b|0)==(c[n>>2]|0)){rc[c[(c[k>>2]|0)+40>>2]&127](k)|0;continue}else{c[m>>2]=b+4;continue}}u=a[B>>0]|0;b=c[w>>2]|0;if(!((a[x>>0]|0)==0?1:(((u&1)==0?(u&255)>>>1:c[B+4>>2]|0)|0)==0)?(b-z|0)<160:0){v=c[v>>2]|0;x=b+4|0;c[w>>2]=x;c[b>>2]=v;b=x}h[j>>3]=+Cba(f,c[y>>2]|0,g);B7(B,z,b,g);if(k){b=c[k+12>>2]|0;if((b|0)==(c[k+16>>2]|0))b=rc[c[(c[k>>2]|0)+36>>2]&127](k)|0;else b=c[b>>2]|0;if((b|0)==-1){c[d>>2]=0;f=1}else f=0}else f=1;do if(l){b=c[l+12>>2]|0;if((b|0)==(c[l+16>>2]|0))b=rc[c[(c[l>>2]|0)+36>>2]&127](l)|0;else b=c[b>>2]|0;if((b|0)!=-1)if(f)break;else{D=46;break}else{c[e>>2]=0;D=44;break}}else D=44;while(0);if((D|0)==44?f:0)D=46;if((D|0)==46)c[g>>2]=c[g>>2]|2;D=c[d>>2]|0;o2(A);o2(B);i=C;return D|0}function uaa(b,d,e,f,g,j){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;j=j|0;var k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0;C=i;i=i+352|0;t=C+208|0;k=C+40|0;l=C+36|0;B=C+24|0;A=C+12|0;y=C+8|0;z=C+48|0;w=C+4|0;v=C;x=C+337|0;u=C+336|0;X4(B,f,t,k,l);c[A>>2]=0;c[A+4>>2]=0;c[A+8>>2]=0;if(!(a[A>>0]&1))b=10;else b=(c[A>>2]&-2)+-1|0;s2(A,b,0);q=A+8|0;r=A+1|0;f=(a[A>>0]&1)==0?r:c[q>>2]|0;c[y>>2]=f;c[w>>2]=z;c[v>>2]=0;a[x>>0]=1;a[u>>0]=69;s=A+4|0;p=c[k>>2]|0;o=c[l>>2]|0;k=c[d>>2]|0;a:while(1){if(k){b=c[k+12>>2]|0;if((b|0)==(c[k+16>>2]|0))b=rc[c[(c[k>>2]|0)+36>>2]&127](k)|0;else b=c[b>>2]|0;if((b|0)==-1){c[d>>2]=0;k=0;m=1}else m=0}else{k=0;m=1}l=c[e>>2]|0;do if(l){b=c[l+12>>2]|0;if((b|0)==(c[l+16>>2]|0))b=rc[c[(c[l>>2]|0)+36>>2]&127](l)|0;else b=c[b>>2]|0;if((b|0)!=-1)if(m)break;else break a;else{c[e>>2]=0;D=16;break}}else D=16;while(0);if((D|0)==16){D=0;if(m){l=0;break}else l=0}m=a[A>>0]|0;m=(m&1)==0?(m&255)>>>1:c[s>>2]|0;if((c[y>>2]|0)==(f+m|0)){s2(A,m<<1,0);if(!(a[A>>0]&1))b=10;else b=(c[A>>2]&-2)+-1|0;s2(A,b,0);f=(a[A>>0]&1)==0?r:c[q>>2]|0;c[y>>2]=f+m}m=k+12|0;b=c[m>>2]|0;n=k+16|0;if((b|0)==(c[n>>2]|0))b=rc[c[(c[k>>2]|0)+36>>2]&127](k)|0;else b=c[b>>2]|0;if(Y4(b,x,u,f,y,p,o,B,z,w,v,t)|0)break;b=c[m>>2]|0;if((b|0)==(c[n>>2]|0)){rc[c[(c[k>>2]|0)+40>>2]&127](k)|0;continue}else{c[m>>2]=b+4;continue}}u=a[B>>0]|0;b=c[w>>2]|0;if(!((a[x>>0]|0)==0?1:(((u&1)==0?(u&255)>>>1:c[B+4>>2]|0)|0)==0)?(b-z|0)<160:0){v=c[v>>2]|0;x=b+4|0;c[w>>2]=x;c[b>>2]=v;b=x}h[j>>3]=+Bba(f,c[y>>2]|0,g);B7(B,z,b,g);if(k){b=c[k+12>>2]|0;if((b|0)==(c[k+16>>2]|0))b=rc[c[(c[k>>2]|0)+36>>2]&127](k)|0;else b=c[b>>2]|0;if((b|0)==-1){c[d>>2]=0;f=1}else f=0}else f=1;do if(l){b=c[l+12>>2]|0;if((b|0)==(c[l+16>>2]|0))b=rc[c[(c[l>>2]|0)+36>>2]&127](l)|0;else b=c[b>>2]|0;if((b|0)!=-1)if(f)break;else{D=46;break}else{c[e>>2]=0;D=44;break}}else D=44;while(0);if((D|0)==44?f:0)D=46;if((D|0)==46)c[g>>2]=c[g>>2]|2;D=c[d>>2]|0;o2(A);o2(B);i=C;return D|0}function vaa(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0;g=i;i=i+16|0;h=g;c[h>>2]=f;f=$$(d)|0;d=U0(a,b,e,h)|0;if(f)$$(f)|0;i=g;return d|0}function waa(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0;f=i;i=i+16|0;g=f;c[g>>2]=e;e=$$(b)|0;b=R0(a,d,g)|0;if(e)$$(e)|0;i=f;return b|0}function xaa(b,d,e,f,g,h){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;var j=0,k=0,l=0,m=0,n=0,o=0,p=0;o=i;i=i+16|0;n=o;j=c[b>>2]|0;a:do if(!j)j=0;else{p=d;l=f-p>>2;m=g+12|0;g=c[m>>2]|0;l=(g|0)>(l|0)?g-l|0:0;g=e;p=g-p|0;k=p>>2;if((p|0)>0?(tc[c[(c[j>>2]|0)+48>>2]&63](j,d,k)|0)!=(k|0):0){c[b>>2]=0;j=0;break}do if((l|0)>0){D2(n,l,h);if((tc[c[(c[j>>2]|0)+48>>2]&63](j,(a[n>>0]&1)==0?n+4|0:c[n+8>>2]|0,l)|0)==(l|0)){E2(n);break}else{c[b>>2]=0;E2(n);j=0;break a}}while(0);p=f-g|0;f=p>>2;if((p|0)>0?(tc[c[(c[j>>2]|0)+48>>2]&63](j,e,f)|0)!=(f|0):0){c[b>>2]=0;j=0;break}c[m>>2]=0}while(0);i=o;return j|0}function yaa(a,e,f,g,h){a=a|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;i=c[a>>2]|0;do if(i){if((c[i+12>>2]|0)==(c[i+16>>2]|0))if((rc[c[(c[i>>2]|0)+36>>2]&127](i)|0)==-1){c[a>>2]=0;i=0;break}else{i=c[a>>2]|0;break}}else i=0;while(0);j=(i|0)==0;i=c[e>>2]|0;do if(i){if((c[i+12>>2]|0)==(c[i+16>>2]|0)?(rc[c[(c[i>>2]|0)+36>>2]&127](i)|0)==-1:0){c[e>>2]=0;r=11;break}if(j)r=13;else r=12}else r=11;while(0);if((r|0)==11)if(j)r=12;else{i=0;r=13}a:do if((r|0)==12){c[f>>2]=c[f>>2]|6;i=0}else if((r|0)==13){j=c[a>>2]|0;k=c[j+12>>2]|0;if((k|0)==(c[j+16>>2]|0))j=rc[c[(c[j>>2]|0)+36>>2]&127](j)|0;else j=d[k>>0]|0;k=j&255;if(k<<24>>24>-1?(q=g+8|0,(b[(c[q>>2]|0)+(j<<24>>24<<1)>>1]&2048)!=0):0){m=(tc[c[(c[g>>2]|0)+36>>2]&63](g,k,0)|0)<<24>>24;j=c[a>>2]|0;k=j+12|0;l=c[k>>2]|0;if((l|0)==(c[j+16>>2]|0)){rc[c[(c[j>>2]|0)+40>>2]&127](j)|0;o=h;n=i;h=i;i=m}else{c[k>>2]=l+1;o=h;n=i;h=i;i=m}while(1){i=i+-48|0;p=o+-1|0;j=c[a>>2]|0;do if(j){if((c[j+12>>2]|0)==(c[j+16>>2]|0))if((rc[c[(c[j>>2]|0)+36>>2]&127](j)|0)==-1){c[a>>2]=0;j=0;break}else{j=c[a>>2]|0;break}}else j=0;while(0);l=(j|0)==0;if(h)if((c[h+12>>2]|0)==(c[h+16>>2]|0))if((rc[c[(c[h>>2]|0)+36>>2]&127](h)|0)==-1){c[e>>2]=0;k=0;h=0}else{k=n;h=n}else k=n;else{k=n;h=0}j=c[a>>2]|0;if(!((o|0)>1&(l^(h|0)==0)))break;l=c[j+12>>2]|0;if((l|0)==(c[j+16>>2]|0))j=rc[c[(c[j>>2]|0)+36>>2]&127](j)|0;else j=d[l>>0]|0;l=j&255;if(l<<24>>24<=-1)break a;if(!(b[(c[q>>2]|0)+(j<<24>>24<<1)>>1]&2048))break a;i=((tc[c[(c[g>>2]|0)+36>>2]&63](g,l,0)|0)<<24>>24)+(i*10|0)|0;j=c[a>>2]|0;l=j+12|0;m=c[l>>2]|0;if((m|0)==(c[j+16>>2]|0)){rc[c[(c[j>>2]|0)+40>>2]&127](j)|0;o=p;n=k;continue}else{c[l>>2]=m+1;o=p;n=k;continue}}do if(j){if((c[j+12>>2]|0)==(c[j+16>>2]|0))if((rc[c[(c[j>>2]|0)+36>>2]&127](j)|0)==-1){c[a>>2]=0;j=0;break}else{j=c[a>>2]|0;break}}else j=0;while(0);j=(j|0)==0;do if(k){if((c[k+12>>2]|0)==(c[k+16>>2]|0)?(rc[c[(c[k>>2]|0)+36>>2]&127](k)|0)==-1:0){c[e>>2]=0;r=50;break}if(j)break a}else r=50;while(0);if((r|0)==50?!j:0)break;c[f>>2]=c[f>>2]|2;break}c[f>>2]=c[f>>2]|4;i=0}while(0);return i|0}function zaa(a,b,d,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;g=c[a>>2]|0;do if(g){h=c[g+12>>2]|0;if((h|0)==(c[g+16>>2]|0))g=rc[c[(c[g>>2]|0)+36>>2]&127](g)|0;else g=c[h>>2]|0;if((g|0)==-1){c[a>>2]=0;i=1;break}else{i=(c[a>>2]|0)==0;break}}else i=1;while(0);h=c[b>>2]|0;do if(h){g=c[h+12>>2]|0;if((g|0)==(c[h+16>>2]|0))g=rc[c[(c[h>>2]|0)+36>>2]&127](h)|0;else g=c[g>>2]|0;if((g|0)!=-1)if(i){o=17;break}else{o=16;break}else{c[b>>2]=0;o=14;break}}else o=14;while(0);if((o|0)==14)if(i)o=16;else{h=0;o=17}a:do if((o|0)==16){c[d>>2]=c[d>>2]|6;g=0}else if((o|0)==17){g=c[a>>2]|0;i=c[g+12>>2]|0;if((i|0)==(c[g+16>>2]|0))g=rc[c[(c[g>>2]|0)+36>>2]&127](g)|0;else g=c[i>>2]|0;if(!(tc[c[(c[e>>2]|0)+12>>2]&63](e,2048,g)|0)){c[d>>2]=c[d>>2]|4;g=0;break}g=(tc[c[(c[e>>2]|0)+52>>2]&63](e,g,0)|0)<<24>>24;i=c[a>>2]|0;j=i+12|0;k=c[j>>2]|0;if((k|0)==(c[i+16>>2]|0)){rc[c[(c[i>>2]|0)+40>>2]&127](i)|0;m=f;l=h;j=h}else{c[j>>2]=k+4;m=f;l=h;j=h}while(1){g=g+-48|0;n=m+-1|0;h=c[a>>2]|0;do if(h){i=c[h+12>>2]|0;if((i|0)==(c[h+16>>2]|0))h=rc[c[(c[h>>2]|0)+36>>2]&127](h)|0;else h=c[i>>2]|0;if((h|0)==-1){c[a>>2]=0;k=1;break}else{k=(c[a>>2]|0)==0;break}}else k=1;while(0);do if(j){h=c[j+12>>2]|0;if((h|0)==(c[j+16>>2]|0))h=rc[c[(c[j>>2]|0)+36>>2]&127](j)|0;else h=c[h>>2]|0;if((h|0)==-1){c[b>>2]=0;j=0;f=0;h=1;break}else{j=l;f=l;h=(l|0)==0;break}}else{j=l;f=0;h=1}while(0);i=c[a>>2]|0;if(!((m|0)>1&(k^h)))break;h=c[i+12>>2]|0;if((h|0)==(c[i+16>>2]|0))h=rc[c[(c[i>>2]|0)+36>>2]&127](i)|0;else h=c[h>>2]|0;if(!(tc[c[(c[e>>2]|0)+12>>2]&63](e,2048,h)|0))break a;g=((tc[c[(c[e>>2]|0)+52>>2]&63](e,h,0)|0)<<24>>24)+(g*10|0)|0;h=c[a>>2]|0;i=h+12|0;k=c[i>>2]|0;if((k|0)==(c[h+16>>2]|0)){rc[c[(c[h>>2]|0)+40>>2]&127](h)|0;m=n;l=j;j=f;continue}else{c[i>>2]=k+4;m=n;l=j;j=f;continue}}do if(i){h=c[i+12>>2]|0;if((h|0)==(c[i+16>>2]|0))h=rc[c[(c[i>>2]|0)+36>>2]&127](i)|0;else h=c[h>>2]|0;if((h|0)==-1){c[a>>2]=0;i=1;break}else{i=(c[a>>2]|0)==0;break}}else i=1;while(0);do if(j){h=c[j+12>>2]|0;if((h|0)==(c[j+16>>2]|0))h=rc[c[(c[j>>2]|0)+36>>2]&127](j)|0;else h=c[h>>2]|0;if((h|0)!=-1)if(i)break a;else break;else{c[b>>2]=0;o=60;break}}else o=60;while(0);if((o|0)==60?!i:0)break;c[d>>2]=c[d>>2]|2}while(0);return g|0}function Aaa(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0;h=a+4|0;f=(c[h>>2]|0)!=1495;e=c[a>>2]|0;i=e;g=(c[d>>2]|0)-i|0;g=g>>>0<2147483647?g<<1:-1;i=(c[b>>2]|0)-i|0;e=z1(f?e:0,g)|0;if(!e)A$();if(!f){f=c[a>>2]|0;c[a>>2]=e;if(f){oc[c[h>>2]&2047](f);e=c[a>>2]|0}}else c[a>>2]=e;c[h>>2]=1506;c[b>>2]=e+i;c[d>>2]=(c[a>>2]|0)+g;return}function Baa(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0;h=a+4|0;f=(c[h>>2]|0)!=1495;e=c[a>>2]|0;i=e;g=(c[d>>2]|0)-i|0;g=g>>>0<2147483647?g<<1:-1;i=(c[b>>2]|0)-i>>2;e=z1(f?e:0,g)|0;if(!e)A$();if(!f){f=c[a>>2]|0;c[a>>2]=e;if(f){oc[c[h>>2]&2047](f);e=c[a>>2]|0}}else c[a>>2]=e;c[h>>2]=1506;c[b>>2]=e+(i<<2);c[d>>2]=(c[a>>2]|0)+(g>>>2<<2);return}function Caa(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0;h=d;f=a[b>>0]|0;if(!(f&1)){g=10;k=(f&255)>>>1}else{f=c[b>>2]|0;g=(f&-2)+-1|0;k=c[b+4>>2]|0;f=f&255}j=e-h|0;do if((e|0)!=(d|0)){if((g-k|0)>>>0>>0){x2(b,g,k+j-g|0,k,k,0,0);f=a[b>>0]|0}if(!(f&1))i=b+1|0;else i=c[b+8>>2]|0;h=e+(k-h)|0;if((d|0)!=(e|0)){f=d;g=i+k|0;while(1){a[g>>0]=a[f>>0]|0;f=f+1|0;if((f|0)==(e|0))break;else g=g+1|0}}a[i+h>>0]=0;f=k+j|0;if(!(a[b>>0]&1)){a[b>>0]=f<<1;break}else{c[b+4>>2]=f;break}}while(0);return b|0}function Daa(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0;h=a+4|0;f=(c[h>>2]|0)!=1495;e=c[a>>2]|0;i=e;g=(c[d>>2]|0)-i|0;g=g>>>0<2147483647?g<<1:-1;i=(c[b>>2]|0)-i>>2;e=z1(f?e:0,g)|0;if(!e)A$();if(!f){f=c[a>>2]|0;c[a>>2]=e;if(f){oc[c[h>>2]&2047](f);e=c[a>>2]|0}}else c[a>>2]=e;c[h>>2]=1506;c[b>>2]=e+(i<<2);c[d>>2]=(c[a>>2]|0)+(g>>>2<<2);return}function Eaa(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0;h=d;f=a[b>>0]|0;if(!(f&1)){g=1;k=(f&255)>>>1}else{f=c[b>>2]|0;g=(f&-2)+-1|0;k=c[b+4>>2]|0;f=f&255}j=e-h>>2;do if(j){if((g-k|0)>>>0>>0){K2(b,g,k+j-g|0,k,k,0,0);f=a[b>>0]|0}if(!(f&1))i=b+4|0;else i=c[b+8>>2]|0;h=k+((e-h|0)>>>2)|0;if((d|0)!=(e|0)){f=d;g=i+(k<<2)|0;while(1){c[g>>2]=c[f>>2];f=f+4|0;if((f|0)==(e|0))break;else g=g+4|0}}c[i+(h<<2)>>2]=0;f=k+j|0;if(!(a[b>>0]&1)){a[b>>0]=f<<1;break}else{c[b+4>>2]=f;break}}while(0);return b|0}function Faa(b,d){b=b|0;d=d|0;c[b>>2]=0;c[b+4>>2]=0;c[b+8>>2]=0;a[b+128>>0]=0;if(d){Aba(b,d);wba(b,d)}return}function Gaa(a,b){a=a|0;b=b|0;e8(a,b,n8(53480)|0);return}function Haa(a,b){a=a|0;b=b|0;e8(a,b,n8(53520)|0);return}function Iaa(a,b){a=a|0;b=b|0;e8(a,b,n8(54552)|0);return}function Jaa(a,b){a=a|0;b=b|0;e8(a,b,n8(54544)|0);return}function Kaa(a,b){a=a|0;b=b|0;e8(a,b,n8(54612)|0);return}function Laa(a,b){a=a|0;b=b|0;e8(a,b,n8(54620)|0);return}function Maa(a,b){a=a|0;b=b|0;e8(a,b,n8(54676)|0);return}function Naa(a,b){a=a|0;b=b|0;e8(a,b,n8(54684)|0);return}function Oaa(a,b){a=a|0;b=b|0;e8(a,b,n8(54692)|0);return}function Paa(a,b){a=a|0;b=b|0;e8(a,b,n8(54700)|0);return}function Qaa(a,b){a=a|0;b=b|0;e8(a,b,n8(53592)|0);return}function Raa(a,b){a=a|0;b=b|0;e8(a,b,n8(53664)|0);return}function Saa(a,b){a=a|0;b=b|0;e8(a,b,n8(53724)|0);return}function Taa(a,b){a=a|0;b=b|0;e8(a,b,n8(53784)|0);return}function Uaa(a,b){a=a|0;b=b|0;e8(a,b,n8(54096)|0);return}function Vaa(a,b){a=a|0;b=b|0;e8(a,b,n8(54160)|0);return}function Waa(a,b){a=a|0;b=b|0;e8(a,b,n8(54224)|0);return}function Xaa(a,b){a=a|0;b=b|0;e8(a,b,n8(54288)|0);return}function Yaa(a,b){a=a|0;b=b|0;e8(a,b,n8(54324)|0);return}function Zaa(a,b){a=a|0;b=b|0;e8(a,b,n8(54360)|0);return}function _aa(a,b){a=a|0;b=b|0;e8(a,b,n8(54396)|0);return}function $aa(a,b){a=a|0;b=b|0;e8(a,b,n8(54432)|0);return}function aba(a,b){a=a|0;b=b|0;e8(a,b,n8(53876)|0);return}function bba(a,b){a=a|0;b=b|0;e8(a,b,n8(53968)|0);return}function cba(a,b){a=a|0;b=b|0;e8(a,b,n8(54e3)|0);return}function dba(a,b){a=a|0;b=b|0;e8(a,b,n8(54032)|0);return}function eba(a,b){a=a|0;b=b|0;e8(a,b,n8(54472)|0);return}function fba(a,b){a=a|0;b=b|0;e8(a,b,n8(54512)|0);return}function gba(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0;h=a+4|0;d=c[h>>2]|0;e=c[a>>2]|0;f=d-e>>2;if(f>>>0>=b>>>0){if(f>>>0>b>>>0?(g=e+(b<<2)|0,(d|0)!=(g|0)):0){do d=d+-4|0;while((d|0)!=(g|0));c[h>>2]=d}}else vba(a,b-f|0);return}function hba(b){b=b|0;var d=0,e=0,f=0;e=c[b>>2]|0;do if(e){f=b+4|0;d=c[f>>2]|0;if((d|0)!=(e|0)){do d=d+-4|0;while((d|0)!=(e|0));c[f>>2]=d}if((b+16|0)==(e|0)){a[b+128>>0]=0;break}else{P_(e);break}}while(0);return}function iba(a){a=a|0;var b=0,d=0;d=a+4|0;b=c[d>>2]|0;d=c[d+4>>2]|0;a=(c[a>>2]|0)+(d>>1)|0;if(d&1)b=c[(c[a>>2]|0)+b>>2]|0;oc[b&2047](a);return}function jba(d,f,g,h,i,j,k,l){d=d|0;f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;k=k|0;l=l|0;var m=0,n=0;c[g>>2]=d;c[j>>2]=h;if(l&2)if((i-h|0)<3)d=1;else{c[j>>2]=h+1;a[h>>0]=-17;m=c[j>>2]|0;c[j>>2]=m+1;a[m>>0]=-69;m=c[j>>2]|0;c[j>>2]=m+1;a[m>>0]=-65;m=4}else m=4;a:do if((m|0)==4){n=f;d=c[g>>2]|0;if(d>>>0>>0)while(1){l=b[d>>1]|0;m=l&65535;if(m>>>0>k>>>0){d=2;break a}do if((l&65535)<128){d=c[j>>2]|0;if((i-d|0)<1){d=1;break a}c[j>>2]=d+1;a[d>>0]=l}else{if((l&65535)<2048){d=c[j>>2]|0;if((i-d|0)<2){d=1;break a}c[j>>2]=d+1;a[d>>0]=m>>>6|192;h=c[j>>2]|0;c[j>>2]=h+1;a[h>>0]=m&63|128;break}if((l&65535)<55296){d=c[j>>2]|0;if((i-d|0)<3){d=1;break a}c[j>>2]=d+1;a[d>>0]=m>>>12|224;h=c[j>>2]|0;c[j>>2]=h+1;a[h>>0]=m>>>6&63|128;h=c[j>>2]|0;c[j>>2]=h+1;a[h>>0]=m&63|128;break}if((l&65535)>=56320){if((l&65535)<57344){d=2;break a}d=c[j>>2]|0;if((i-d|0)<3){d=1;break a}c[j>>2]=d+1;a[d>>0]=m>>>12|224;h=c[j>>2]|0;c[j>>2]=h+1;a[h>>0]=m>>>6&63|128;h=c[j>>2]|0;c[j>>2]=h+1;a[h>>0]=m&63|128;break}if((n-d|0)<4){d=1;break a}d=d+2|0;l=e[d>>1]|0;if((l&64512|0)!=56320){d=2;break a}if((i-(c[j>>2]|0)|0)<4){d=1;break a}h=m&960;if(((h<<10)+65536|m<<10&64512|l&1023)>>>0>k>>>0){d=2;break a}c[g>>2]=d;d=(h>>>6)+1|0;h=c[j>>2]|0;c[j>>2]=h+1;a[h>>0]=d>>>2|240;h=c[j>>2]|0;c[j>>2]=h+1;a[h>>0]=m>>>2&15|d<<4&48|128;h=c[j>>2]|0;c[j>>2]=h+1;a[h>>0]=m<<4&48|l>>>6&15|128;m=c[j>>2]|0;c[j>>2]=m+1;a[m>>0]=l&63|128}while(0);d=(c[g>>2]|0)+2|0;c[g>>2]=d;if(d>>>0>=f>>>0){d=0;break}}else d=0}while(0);return d|0}function kba(e,f,g,h,i,j,k,l){e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;k=k|0;l=l|0;var m=0,n=0,o=0,p=0,q=0,r=0;c[g>>2]=e;c[j>>2]=h;if(l&4){e=c[g>>2]|0;l=f;if((((l-e|0)>2?(a[e>>0]|0)==-17:0)?(a[e+1>>0]|0)==-69:0)?(a[e+2>>0]|0)==-65:0){c[g>>2]=e+3;m=c[j>>2]|0}else m=h}else{m=h;l=f}q=i;h=c[g>>2]|0;e=h>>>0>>0;a:do if(e&m>>>0>>0)while(1){e=a[h>>0]|0;o=e&255;if(o>>>0>k>>>0){e=2;break a}do if(e<<24>>24>-1){b[m>>1]=e&255;c[g>>2]=h+1}else{if((e&255)<194){e=2;break a}if((e&255)<224){if((l-h|0)<2){e=1;break a}e=d[h+1>>0]|0;if((e&192|0)!=128){e=2;break a}e=e&63|o<<6&1984;if(e>>>0>k>>>0){e=2;break a}b[m>>1]=e;c[g>>2]=h+2;break}if((e&255)<240){if((l-h|0)<3){e=1;break a}n=a[h+1>>0]|0;e=a[h+2>>0]|0;switch(o|0){case 224:{if((n&-32)<<24>>24!=-96){e=2;break a}break}case 237:{if((n&-32)<<24>>24!=-128){e=2;break a}break}default:if((n&-64)<<24>>24!=-128){e=2;break a}}e=e&255;if((e&192|0)!=128){e=2;break a}e=(n&255)<<6&4032|o<<12|e&63;if((e&65535)>>>0>k>>>0){e=2;break a}b[m>>1]=e;c[g>>2]=h+3;break}if((e&255)>=245){e=2;break a}if((l-h|0)<4){e=1;break a}n=a[h+1>>0]|0;e=a[h+2>>0]|0;h=a[h+3>>0]|0;switch(o|0){case 240:{if((n+112&255)>=48){e=2;break a}break}case 244:{if((n&-16)<<24>>24!=-128){e=2;break a}break}default:if((n&-64)<<24>>24!=-128){e=2;break a}}p=e&255;if((p&192|0)!=128){e=2;break a}e=h&255;if((e&192|0)!=128){e=2;break a}if((q-m|0)<4){e=1;break a}o=o&7;h=n&255;n=p<<6;e=e&63;if((h<<12&258048|o<<18|n&4032|e)>>>0>k>>>0){e=2;break a}b[m>>1]=h<<2&60|p>>>4&3|((h>>>4&3|o<<2)<<6)+16320|55296;p=m+2|0;c[j>>2]=p;b[p>>1]=e|n&960|56320;c[g>>2]=(c[g>>2]|0)+4}while(0);m=(c[j>>2]|0)+2|0;c[j>>2]=m;h=c[g>>2]|0;e=h>>>0>>0;if(!(e&m>>>0>>0)){r=39;break}}else r=39;while(0);if((r|0)==39)e=e&1;return e|0}function lba(b,c,e,f,g){b=b|0;c=c|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,l=0,m=0,n=0;n=c;if((((g&4|0)!=0?(n-b|0)>2:0)?(a[b>>0]|0)==-17:0)?(a[b+1>>0]|0)==-69:0)g=(a[b+2>>0]|0)==-65?b+3|0:b;else g=b;a:do if((e|0)!=0&g>>>0>>0){m=g;h=0;b:while(1){g=a[m>>0]|0;l=g&255;if(l>>>0>f>>>0){g=m;h=42;break a}do if(g<<24>>24>-1)g=m+1|0;else{if((g&255)<194){g=m;h=42;break a}if((g&255)<224){if((n-m|0)<2){g=m;h=42;break a}g=d[m+1>>0]|0;if((g&192|0)!=128){g=m;h=42;break a}if((g&63|l<<6&1984)>>>0>f>>>0){g=m;h=42;break a}g=m+2|0;break}if((g&255)<240){g=m;if((n-g|0)<3){g=m;h=42;break a}j=a[m+1>>0]|0;i=a[m+2>>0]|0;switch(l|0){case 224:{if((j&-32)<<24>>24!=-96){h=20;break b}break}case 237:{if((j&-32)<<24>>24!=-128){h=22;break b}break}default:if((j&-64)<<24>>24!=-128){h=24;break b}}g=i&255;if((g&192|0)!=128){g=m;h=42;break a}if(((j&255)<<6&4032|l<<12&61440|g&63)>>>0>f>>>0){g=m;h=42;break a}g=m+3|0;break}if((g&255)>=245){g=m;h=42;break a}g=m;if((e-h|0)>>>0<2|(n-g|0)<4){g=m;h=42;break a}k=a[m+1>>0]|0;i=a[m+2>>0]|0;j=a[m+3>>0]|0;switch(l|0){case 240:{if((k+112&255)>=48){h=32;break b}break}case 244:{if((k&-16)<<24>>24!=-128){h=34;break b}break}default:if((k&-64)<<24>>24!=-128){h=36;break b}}i=i&255;if((i&192|0)!=128){g=m;h=42;break a}g=j&255;if((g&192|0)!=128){g=m;h=42;break a}if(((k&255)<<12&258048|l<<18&1835008|i<<6&4032|g&63)>>>0>f>>>0){g=m;h=42;break a}g=m+4|0;h=h+1|0}while(0);h=h+1|0;if(!(h>>>0>>0&g>>>0>>0)){h=42;break a}else m=g}if((h|0)==20){g=g-b|0;break}else if((h|0)==22){g=g-b|0;break}else if((h|0)==24){g=g-b|0;break}else if((h|0)==32){g=g-b|0;break}else if((h|0)==34){g=g-b|0;break}else if((h|0)==36){g=g-b|0;break}}else h=42;while(0);if((h|0)==42)g=g-b|0;return g|0}function mba(b,d,e,f,g,h,i,j){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;var k=0,l=0;c[e>>2]=b;c[h>>2]=f;l=g;if(j&2)if((l-f|0)<3)b=1;else{c[h>>2]=f+1;a[f>>0]=-17;k=c[h>>2]|0;c[h>>2]=k+1;a[k>>0]=-69;k=c[h>>2]|0;c[h>>2]=k+1;a[k>>0]=-65;k=4}else k=4;a:do if((k|0)==4){b=c[e>>2]|0;if(b>>>0>>0)while(1){j=c[b>>2]|0;if(j>>>0>i>>>0|(j&-2048|0)==55296){b=2;break a}do if(j>>>0>=128){if(j>>>0<2048){b=c[h>>2]|0;if((l-b|0)<2){b=1;break a}c[h>>2]=b+1;a[b>>0]=j>>>6|192;k=c[h>>2]|0;c[h>>2]=k+1;a[k>>0]=j&63|128;break}b=c[h>>2]|0;g=l-b|0;if(j>>>0<65536){if((g|0)<3){b=1;break a}c[h>>2]=b+1;a[b>>0]=j>>>12|224;k=c[h>>2]|0;c[h>>2]=k+1;a[k>>0]=j>>>6&63|128;k=c[h>>2]|0;c[h>>2]=k+1;a[k>>0]=j&63|128;break}else{if((g|0)<4){b=1;break a}c[h>>2]=b+1;a[b>>0]=j>>>18|240;k=c[h>>2]|0;c[h>>2]=k+1;a[k>>0]=j>>>12&63|128;k=c[h>>2]|0;c[h>>2]=k+1;a[k>>0]=j>>>6&63|128;k=c[h>>2]|0;c[h>>2]=k+1;a[k>>0]=j&63|128;break}}else{b=c[h>>2]|0;if((l-b|0)<1){b=1;break a}c[h>>2]=b+1;a[b>>0]=j}while(0);b=(c[e>>2]|0)+4|0;c[e>>2]=b;if(b>>>0>=d>>>0){b=0;break}}else b=0}while(0);return b|0}function nba(b,e,f,g,h,i,j,k){b=b|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;k=k|0;var l=0,m=0,n=0,o=0,p=0,q=0;c[f>>2]=b;c[i>>2]=g;if(k&4){b=c[f>>2]|0;k=e;if((((k-b|0)>2?(a[b>>0]|0)==-17:0)?(a[b+1>>0]|0)==-69:0)?(a[b+2>>0]|0)==-65:0){c[f>>2]=b+3;g=c[i>>2]|0;p=k}else p=k}else p=e;k=c[f>>2]|0;b=k>>>0>>0;a:do if(b&g>>>0>>0)while(1){b=a[k>>0]|0;o=b&255;do if(b<<24>>24>-1){if(o>>>0>j>>>0){b=2;break a}c[g>>2]=o;c[f>>2]=k+1}else{if((b&255)<194){b=2;break a}if((b&255)<224){if((p-k|0)<2){b=1;break a}b=d[k+1>>0]|0;if((b&192|0)!=128){b=2;break a}b=b&63|o<<6&1984;if(b>>>0>j>>>0){b=2;break a}c[g>>2]=b;c[f>>2]=k+2;break}if((b&255)<240){if((p-k|0)<3){b=1;break a}l=a[k+1>>0]|0;b=a[k+2>>0]|0;switch(o|0){case 224:{if((l&-32)<<24>>24!=-96){b=2;break a}break}case 237:{if((l&-32)<<24>>24!=-128){b=2;break a}break}default:if((l&-64)<<24>>24!=-128){b=2;break a}}b=b&255;if((b&192|0)!=128){b=2;break a}b=(l&255)<<6&4032|o<<12&61440|b&63;if(b>>>0>j>>>0){b=2;break a}c[g>>2]=b;c[f>>2]=k+3;break}if((b&255)>=245){b=2;break a}if((p-k|0)<4){b=1;break a}n=a[k+1>>0]|0;b=a[k+2>>0]|0;l=a[k+3>>0]|0;switch(o|0){case 240:{if((n+112&255)>=48){b=2;break a}break}case 244:{if((n&-16)<<24>>24!=-128){b=2;break a}break}default:if((n&-64)<<24>>24!=-128){b=2;break a}}m=b&255;if((m&192|0)!=128){b=2;break a}b=l&255;if((b&192|0)!=128){b=2;break a}b=(n&255)<<12&258048|o<<18&1835008|m<<6&4032|b&63;if(b>>>0>j>>>0){b=2;break a}c[g>>2]=b;c[f>>2]=k+4}while(0);g=(c[i>>2]|0)+4|0;c[i>>2]=g;k=c[f>>2]|0;b=k>>>0>>0;if(!(b&g>>>0>>0)){q=38;break}}else q=38;while(0);if((q|0)==38)b=b&1;return b|0}function oba(b,c,e,f,g){b=b|0;c=c|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,l=0,m=0,n=0;n=c;if((((g&4|0)!=0?(n-b|0)>2:0)?(a[b>>0]|0)==-17:0)?(a[b+1>>0]|0)==-69:0)g=(a[b+2>>0]|0)==-65?b+3|0:b;else g=b;a:do if((e|0)!=0&g>>>0>>0){l=g;m=0;b:while(1){g=a[l>>0]|0;k=g&255;do if(g<<24>>24>-1){if(k>>>0>f>>>0){g=l;h=42;break a}g=l+1|0}else{if((g&255)<194){g=l;h=42;break a}if((g&255)<224){if((n-l|0)<2){g=l;h=42;break a}g=d[l+1>>0]|0;if((g&192|0)!=128){g=l;h=42;break a}if((g&63|k<<6&1984)>>>0>f>>>0){g=l;h=42;break a}g=l+2|0;break}if((g&255)<240){g=l;if((n-g|0)<3){g=l;h=42;break a}i=a[l+1>>0]|0;h=a[l+2>>0]|0;switch(k|0){case 224:{if((i&-32)<<24>>24!=-96){h=20;break b}break}case 237:{if((i&-32)<<24>>24!=-128){h=22;break b}break}default:if((i&-64)<<24>>24!=-128){h=24;break b}}g=h&255;if((g&192|0)!=128){g=l;h=42;break a}if(((i&255)<<6&4032|k<<12&61440|g&63)>>>0>f>>>0){g=l;h=42;break a}g=l+3|0;break}if((g&255)>=245){g=l;h=42;break a}g=l;if((n-g|0)<4){g=l;h=42;break a}j=a[l+1>>0]|0;h=a[l+2>>0]|0;i=a[l+3>>0]|0;switch(k|0){case 240:{if((j+112&255)>=48){h=32;break b}break}case 244:{if((j&-16)<<24>>24!=-128){h=34;break b}break}default:if((j&-64)<<24>>24!=-128){h=36;break b}}h=h&255;if((h&192|0)!=128){g=l;h=42;break a}g=i&255;if((g&192|0)!=128){g=l;h=42;break a}if(((j&255)<<12&258048|k<<18&1835008|h<<6&4032|g&63)>>>0>f>>>0){g=l;h=42;break a}g=l+4|0}while(0);m=m+1|0;if(!(m>>>0>>0&g>>>0>>0)){h=42;break a}else l=g}if((h|0)==20){g=g-b|0;break}else if((h|0)==22){g=g-b|0;break}else if((h|0)==24){g=g-b|0;break}else if((h|0)==32){g=g-b|0;break}else if((h|0)==34){g=g-b|0;break}else if((h|0)==36){g=g-b|0;break}}else h=42;while(0);if((h|0)==42)g=g-b|0;return g|0}function pba(a){a=a|0;o2(55528);o2(55516);o2(55504);o2(55492);o2(55480);o2(55468);o2(55456);o2(55444);o2(55432);o2(55420);o2(55408);o2(55396);o2(55384);o2(55372);return}function qba(a){a=a|0;E2(55700);E2(55688);E2(55676);E2(55664);E2(55652);E2(55640);E2(55628);E2(55616);E2(55604);E2(55592);E2(55580);E2(55568);E2(55556);E2(55544);return}function rba(a){a=a|0;o2(56332);o2(56320);o2(56308);o2(56296);o2(56284);o2(56272);o2(56260);o2(56248);o2(56236);o2(56224);o2(56212);o2(56200);o2(56188);o2(56176);o2(56164);o2(56152);o2(56140);o2(56128);o2(56116);o2(56104);o2(56092);o2(56080);o2(56068);o2(56056);return}function sba(a){a=a|0;E2(56624);E2(56612);E2(56600);E2(56588);E2(56576);E2(56564);E2(56552);E2(56540);E2(56528);E2(56516);E2(56504);E2(56492);E2(56480);E2(56468);E2(56456);E2(56444);E2(56432);E2(56420);E2(56408);E2(56396);E2(56384);E2(56372);E2(56360);E2(56348);return}function tba(a){a=a|0;o2(57436);o2(57424);o2(57412);o2(57400);o2(57388);o2(57376);o2(57364);o2(57352);o2(57340);o2(57328);o2(57316);o2(57304);o2(57292);o2(57280);o2(57268);o2(57256);o2(57244);o2(57232);o2(57220);o2(57208);o2(57196);o2(57184);o2(57172);o2(57160);return}function uba(a){a=a|0;E2(57728);E2(57716);E2(57704);E2(57692);E2(57680);E2(57668);E2(57656);E2(57644);E2(57632);E2(57620);E2(57608);E2(57596);E2(57584);E2(57572);E2(57560);E2(57548);E2(57536);E2(57524);E2(57512);E2(57500);E2(57488);E2(57476);E2(57464);E2(57452);return}function vba(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,j=0,k=0;k=i;i=i+32|0;j=k;g=c[a+8>>2]|0;d=c[a+4>>2]|0;if(g-d>>2>>>0>>0){e=c[a>>2]|0;h=d-e>>2;f=h+b|0;if(f>>>0>1073741823)M_(a);d=g-e|0;if(d>>2>>>0<536870911){d=d>>1;d=d>>>0>>0?f:d}else d=1073741823;xba(j,d,h,a+16|0);h=j+8|0;g=c[h>>2]|0;Qba(g|0,0,b<<2|0)|0;c[h>>2]=g+(b<<2);yba(a,j);zba(j)}else wba(a,b);i=k;return}function wba(a,b){a=a|0;b=b|0;var d=0;d=a+4|0;a=b;b=c[d>>2]|0;do{c[b>>2]=0;b=(c[d>>2]|0)+4|0;c[d>>2]=b;a=a+-1|0}while((a|0)!=0);return}function xba(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0;c[b+12>>2]=0;c[b+16>>2]=f;do if(d){g=f+112|0;if(d>>>0<29&(a[g>>0]|0)==0){a[g>>0]=1;break}else{f=O_(d<<2)|0;break}}else f=0;while(0);c[b>>2]=f;e=f+(e<<2)|0;c[b+8>>2]=e;c[b+4>>2]=e;c[b+12>>2]=f+(d<<2);return}function yba(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0;e=c[a>>2]|0;g=a+4|0;d=b+4|0;f=(c[g>>2]|0)-e|0;h=(c[d>>2]|0)+(0-(f>>2)<<2)|0;c[d>>2]=h;Rba(h|0,e|0,f|0)|0;f=c[a>>2]|0;c[a>>2]=c[d>>2];c[d>>2]=f;f=b+8|0;e=c[g>>2]|0;c[g>>2]=c[f>>2];c[f>>2]=e;f=a+8|0;a=b+12|0;e=c[f>>2]|0;c[f>>2]=c[a>>2];c[a>>2]=e;c[b>>2]=c[d>>2];return}function zba(b){b=b|0;var d=0,e=0,f=0;e=c[b+4>>2]|0;f=b+8|0;d=c[f>>2]|0;if((d|0)!=(e|0)){do d=d+-4|0;while((d|0)!=(e|0));c[f>>2]=d}e=c[b>>2]|0;do if(e){d=c[b+16>>2]|0;if((d|0)==(e|0)){a[d+112>>0]=0;break}else{P_(e);break}}while(0);return}function Aba(b,d){b=b|0;d=d|0;var e=0;if(d>>>0>1073741823)M_(b);e=b+128|0;if(d>>>0<29&(a[e>>0]|0)==0){a[e>>0]=1;e=b+16|0}else e=O_(d<<2)|0;c[b+4>>2]=e;c[b>>2]=e;c[b+8>>2]=e+(d<<2);return}function Bba(a,b,d){a=a|0;b=b|0;d=d|0;var e=0.0,f=0,g=0,h=0,j=0;j=i;i=i+16|0;h=j;do if((a|0)!=(b|0)){f=M$()|0;g=c[f>>2]|0;c[f>>2]=0;e=+_0(a,h,E4()|0);a=c[f>>2]|0;if(!a)c[f>>2]=g;if((c[h>>2]|0)!=(b|0)){c[d>>2]=4;e=0.0;break}if((a|0)==34)c[d>>2]=4}else{c[d>>2]=4;e=0.0}while(0);i=j;return +e}function Cba(a,b,d){a=a|0;b=b|0;d=d|0;var e=0.0,f=0,g=0,h=0,j=0;j=i;i=i+16|0;h=j;do if((a|0)!=(b|0)){f=M$()|0;g=c[f>>2]|0;c[f>>2]=0;e=+_0(a,h,E4()|0);a=c[f>>2]|0;if(!a)c[f>>2]=g;if((c[h>>2]|0)!=(b|0)){c[d>>2]=4;e=0.0;break}if((a|0)==34)c[d>>2]=4}else{c[d>>2]=4;e=0.0}while(0);i=j;return +e}function Dba(a,b,d){a=a|0;b=b|0;d=d|0;var e=0.0,f=0,g=0,h=0,j=0;j=i;i=i+16|0;h=j;do if((a|0)==(b|0)){c[d>>2]=4;e=0.0}else{f=M$()|0;g=c[f>>2]|0;c[f>>2]=0;e=+_0(a,h,E4()|0);a=c[f>>2]|0;if(!a)c[f>>2]=g;if((c[h>>2]|0)!=(b|0)){c[d>>2]=4;e=0.0;break}if((a|0)==34)c[d>>2]=4}while(0);i=j;return +e}function Eba(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,j=0,k=0;k=i;i=i+16|0;j=k;do if((b|0)!=(d|0)){if((a[b>>0]|0)==45){c[e>>2]=4;f=0;b=0;break}g=M$()|0;h=c[g>>2]|0;c[g>>2]=0;b=F$(b,j,f,E4()|0)|0;f=c[g>>2]|0;if(!f)c[g>>2]=h;if((c[j>>2]|0)!=(d|0)){c[e>>2]=4;f=0;b=0;break}if((f|0)==34){c[e>>2]=4;f=-1;b=-1}else f=D}else{c[e>>2]=4;f=0;b=0}while(0);D=f;i=k;return b|0}function Fba(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,j=0,k=0,l=0;l=i;i=i+16|0;k=l;do if((b|0)!=(d|0)){if((a[b>>0]|0)==45){c[e>>2]=4;b=0;break}h=M$()|0;j=c[h>>2]|0;c[h>>2]=0;b=F$(b,k,f,E4()|0)|0;f=D;g=c[h>>2]|0;if(!g)c[h>>2]=j;if((c[k>>2]|0)!=(d|0)){c[e>>2]=4;b=0;break}if(f>>>0>0|(f|0)==0&b>>>0>4294967295|(g|0)==34){c[e>>2]=4;b=-1;break}else break}else{c[e>>2]=4;b=0}while(0);i=l;return b|0}function Gba(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,j=0,k=0,l=0;l=i;i=i+16|0;k=l;do if((b|0)!=(d|0)){if((a[b>>0]|0)==45){c[e>>2]=4;b=0;break}h=M$()|0;j=c[h>>2]|0;c[h>>2]=0;b=F$(b,k,f,E4()|0)|0;f=D;g=c[h>>2]|0;if(!g)c[h>>2]=j;if((c[k>>2]|0)!=(d|0)){c[e>>2]=4;b=0;break}if(f>>>0>0|(f|0)==0&b>>>0>4294967295|(g|0)==34){c[e>>2]=4;b=-1;break}else break}else{c[e>>2]=4;b=0}while(0);i=l;return b|0}function Hba(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,j=0,k=0,l=0;l=i;i=i+16|0;k=l;do if((b|0)!=(d|0)){if((a[b>>0]|0)==45){c[e>>2]=4;b=0;break}h=M$()|0;j=c[h>>2]|0;c[h>>2]=0;b=F$(b,k,f,E4()|0)|0;f=D;g=c[h>>2]|0;if(!g)c[h>>2]=j;if((c[k>>2]|0)!=(d|0)){c[e>>2]=4;b=0;break}if(f>>>0>0|(f|0)==0&b>>>0>65535|(g|0)==34){c[e>>2]=4;b=-1;break}else{b=b&65535;break}}else{c[e>>2]=4;b=0}while(0);i=l;return b|0}function Iba(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,j=0,k=0;k=i;i=i+16|0;j=k;do if((a|0)!=(b|0)){g=M$()|0;h=c[g>>2]|0;c[g>>2]=0;a=G$(a,j,e,E4()|0)|0;e=D;f=c[g>>2]|0;if(!f)c[g>>2]=h;if((c[j>>2]|0)!=(b|0)){c[d>>2]=4;e=0;a=0;break}if((f|0)==34){c[d>>2]=4;j=(e|0)>0|(e|0)==0&a>>>0>0;D=j?2147483647:-2147483648;i=k;return (j?-1:0)|0}}else{c[d>>2]=4;e=0;a=0}while(0);D=e;i=k;return a|0}function Jba(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,j=0,k=0;k=i;i=i+16|0;j=k;a:do if((a|0)==(b|0)){c[d>>2]=4;a=0}else{g=M$()|0;h=c[g>>2]|0;c[g>>2]=0;a=G$(a,j,e,E4()|0)|0;e=D;f=c[g>>2]|0;if(!f)c[g>>2]=h;if((c[j>>2]|0)!=(b|0)){c[d>>2]=4;a=0;break}do if((f|0)==34){c[d>>2]=4;if((e|0)>0|(e|0)==0&a>>>0>0){a=2147483647;break a}}else{if((e|0)<-1|(e|0)==-1&a>>>0<2147483648){c[d>>2]=4;break}if((e|0)>0|(e|0)==0&a>>>0>2147483647){c[d>>2]=4;a=2147483647;break a}else break a}while(0);a=-2147483648}while(0);i=k;return a|0}function Kba(a){a=a|0;return}function Lba(a){a=a|0;a=a+4|0;c[a>>2]=(c[a>>2]|0)+1;return}function Mba(a){a=a|0;var b=0,d=0;d=a+4|0;b=c[d>>2]|0;c[d>>2]=b+-1;if(!b){oc[c[(c[a>>2]|0)+8>>2]&2047](a);a=1}else a=0;return a|0}function Nba(a,b,d){a=a|0;b=b|0;d=d|0;ob(58068)|0;if((c[a>>2]|0)==1)do Ob(58096,58068)|0;while((c[a>>2]|0)==1);if(!(c[a>>2]|0)){c[a>>2]=1;_b(58068)|0;oc[d&2047](b);ob(58068)|0;c[a>>2]=-1;_b(58068)|0;Hb(58096)|0}else _b(58068)|0;return}function Oba(){}function Pba(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 (D=d,a-c>>>0|0)|0}function Qba(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0;f=b+e|0;if((e|0)>=20){d=d&255;h=b&3;i=d|d<<8|d<<16|d<<24;g=f&~3;if(h){h=b+4-h|0;while((b|0)<(h|0)){a[b>>0]=d;b=b+1|0}}while((b|0)<(g|0)){c[b>>2]=i;b=b+4|0}}while((b|0)<(f|0)){a[b>>0]=d;b=b+1|0}return b-e|0}function Rba(b,d,e){b=b|0;d=d|0;e=e|0;var f=0;if((e|0)>=4096)return Oa(b|0,d|0,e|0)|0;f=b|0;if((b&3)==(d&3)){while(b&3){if(!e)return f|0;a[b>>0]=a[d>>0]|0;b=b+1|0;d=d+1|0;e=e-1|0}while((e|0)>=4){c[b>>2]=c[d>>2];b=b+4|0;d=d+4|0;e=e-4|0}}while((e|0)>0){a[b>>0]=a[d>>0]|0;b=b+1|0;d=d+1|0;e=e-1|0}return f|0}function Sba(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 Rba(b,c,d)|0;return b|0}function Tba(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;c=a+c>>>0;return (D=b+d+(c>>>0>>0|0)>>>0,c|0)|0}function Uba(a,b,c){a=a|0;b=b|0;c=c|0;if((c|0)<32){D=b>>>c;return a>>>c|(b&(1<>>c-32|0}function Vba(a,b,c){a=a|0;b=b|0;c=c|0;if((c|0)<32){D=b<>>32-c;return a<>c;return a>>>c|(b&(1<>c-32|0}function Xba(b){b=b|0;var c=0;c=a[m+(b&255)>>0]|0;if((c|0)<8)return c|0;c=a[m+(b>>8&255)>>0]|0;if((c|0)<8)return c+8|0;c=a[m+(b>>16&255)>>0]|0;if((c|0)<8)return c+16|0;return (a[m+(b>>>24)>>0]|0)+24|0}function Yba(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0;f=a&65535;e=b&65535;c=$(e,f)|0;d=a>>>16;a=(c>>>16)+($(e,d)|0)|0;e=b>>>16;b=$(e,f)|0;return (D=(a>>>16)+($(e,d)|0)+(((a&65535)+b|0)>>>16)|0,a+b<<16|c&65535|0)|0}function Zba(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0;j=b>>31|((b|0)<0?-1:0)<<1;i=((b|0)<0?-1:0)>>31|((b|0)<0?-1:0)<<1;f=d>>31|((d|0)<0?-1:0)<<1;e=((d|0)<0?-1:0)>>31|((d|0)<0?-1:0)<<1;h=Pba(j^a,i^b,j,i)|0;g=D;a=f^j;b=e^i;return Pba((cca(h,g,Pba(f^c,e^d,f,e)|0,D,0)|0)^a,D^b,a,b)|0}function _ba(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,j=0,k=0,l=0;f=i;i=i+16|0;j=f|0;h=b>>31|((b|0)<0?-1:0)<<1;g=((b|0)<0?-1:0)>>31|((b|0)<0?-1:0)<<1;l=e>>31|((e|0)<0?-1:0)<<1;k=((e|0)<0?-1:0)>>31|((e|0)<0?-1:0)<<1;a=Pba(h^a,g^b,h,g)|0;b=D;cca(a,b,Pba(l^d,k^e,l,k)|0,D,j)|0;e=Pba(c[j>>2]^h,c[j+4>>2]^g,h,g)|0;d=D;i=f;return (D=d,e)|0}function $ba(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=Yba(e,f)|0;a=D;return (D=($(b,f)|0)+($(d,e)|0)+a|a&0,c|0|0)|0}function aca(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return cca(a,b,c,d,0)|0}function bca(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0;g=i;i=i+16|0;f=g|0;cca(a,b,d,e,f)|0;i=g;return (D=c[f+4>>2]|0,c[f>>2]|0)|0}function cca(a,b,d,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 (D=n,f)|0}else{if(!g){n=0;f=0;return (D=n,f)|0}c[f>>2]=a|0;c[f+4>>2]=b&0;n=0;f=0;return (D=n,f)|0}}g=(i|0)==0;do if(h){if(!g){g=(ba(i|0)|0)-(ba(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 (D=n,f)|0}g=h-1|0;if(g&h){i=(ba(h|0)|0)+33-(ba(k|0)|0)|0;p=64-i|0;m=32-i|0;j=m>>31;o=i-32|0;b=o>>31;h=i;a=m-1>>31&k>>>(o>>>0)|(k<>>(i>>>0))&b;b=b&k>>>(i>>>0);g=l<>>(o>>>0))&j|l<>31;break}if(f){c[f>>2]=g&l;c[f+4>>2]=0}if((h|0)==1){o=j|b&0;p=a|0|0;return (D=o,p)|0}else{p=Xba(h|0)|0;o=k>>>(p>>>0)|0;p=k<<32-p|l>>>(p>>>0)|0;return (D=o,p)|0}}else{if(g){if(f){c[f>>2]=(k>>>0)%(h>>>0);c[f+4>>2]=0}o=0;p=(k>>>0)/(h>>>0)>>>0;return (D=o,p)|0}if(!l){if(f){c[f>>2]=0;c[f+4>>2]=(k>>>0)%(i>>>0)}o=0;p=(k>>>0)/(i>>>0)>>>0;return (D=o,p)|0}g=i-1|0;if(!(g&i)){if(f){c[f>>2]=a|0;c[f+4>>2]=g&k|b&0}o=0;p=k>>>((Xba(i|0)|0)>>>0);return (D=o,p)|0}g=(ba(i|0)|0)-(ba(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 (D=o,p)|0}while(0);if(!h){k=i;j=0;i=0}else{m=d|0|0;l=n|e&0;k=Tba(m|0,l|0,-1,-1)|0;d=D;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;Pba(k,d,e,n)|0;p=D;o=p>>31|((p|0)<0?-1:0)<<1;i=o&1;a=Pba(e,n,o&m,(((p|0)<0?-1:0)>>31|((p|0)<0?-1:0)<<1)&l)|0;b=D;h=h-1|0}while((h|0)!=0);k=j;j=0}h=0;if(f){c[f>>2]=a;c[f+4>>2]=b}o=(g|0)>>>31|(k|h)<<1|(h<<1|g>>>31)&0|j;p=(g<<1|0>>>31)&-2|i;return (D=o,p)|0}function dca(a,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 lc[a&7](b|0,c|0,d|0,e|0,f|0,g|0,h|0)|0}function eca(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;mc[a&7](b|0,c|0,d|0,e|0,f|0)}function fca(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=+g;return nc[a&3](b|0,c|0,d|0,e|0,f|0,+g)|0}function gca(a,b){a=a|0;b=b|0;oc[a&2047](b|0)}function hca(a,b,c){a=a|0;b=b|0;c=c|0;pc[a&1023](b|0,c|0)}function ica(a,b,c,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 qc[a&63](b|0,c|0,d|0,e|0,f|0,g|0)|0}function jca(a,b){a=a|0;b=b|0;return rc[a&127](b|0)|0}function kca(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;return sc[a&31](b|0,c|0,d|0,e|0,f|0)|0}function lca(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return tc[a&63](b|0,c|0,d|0)|0}function mca(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 uc[a&15](b|0,c|0,d|0,e|0,f|0,g|0,h|0,i|0)|0}function nca(a,b,c,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;vc[a&15](b|0,c|0,d|0,e|0,f|0,g|0)}function oca(a,b,c,d){a=a|0;b=b|0;c=c|0;d=+d;return wc[a&1](b|0,c|0,+d)|0}function pca(a,b){a=a|0;b=b|0;return +xc[a&1](b|0)}function qca(a,b,c){a=a|0;b=b|0;c=+c;return yc[a&1](b|0,+c)|0}function rca(a,b,c){a=a|0;b=b|0;c=c|0;return zc[a&255](b|0,c|0)|0}function sca(a){a=a|0;return +Ac[a&1]()}function tca(a){a=a|0;return Bc[a&3]()|0}function uca(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return Cc[a&7](b|0,c|0,d|0,e|0)|0}function vca(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;Dc[a&63](b|0,c|0,d|0)}function wca(a){a=a|0;Ec[a&3]()}function xca(a,b,c,d){a=a|0;b=b|0;c=c|0;d=+d;Fc[a&1](b|0,c|0,+d)}function yca(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=+f;return Gc[a&7](b|0,c|0,d|0,e|0,+f)|0}function zca(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;Hc[a&15](b|0,c|0,d|0,e|0)}function Aca(a,b,c,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;ca(0);return 0}function Bca(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;ca(1)}function Cca(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=+f;ca(2);return 0}function Dca(a){a=a|0;ca(3)}function Eca(a,b){a=a|0;b=b|0;ca(4)}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|0;ca(5);return 0}function Gca(a){a=a|0;ca(6);return 0}function Hca(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;ca(7);return 0}function Ica(a,b,c){a=a|0;b=b|0;c=c|0;ca(8);return 0}function Jca(a,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;ca(9);return 0}function Kca(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;ca(10)}function Lca(a,b,c){a=a|0;b=b|0;c=+c;ca(11);return 0}function Mca(a){a=a|0;ca(12);return 0.0}function Nca(a,b){a=a|0;b=+b;ca(13);return 0}function Oca(a,b){a=a|0;b=b|0;ca(14);return 0}function Pca(){ca(15);return 0.0}function Qca(){ca(16);return 0}function Rca(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;ca(17);return 0}function Sca(a,b,c){a=a|0;b=b|0;c=c|0;ca(18)}function Tca(){ca(19)}function Uca(){Mb()}function Vca(a,b,c){a=a|0;b=b|0;c=+c;ca(20)}function Wca(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;ca(21);return 0}function Xca(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;ca(22)} + +// EMSCRIPTEN_END_FUNCS +var lc=[Aca,x6,B6,v7,z7,E7,G7,Aca];var mc=[Bca,u$,t$,q$,B_,Bca,Bca,Bca];var nc=[Cca,K7,Q7,Cca];var oc=[Dca,sd,td,zd,Ed,Fd,Hd,Id,Jd,Kd,Xc,Od,Md,Pd,Nd,Qd,Z3,a4,_3,b4,$3,c4,w3,y3,x3,z3,Rd,Sd,Yd,Zd,Ad,Bd,Cd,Dd,qd,be,xe,ye,ze,Ae,Be,Ce,Te,Ue,Pe,Qe,Le,Me,Fe,Ge,Ie,Je,af,bf,gf,lE,ZD,ND,BD,pD,dD,TC,HC,vC,jC,ZB,NB,BB,pB,dB,TA,HA,vA,jA,Zz,Nz,Bz,pz,dz,Ty,Hy,vy,jy,Zx,Nx,Bx,px,dx,Tw,Hw,vw,jw,Zv,Nv,Bv,pv,dv,Tu,Hu,vu,ju,Zt,Nt,Bt,pt,dt,Ts,Hs,vs,js,Zr,Nr,Br,pr,dr,Tq,Hq,vq,jq,Zp,Np,Bp,pp,dp,To,Ho,vo,jo,Yn,Mn,An,on,bn,Rm,Fm,tm,hm,Xl,Ll,zl,nl,bl,Rk,Fk,tk,hk,Xj,Lj,zj,nj,bj,Ri,Fi,ti,hi,Xh,Lh,zh,nh,bh,Rg,Fg,tg,hg,Xf,Lf,zf,hf,kf,lf,pf,qf,tf,uf,Bf,Cf,Ff,Gf,Jf,Kf,Nf,Of,Rf,Sf,Vf,Wf,Zf,_f,bg,cg,fg,gg,jg,kg,ng,og,rg,sg,vg,wg,zg,Ag,Dg,Eg,Hg,Ig,Lg,Mg,Pg,Qg,Tg,Ug,Xg,Yg,$g,ah,dh,eh,hh,ih,lh,mh,ph,qh,th,uh,xh,yh,Bh,Ch,Fh,Gh,Jh,Kh,Nh,Oh,Rh,Sh,Vh,Wh,Zh,_h,bi,ci,fi,gi,ji,ki,ni,oi,ri,si,vi,wi,zi,Ai,Di,Ei,Hi,Ii,Li,Mi,Pi,Qi,Ti,Ui,Xi,Yi,$i,aj,dj,ej,hj,ij,lj,mj,pj,qj,tj,uj,xj,yj,Bj,Cj,Fj,Gj,Jj,Kj,Nj,Oj,Rj,Sj,Vj,Wj,Zj,_j,bk,ck,fk,gk,jk,kk,nk,ok,rk,sk,vk,wk,zk,Ak,Dk,Ek,Hk,Ik,Lk,Mk,Pk,Qk,Tk,Uk,Xk,Yk,$k,al,dl,el,hl,il,ll,ml,pl,ql,tl,ul,xl,yl,Bl,Cl,Fl,Gl,Jl,Kl,Nl,Ol,Rl,Sl,Vl,Wl,Zl,_l,bm,cm,fm,gm,jm,km,nm,om,rm,sm,vm,wm,zm,Am,Dm,Em,Hm,Im,Lm,Mm,Pm,Qm,Tm,Um,Xm,Ym,$m,an,dn,en,hn,jn,mn,nn,qn,rn,un,vn,yn,zn,Cn,Dn,Gn,Hn,Kn,Ln,On,Pn,Sn,Tn,Wn,Xn,_n,$n,co,eo,ho,io,lo,mo,po,qo,to,uo,xo,yo,Bo,Co,Fo,Go,Jo,Ko,No,Oo,Ro,So,Vo,Wo,Zo,_o,bp,cp,fp,gp,jp,kp,np,op,rp,sp,vp,wp,zp,Ap,Dp,Ep,Hp,Ip,Lp,Mp,Pp,Qp,Tp,Up,Xp,Yp,$p,aq,dq,eq,hq,iq,lq,mq,pq,qq,tq,uq,xq,yq,Bq,Cq,Fq,Gq,Jq,Kq,Nq,Oq,Rq,Sq,Vq,Wq,Zq,_q,br,cr,fr,gr,jr,kr,nr,or,rr,sr,vr,wr,zr,Ar,Dr,Er,Hr,Ir,Lr,Mr,Pr,Qr,Tr,Ur,Xr,Yr,$r,as,ds,es,hs,is,ls,ms,ps,qs,ts,us,xs,ys,Bs,Cs,Fs,Gs,Js,Ks,Ns,Os,Rs,Ss,Vs,Ws,Zs,_s,bt,ct,ft,gt,jt,kt,nt,ot,rt,st,vt,wt,zt,At,Dt,Et,Ht,It,Lt,Mt,Pt,Qt,Tt,Ut,Xt,Yt,$t,au,du,eu,hu,iu,lu,mu,pu,qu,tu,uu,xu,yu,Bu,Cu,Fu,Gu,Ju,Ku,Nu,Ou,Ru,Su,Vu,Wu,Zu,_u,bv,cv,fv,gv,jv,kv,nv,ov,rv,sv,vv,wv,zv,Av,Dv,Ev,Hv,Iv,Lv,Mv,Pv,Qv,Tv,Uv,Xv,Yv,$v,aw,dw,ew,hw,iw,lw,mw,pw,qw,tw,uw,xw,yw,Bw,Cw,Fw,Gw,Jw,Kw,Nw,Ow,Rw,Sw,Vw,Ww,Zw,_w,bx,cx,fx,gx,jx,kx,nx,ox,rx,sx,vx,wx,zx,Ax,Dx,Ex,Hx,Ix,Lx,Mx,Px,Qx,Tx,Ux,Xx,Yx,$x,ay,dy,ey,hy,iy,ly,my,py,qy,ty,uy,xy,yy,By,Cy,Fy,Gy,Jy,Ky,Ny,Oy,Ry,Sy,Vy,Wy,Zy,_y,bz,cz,fz,gz,jz,kz,nz,oz,rz,sz,vz,wz,zz,Az,Dz,Ez,Hz,Iz,Lz,Mz,Pz,Qz,Tz,Uz,Xz,Yz,$z,aA,dA,eA,hA,iA,lA,mA,pA,qA,tA,uA,xA,yA,BA,CA,FA,GA,JA,KA,NA,OA,RA,SA,VA,WA,ZA,_A,bB,cB,fB,gB,jB,kB,nB,oB,rB,sB,vB,wB,zB,AB,DB,EB,HB,IB,LB,MB,PB,QB,TB,UB,XB,YB,$B,aC,dC,eC,hC,iC,lC,mC,pC,qC,tC,uC,xC,yC,BC,CC,FC,GC,JC,KC,NC,OC,RC,SC,VC,WC,ZC,_C,bD,cD,fD,gD,jD,kD,nD,oD,rD,sD,vD,wD,zD,AD,DD,ED,HD,ID,LD,MD,PD,QD,TD,UD,XD,YD,$D,aE,dE,eE,hE,iE,nE,oE,rE,sE,vE,wE,vf,wf,xf,yf,SE,TE,UE,VE,WE,XE,I3,K3,J3,L3,QE,$E,aF,bF,nF,oF,pF,qF,rF,sF,tF,uF,vF,wF,xF,yF,JF,KF,VG,WG,_G,$G,aH,uH,vH,zH,AH,EH,FH,GH,HH,KH,LH,NH,OH,sH,tH,PH,QH,QI,RI,VI,WI,_I,$I,aJ,bJ,eJ,fJ,hJ,iJ,OI,PI,jJ,kJ,zJ,AJ,EJ,FJ,JJ,KJ,LJ,MJ,PJ,QJ,SJ,TJ,eK,fK,gK,hK,iK,jK,kK,lK,mK,nK,oK,pK,AI,BI,CI,DI,EI,FI,GI,HI,II,JI,KI,LI,qK,rK,sK,tK,uK,vK,wK,xK,yK,zK,AK,BK,lJ,mJ,nJ,oJ,pJ,qJ,rJ,sJ,tJ,uJ,vJ,wJ,CK,DK,EK,FK,GK,HK,IK,JK,KK,LK,MK,NK,UJ,VJ,WJ,XJ,YJ,ZJ,_J,$J,aK,bK,cK,dK,TK,UK,XK,YK,$K,aL,bL,cL,eL,fL,hL,iL,RK,SK,PK,QK,AL,BL,EL,FL,IL,JL,KL,LL,NL,OL,QL,RL,yL,zL,wL,xL,TL,UL,XL,YL,$L,aM,bM,cM,eM,fM,hM,iM,AM,BM,LM,MM,NM,OM,PM,QM,RM,SM,TM,UM,VM,WM,iN,jN,kN,lN,mN,nN,oN,pN,qN,rN,sN,tN,wN,xN,yN,zN,AN,BN,CN,DN,EN,FN,GN,HN,WN,XN,YN,ZN,_N,$N,aO,bO,cO,dO,eO,fO,IN,JN,KN,LN,MN,NN,ON,PN,QN,RN,SN,TN,NO,UO,OO,VO,PO,WO,QO,XO,RO,YO,SO,ZO,TO,_O,pP,qP,rP,oI,pI,qI,rI,sI,tI,uI,vI,wI,xI,yI,zI,FP,GP,jL,kL,lL,mL,nL,oL,pL,qL,rL,sL,tL,uL,CQ,DQ,EQ,FQ,GQ,HQ,IQ,JQ,KQ,LQ,MQ,NQ,OQ,PQ,RQ,SQ,UQ,VQ,WQ,XQ,ZQ,_Q,aR,bR,cR,dR,eR,fR,uR,vR,gR,hR,kR,lR,mR,nR,oR,pR,qR,rR,CR,IR,DR,JR,ER,KR,FR,LR,GR,MR,HR,NR,zS,AS,BS,CS,DS,ES,FS,GS,HS,IS,JS,KS,NS,RS,OS,SS,PS,TS,QS,US,qT,rT,gH,hH,kH,lH,mH,nH,oH,pH,qH,rH,lI,mI,fI,gI,jI,kI,$H,aI,dI,eI,XH,YH,ZH,_H,RH,SH,VH,WH,aU,bU,cU,dU,eU,IU,JU,gU,KU,LU,MU,NU,pU,qU,vU,wU,xU,yU,VU,WU,YU,ZU,_U,$U,EV,FV,GV,HV,JV,KV,MV,NV,PV,QV,RV,SV,TV,UV,VV,WV,XV,YV,_V,$V,aW,bW,dW,eW,fW,gW,iW,jW,kW,lW,DV,nW,FW,GW,IW,JW,KW,LW,VW,WW,YW,ZW,_W,$W,EX,FX,JX,KX,LX,MX,NX,OX,QX,RX,TX,UX,WX,XX,ZX,_X,aY,bY,dY,eY,gY,hY,jY,kY,nY,oY,rY,sY,vY,wY,xY,yY,zY,AY,CY,DY,FY,GY,HY,IY,KY,LY,MY,NY,PY,QY,RY,SY,UY,VY,WY,XY,ZY,_Y,$Y,aZ,cZ,dZ,eZ,fZ,hZ,iZ,jZ,kZ,mZ,nZ,oZ,pZ,rZ,sZ,tZ,uZ,wZ,xZ,yZ,zZ,BZ,CZ,DZ,EZ,GZ,HZ,S_,T_,__,b$,$_,a$,c$,d$,e$,f$,h3,Q1,W1,U2,$1,f2,V2,i3,C3,E3,D3,F3,S3,U3,T3,V3,P2,d4,f4,h4,q8,l4,m4,q4,r4,F4,G4,Z4,_4,m5,n5,z5,A5,Y5,Z5,u6,w6,z6,A6,D6,E6,O6,P6,Z6,_6,i7,j7,t7,u7,C7,D7,I7,J7,O7,P7,U7,V7,Z7,_7,f8,g8,G8,H8,$9,Y8,y9,z9,A9,B9,g4,p8,s8,Q8,e9,m9,u9,v9,ZE,MZ,SZ,f_,D$,l1,m1,J1,w7,r8,iba,pba,qba,rba,sba,tba,uba,o2,E2,x1,Dca,Dca,Dca,Dca,Dca,Dca,Dca,Dca,Dca,Dca,Dca,Dca,Dca,Dca,Dca,Dca,Dca,Dca,Dca,Dca,Dca,Dca,Dca,Dca,Dca,Dca,Dca,Dca,Dca,Dca,Dca,Dca,Dca,Dca,Dca,Dca,Dca,Dca,Dca,Dca,Dca,Dca,Dca,Dca,Dca,Dca,Dca,Dca,Dca,Dca,Dca,Dca,Dca,Dca,Dca,Dca,Dca,Dca,Dca,Dca,Dca,Dca,Dca,Dca,Dca,Dca,Dca,Dca,Dca,Dca,Dca,Dca,Dca,Dca,Dca,Dca,Dca,Dca,Dca,Dca,Dca,Dca,Dca,Dca,Dca,Dca,Dca,Dca,Dca,Dca,Dca,Dca,Dca,Dca,Dca,Dca,Dca,Dca,Dca,Dca,Dca,Dca,Dca,Dca,Dca,Dca,Dca,Dca,Dca,Dca,Dca,Dca,Dca,Dca,Dca,Dca,Dca,Dca,Dca,Dca,Dca,Dca,Dca,Dca,Dca,Dca,Dca,Dca,Dca,Dca,Dca,Dca,Dca,Dca,Dca,Dca,Dca,Dca,Dca,Dca,Dca,Dca,Dca,Dca,Dca,Dca,Dca,Dca,Dca,Dca,Dca,Dca,Dca,Dca,Dca,Dca,Dca,Dca,Dca,Dca,Dca,Dca,Dca,Dca,Dca,Dca,Dca,Dca,Dca,Dca,Dca,Dca,Dca,Dca,Dca,Dca,Dca,Dca,Dca,Dca,Dca,Dca,Dca,Dca,Dca,Dca,Dca,Dca,Dca,Dca,Dca,Dca,Dca,Dca,Dca,Dca,Dca,Dca,Dca,Dca,Dca,Dca,Dca,Dca,Dca,Dca,Dca,Dca,Dca,Dca,Dca,Dca,Dca,Dca,Dca,Dca,Dca,Dca,Dca,Dca,Dca,Dca,Dca,Dca,Dca,Dca,Dca,Dca,Dca,Dca,Dca,Dca,Dca,Dca,Dca,Dca,Dca,Dca,Dca,Dca,Dca,Dca,Dca,Dca,Dca,Dca,Dca,Dca,Dca,Dca,Dca,Dca,Dca,Dca,Dca,Dca,Dca,Dca,Dca,Dca,Dca,Dca,Dca,Dca,Dca,Dca,Dca,Dca,Dca,Dca,Dca,Dca,Dca,Dca,Dca,Dca,Dca,Dca,Dca,Dca,Dca,Dca,Dca,Dca,Dca,Dca,Dca,Dca,Dca,Dca,Dca,Dca,Dca,Dca,Dca,Dca,Dca,Dca,Dca,Dca,Dca,Dca,Dca,Dca,Dca,Dca,Dca,Dca,Dca,Dca,Dca,Dca,Dca,Dca,Dca,Dca,Dca,Dca,Dca,Dca,Dca,Dca,Dca,Dca,Dca,Dca,Dca,Dca,Dca,Dca,Dca,Dca,Dca,Dca,Dca,Dca,Dca,Dca,Dca,Dca,Dca,Dca,Dca,Dca,Dca,Dca,Dca,Dca,Dca,Dca,Dca,Dca,Dca,Dca,Dca,Dca,Dca,Dca,Dca,Dca,Dca,Dca,Dca,Dca,Dca,Dca,Dca,Dca,Dca,Dca,Dca,Dca,Dca,Dca,Dca,Dca,Dca,Dca,Dca,Dca,Dca,Dca,Dca,Dca,Dca,Dca,Dca,Dca,Dca,Dca,Dca,Dca,Dca,Dca,Dca,Dca,Dca,Dca,Dca,Dca,Dca,Dca,Dca,Dca,Dca,Dca,Dca,Dca,Dca,Dca,Dca,Dca,Dca,Dca,Dca,Dca,Dca,Dca,Dca,Dca,Dca,Dca,Dca,Dca,Dca,Dca,Dca,Dca,Dca,Dca,Dca,Dca,Dca,Dca,Dca,Dca,Dca,Dca,Dca,Dca,Dca,Dca,Dca,Dca,Dca,Dca,Dca,Dca,Dca,Dca,Dca,Dca,Dca,Dca,Dca,Dca,Dca,Dca,Dca,Dca,Dca,Dca,Dca,Dca,Dca,Dca,Dca,Dca,Dca,Dca,Dca,Dca,Dca,Dca,Dca,Dca,Dca,Dca,Dca,Dca,Dca,Dca,Dca,Dca,Dca,Dca,Dca,Dca,Dca,Dca,Dca,Dca,Dca,Dca,Dca,Dca,Dca,Dca,Dca,Dca,Dca,Dca,Dca,Dca,Dca,Dca,Dca,Dca,Dca,Dca,Dca,Dca,Dca,Dca,Dca,Dca,Dca,Dca,Dca,Dca,Dca,Dca,Dca,Dca,Dca,Dca,Dca,Dca,Dca,Dca,Dca,Dca,Dca,Dca,Dca,Dca,Dca,Dca,Dca,Dca,Dca];var pc=[Eca,vd,wd,id,kd,od,jd,ld,X2,pd,ce,de,ee,ge,me,oe,ke,ne,pe,Ve,De,Re,Ne,He,Ke,mf,nf,rf,sf,Df,Ef,Hf,If,Pf,Qf,Tf,Uf,$f,ag,dg,eg,lg,mg,pg,qg,xg,yg,Bg,Cg,Jg,Kg,Ng,Og,Vg,Wg,Zg,_g,fh,gh,jh,kh,rh,sh,vh,wh,Dh,Eh,Hh,Ih,Ph,Qh,Th,Uh,$h,ai,di,ei,li,mi,pi,qi,xi,yi,Bi,Ci,Ji,Ki,Ni,Oi,Vi,Wi,Zi,_i,fj,gj,jj,kj,rj,sj,vj,wj,Dj,Ej,Hj,Ij,Pj,Qj,Tj,Uj,$j,ak,dk,ek,lk,mk,pk,qk,xk,yk,Bk,Ck,Jk,Kk,Nk,Ok,Vk,Wk,Zk,_k,fl,gl,jl,kl,rl,sl,vl,wl,Dl,El,Hl,Il,Pl,Ql,Tl,Ul,$l,am,dm,em,lm,mm,pm,qm,xm,ym,Bm,Cm,Jm,Km,Nm,Om,Vm,Wm,Zm,_m,fn,gn,kn,ln,sn,tn,wn,xn,En,Fn,In,Jn,Qn,Rn,Un,Vn,ao,bo,fo,go,no,oo,ro,so,zo,Ao,Do,Eo,Lo,Mo,Po,Qo,Xo,Yo,$o,ap,hp,ip,lp,mp,tp,up,xp,yp,Fp,Gp,Jp,Kp,Rp,Sp,Vp,Wp,bq,cq,fq,gq,nq,oq,rq,sq,zq,Aq,Dq,Eq,Lq,Mq,Pq,Qq,Xq,Yq,$q,ar,hr,ir,lr,mr,tr,ur,xr,yr,Fr,Gr,Jr,Kr,Rr,Sr,Vr,Wr,bs,cs,fs,gs,ns,os,rs,ss,zs,As,Ds,Es,Ls,Ms,Ps,Qs,Xs,Ys,$s,at,ht,it,lt,mt,tt,ut,xt,yt,Ft,Gt,Jt,Kt,Rt,St,Vt,Wt,bu,cu,fu,gu,nu,ou,ru,su,zu,Au,Du,Eu,Lu,Mu,Pu,Qu,Xu,Yu,$u,av,hv,iv,lv,mv,tv,uv,xv,yv,Fv,Gv,Jv,Kv,Rv,Sv,Vv,Wv,bw,cw,fw,gw,nw,ow,rw,sw,zw,Aw,Dw,Ew,Lw,Mw,Pw,Qw,Xw,Yw,$w,ax,hx,ix,lx,mx,tx,ux,xx,yx,Fx,Gx,Jx,Kx,Rx,Sx,Vx,Wx,by,cy,fy,gy,ny,oy,ry,sy,zy,Ay,Dy,Ey,Ly,My,Py,Qy,Xy,Yy,$y,az,hz,iz,lz,mz,tz,uz,xz,yz,Fz,Gz,Jz,Kz,Rz,Sz,Vz,Wz,bA,cA,fA,gA,nA,oA,rA,sA,zA,AA,DA,EA,LA,MA,PA,QA,XA,YA,$A,aB,hB,iB,lB,mB,tB,uB,xB,yB,FB,GB,JB,KB,RB,SB,VB,WB,bC,cC,fC,gC,nC,oC,rC,sC,zC,AC,DC,EC,LC,MC,PC,QC,XC,YC,$C,aD,hD,iD,lD,mD,tD,uD,xD,yD,FD,GD,JD,KD,RD,SD,VD,WD,bE,cE,fE,gE,pE,qE,tE,uE,DF,FF,IE,KE,JE,LE,dF,fF,eF,gF,iF,kF,jF,lF,EF,GF,wP,CP,DP,wH,xH,yH,GT,iH,xP,BH,CH,NT,PT,DH,TT,yP,QT,IH,JH,MH,OT,UT,SI,TI,UI,XI,YI,ZI,cJ,dJ,gJ,BJ,CJ,DJ,GJ,HJ,IJ,NJ,OJ,RJ,JP,MP,VK,WK,KP,NP,ZK,_K,LP,OP,dL,gL,CL,DL,GL,HL,ML,PL,VL,WL,ZL,_L,dM,gM,FM,IM,GM,JT,LT,JM,RT,HM,KM,KT,ST,MT,cN,fN,gN,dN,hN,eN,kO,nO,qO,tO,CO,zO,wO,lO,oO,rO,uO,DO,AO,xO,mO,EO,pO,BO,sO,vO,yO,SR,VR,YR,hS,eS,bS,kS,TR,WR,ZR,iS,fS,cS,lS,UR,gS,XR,dS,_R,jS,mS,bP,eP,hP,fP,cP,gP,dP,iP,jP,kP,uP,PP,QP,RP,nQ,sQ,hQ,qQ,vQ,kQ,tQ,oQ,iQ,wQ,lQ,uQ,xQ,pQ,jQ,mQ,rQ,QQ,TQ,YQ,WP,_P,SP,YP,UP,$Q,XP,ZP,$P,TP,VP,wR,xR,HT,iR,jR,IT,sR,tR,tS,wS,uS,xS,vS,yS,ZS,$S,bT,_S,aT,cT,iI,nI,hI,bI,cI,TH,UH,_T,$T,YT,ZT,AU,BU,CU,EU,GU,rU,sU,uU,DU,HU,FU,hU,mU,iU,kU,nU,jU,oU,lU,PU,TU,RU,QU,SU,UU,aV,bV,cV,kV,oV,sV,eV,gV,iV,mV,qV,uV,fV,IV,hV,LV,jV,OV,dV,lV,nV,pV,rV,tV,vV,ZV,cW,hW,uW,vW,wW,BW,yW,HW,xW,zW,CW,NW,OW,PW,TW,RW,XW,QW,SW,UW,dX,iX,kX,mX,uX,oX,qX,sX,wX,yX,AX,GX,HX,IX,gX,CX,eX,bX,cX,jX,lX,nX,PX,vX,SX,pX,VX,rX,YX,tX,$X,xX,cY,zX,fY,BX,iY,lY,mY,pY,qY,tY,uY,DX,hX,fX,BY,EY,JY,OY,TY,YY,bZ,gZ,lZ,qZ,vZ,AZ,FZ,R1,V1,a2,e2,k3,H6,I6,J6,K6,M6,N6,S6,T6,U6,V6,X6,Y6,b7,c7,d7,e7,g7,h7,m7,n7,o7,p7,r7,s7,Y7,b8,G9,I9,K9,H9,J9,L9,g_,F_,Eca,Eca,Eca,Eca,Eca,Eca,Eca,Eca,Eca,Eca,Eca,Eca,Eca,Eca,Eca,Eca,Eca,Eca,Eca,Eca,Eca,Eca,Eca,Eca,Eca,Eca,Eca,Eca,Eca,Eca,Eca,Eca,Eca,Eca,Eca,Eca,Eca,Eca,Eca,Eca,Eca,Eca,Eca,Eca,Eca,Eca,Eca,Eca,Eca,Eca,Eca,Eca,Eca,Eca,Eca,Eca,Eca,Eca,Eca,Eca,Eca,Eca,Eca,Eca,Eca,Eca,Eca,Eca,Eca,Eca,Eca,Eca,Eca,Eca,Eca,Eca,Eca,Eca,Eca,Eca,Eca,Eca,Eca,Eca,Eca,Eca,Eca,Eca,Eca,Eca,Eca,Eca,Eca,Eca,Eca,Eca,Eca,Eca,Eca,Eca,Eca,Eca,Eca,Eca,Eca,Eca,Eca,Eca,Eca,Eca,Eca,Eca,Eca,Eca,Eca,Eca,Eca,Eca,Eca,Eca,Eca,Eca,Eca,Eca,Eca,Eca,Eca,Eca,Eca,Eca,Eca,Eca,Eca,Eca,Eca,Eca,Eca,Eca,Eca,Eca,Eca,Eca,Eca,Eca,Eca,Eca,Eca,Eca,Eca,Eca,Eca,Eca,Eca,Eca,Eca,Eca,Eca,Eca,Eca,Eca,Eca,Eca];var qc=[Fca,jT,s4,t4,u4,v4,w4,x4,y4,z4,A4,B4,C4,H4,I4,J4,K4,L4,M4,N4,O4,P4,Q4,R4,e5,g5,r5,t5,C5,D5,E5,G5,I5,$5,a6,b6,d6,f6,N7,T7,Fca,Fca,Fca,Fca,Fca,Fca,Fca,Fca,Fca,Fca,Fca,Fca,Fca,Fca,Fca,Fca,Fca,Fca,Fca,Fca,Fca,Fca,Fca,Fca];var rc=[Gca,xd,yd,$2,a3,Vd,d3,fe,nG,jH,EM,rS,sS,fT,gT,hT,tU,XU,U_,v0,S1,p3,r3,s3,o3,X1,Y1,b2,c3,g2,h2,B5,N9,P9,R9,X9,Z9,T9,V9,_5,O9,Q9,S9,Y9,_9,U9,W9,F6,G6,L6,Q6,R6,W6,$6,a7,f7,k7,l7,q7,a9,b9,d9,C9,E9,D9,F9,U8,V8,X8,i9,j9,l9,q9,r9,t9,WZ,E_,Gca,Gca,Gca,Gca,Gca,Gca,Gca,Gca,Gca,Gca,Gca,Gca,Gca,Gca,Gca,Gca,Gca,Gca,Gca,Gca,Gca,Gca,Gca,Gca,Gca,Gca,Gca,Gca,Gca,Gca,Gca,Gca,Gca,Gca,Gca,Gca,Gca,Gca,Gca,Gca,Gca,Gca,Gca,Gca,Gca,Gca,Gca,Gca,Gca,Gca,Gca];var sc=[Hca,i4,n4,$4,a5,f5,l5,o5,p5,s5,x5,P8,$8,c9,E8,T8,W8,h9,k9,p9,s9,a_,Hca,Hca,Hca,Hca,Hca,Hca,Hca,Hca,Hca,Hca];var tc=[Ica,Y2,b3,f3,nP,fH,CT,NI,yJ,OK,vL,SL,DM,_M,$M,uN,UN,gO,$O,aQ,OR,qS,VS,eT,iT,kT,nT,oT,g$,h$,i$,s1,y0,x0,w0,z0,l3,q3,T1,u3,c2,k4,p4,W7,$7,J8,L8,O8,t8,y8,A8,D8,YZ,ZZ,_Z,p1,Ica,Ica,Ica,Ica,Ica,Ica,Ica,Ica];var uc=[Jca,K5,h6,Z8,_8,R8,S8,f9,g9,n9,o9,Jca,Jca,Jca,Jca,Jca];var vc=[Kca,Td,x$,w$,v$,m3,Z2,X7,a8,Kca,Kca,Kca,Kca,Kca,Kca,Kca];var wc=[Lca,b_];var xc=[Mca,VZ];var yc=[Nca,mT];var zc=[Oca,$c,ud,md,nd,Gd,Wd,Xd,mE,_D,OD,CD,qD,eD,UC,IC,wC,kC,_B,OB,CB,qB,eB,UA,IA,wA,kA,_z,Oz,Cz,qz,ez,Uy,Iy,wy,ky,_x,Ox,Cx,qx,ex,Uw,Iw,ww,kw,_v,Ov,Cv,qv,ev,Uu,Iu,wu,ku,_t,Ot,Ct,qt,et,Us,Is,ws,ks,_r,Or,Cr,qr,er,Uq,Iq,wq,kq,_p,Op,Cp,qp,ep,Uo,Io,wo,ko,Zn,Nn,Bn,pn,cn,Sm,Gm,um,im,Yl,Ml,Al,ol,cl,Sk,Gk,uk,ik,Yj,Mj,Aj,oj,cj,Si,Gi,ui,ii,Yh,Mh,Ah,oh,ch,Sg,Gg,ug,ig,Yf,Mf,Af,jf,CF,of,EP,AT,DT,lT,t3,U1,Z1,v3,e3,d2,i2,g3,I8,K8,M8,x8,z8,B8,NZ,PZ,TZ,XZ,c_,d_,Oca,Oca,Oca,Oca,Oca,Oca,Oca,Oca,Oca,Oca,Oca,Oca,Oca,Oca,Oca,Oca,Oca,Oca,Oca,Oca,Oca,Oca,Oca,Oca,Oca,Oca,Oca,Oca,Oca,Oca,Oca,Oca,Oca,Oca,Oca,Oca,Oca,Oca,Oca,Oca,Oca,Oca,Oca,Oca,Oca,Oca,Oca,Oca,Oca,Oca,Oca,Oca,Oca,Oca,Oca,Oca,Oca,Oca,Oca,Oca,Oca,Oca,Oca,Oca,Oca,Oca,Oca,Oca,Oca,Oca,Oca,Oca,Oca,Oca,Oca,Oca,Oca,Oca,Oca,Oca,Oca,Oca,Oca,Oca,Oca,Oca,Oca,Oca,Oca,Oca,Oca,Oca,Oca,Oca,Oca,Oca,Oca,Oca,Oca,Oca,Oca,Oca,Oca,Oca,Oca,Oca,Oca,Oca,Oca];var Ac=[Pca,LF];var Bc=[Qca,LZ,RZ,Qca];var Cc=[Rca,N8,u8,v8,w8,C8,$Z,e_];var Dc=[Sca,re,Ee,AP,ET,FT,BT,bN,fU,AW,OZ,QZ,UZ,h_,i_,j_,k_,l_,m_,n_,o_,p_,q_,r_,s_,t_,u_,v_,w_,x_,y_,z_,C_,Sca,Sca,Sca,Sca,Sca,Sca,Sca,Sca,Sca,Sca,Sca,Sca,Sca,Sca,Sca,Sca,Sca,Sca,Sca,Sca,Sca,Sca,Sca,Sca,Sca,Sca,Sca,Sca,Sca,Sca,Sca];var Ec=[Tca,Uca,B$,C$];var Fc=[Vca,D_];var Gc=[Wca,h5,k5,u5,w5,Wca,Wca,Wca];var Hc=[Xca,Ud,le,zP,BP,tW,MW,k$,l$,n$,n3,_2,j4,o4,A_,G_];return{___cxa_can_catch:y$,_fflush:G0,___cxa_is_pointer_type:z$,_i64Add:Tba,_memmove:Sba,_i64Subtract:Pba,_memset:Qba,_malloc:w1,_memcpy:Rba,___getTypeName:H_,_bitshift64Lshr:Uba,_free:x1,___errno_location:M$,_bitshift64Shl:Vba,__GLOBAL__I_000101:K1,__GLOBAL__sub_I_ARNote_cpp:YE,__GLOBAL__sub_I_bindings_cpp:KZ,__GLOBAL__sub_I_bind_cpp:J_,__GLOBAL__sub_I_iostream_cpp:L1,runPostSets:Oba,stackAlloc:Ic,stackSave:Jc,stackRestore:Kc,establishStackSpace:Lc,setThrew:Mc,setTempRet0:Pc,getTempRet0:Qc,dynCall_iiiiiiii:dca,dynCall_viiiii:eca,dynCall_iiiiiid:fca,dynCall_vi:gca,dynCall_vii:hca,dynCall_iiiiiii:ica,dynCall_ii:jca,dynCall_iiiiii:kca,dynCall_iiii:lca,dynCall_iiiiiiiii:mca,dynCall_viiiiii:nca,dynCall_iiid:oca,dynCall_di:pca,dynCall_iid:qca,dynCall_iii:rca,dynCall_d:sca,dynCall_i:tca,dynCall_iiiii:uca,dynCall_viii:vca,dynCall_v:wca,dynCall_viid:xca,dynCall_iiiiid:yca,dynCall_viiii:zca}}) + + +// EMSCRIPTEN_END_ASM +(Module.asmGlobalArg,Module.asmLibraryArg,buffer);var ___cxa_can_catch=Module["___cxa_can_catch"]=asm["___cxa_can_catch"];var __GLOBAL__sub_I_bind_cpp=Module["__GLOBAL__sub_I_bind_cpp"]=asm["__GLOBAL__sub_I_bind_cpp"];var _fflush=Module["_fflush"]=asm["_fflush"];var runPostSets=Module["runPostSets"]=asm["runPostSets"];var ___cxa_is_pointer_type=Module["___cxa_is_pointer_type"]=asm["___cxa_is_pointer_type"];var _i64Add=Module["_i64Add"]=asm["_i64Add"];var _memmove=Module["_memmove"]=asm["_memmove"];var __GLOBAL__sub_I_bindings_cpp=Module["__GLOBAL__sub_I_bindings_cpp"]=asm["__GLOBAL__sub_I_bindings_cpp"];var _i64Subtract=Module["_i64Subtract"]=asm["_i64Subtract"];var _memset=Module["_memset"]=asm["_memset"];var _malloc=Module["_malloc"]=asm["_malloc"];var _memcpy=Module["_memcpy"]=asm["_memcpy"];var ___getTypeName=Module["___getTypeName"]=asm["___getTypeName"];var __GLOBAL__sub_I_ARNote_cpp=Module["__GLOBAL__sub_I_ARNote_cpp"]=asm["__GLOBAL__sub_I_ARNote_cpp"];var __GLOBAL__sub_I_iostream_cpp=Module["__GLOBAL__sub_I_iostream_cpp"]=asm["__GLOBAL__sub_I_iostream_cpp"];var _bitshift64Lshr=Module["_bitshift64Lshr"]=asm["_bitshift64Lshr"];var _free=Module["_free"]=asm["_free"];var __GLOBAL__I_000101=Module["__GLOBAL__I_000101"]=asm["__GLOBAL__I_000101"];var ___errno_location=Module["___errno_location"]=asm["___errno_location"];var _bitshift64Shl=Module["_bitshift64Shl"]=asm["_bitshift64Shl"];var dynCall_iiiiiiii=Module["dynCall_iiiiiiii"]=asm["dynCall_iiiiiiii"];var dynCall_viiiii=Module["dynCall_viiiii"]=asm["dynCall_viiiii"];var dynCall_iiiiiid=Module["dynCall_iiiiiid"]=asm["dynCall_iiiiiid"];var dynCall_vi=Module["dynCall_vi"]=asm["dynCall_vi"];var dynCall_vii=Module["dynCall_vii"]=asm["dynCall_vii"];var dynCall_iiiiiii=Module["dynCall_iiiiiii"]=asm["dynCall_iiiiiii"];var dynCall_ii=Module["dynCall_ii"]=asm["dynCall_ii"];var dynCall_iiiiii=Module["dynCall_iiiiii"]=asm["dynCall_iiiiii"];var dynCall_iiii=Module["dynCall_iiii"]=asm["dynCall_iiii"];var dynCall_iiiiiiiii=Module["dynCall_iiiiiiiii"]=asm["dynCall_iiiiiiiii"];var dynCall_viiiiii=Module["dynCall_viiiiii"]=asm["dynCall_viiiiii"];var dynCall_iiid=Module["dynCall_iiid"]=asm["dynCall_iiid"];var dynCall_di=Module["dynCall_di"]=asm["dynCall_di"];var dynCall_iid=Module["dynCall_iid"]=asm["dynCall_iid"];var dynCall_iii=Module["dynCall_iii"]=asm["dynCall_iii"];var dynCall_d=Module["dynCall_d"]=asm["dynCall_d"];var dynCall_i=Module["dynCall_i"]=asm["dynCall_i"];var dynCall_iiiii=Module["dynCall_iiiii"]=asm["dynCall_iiiii"];var dynCall_viii=Module["dynCall_viii"]=asm["dynCall_viii"];var dynCall_v=Module["dynCall_v"]=asm["dynCall_v"];var dynCall_viid=Module["dynCall_viid"]=asm["dynCall_viid"];var dynCall_iiiiid=Module["dynCall_iiiiid"]=asm["dynCall_iiiiid"];var dynCall_viiii=Module["dynCall_viiii"]=asm["dynCall_viiii"];Runtime.stackAlloc=asm["stackAlloc"];Runtime.stackSave=asm["stackSave"];Runtime.stackRestore=asm["stackRestore"];Runtime.establishStackSpace=asm["establishStackSpace"];Runtime.setTempRet0=asm["setTempRet0"];Runtime.getTempRet0=asm["getTempRet0"];function ExitStatus(status){this.name="ExitStatus";this.message="Program terminated with exit("+status+")";this.status=status}ExitStatus.prototype=new Error;ExitStatus.prototype.constructor=ExitStatus;var initialStackTop;var preloadStartTime=null;var calledMain=false;dependenciesFulfilled=function runCaller(){if(!Module["calledRun"])run();if(!Module["calledRun"])dependenciesFulfilled=runCaller};Module["callMain"]=Module.callMain=function callMain(args){assert(runDependencies==0,"cannot call main when async dependencies remain! (listen on __ATMAIN__)");assert(__ATPRERUN__.length==0,"cannot call main when preRun functions remain to be called");args=args||[];ensureInitRuntime();var argc=args.length+1;function pad(){for(var i=0;i<4-1;i++){argv.push(0)}}var argv=[allocate(intArrayFromString(Module["thisProgram"]),"i8",ALLOC_NORMAL)];pad();for(var i=0;i0){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"]();if(Module["_main"]&&shouldRunNow)Module["callMain"](args);postRun()}if(Module["setStatus"]){Module["setStatus"]("Running...");setTimeout((function(){setTimeout((function(){Module["setStatus"]("")}),1);doRun()}),1)}else{doRun()}}Module["run"]=Module.run=run;function exit(status,implicit){if(implicit&&Module["noExitRuntime"]){return}if(Module["noExitRuntime"]){}else{ABORT=true;EXITSTATUS=status;STACKTOP=initialStackTop;exitRuntime();if(Module["onExit"])Module["onExit"](status)}if(ENVIRONMENT_IS_NODE){process["stdout"]["once"]("drain",(function(){process["exit"](status)}));console.log(" ");setTimeout((function(){process["exit"](status)}),500)}else if(ENVIRONMENT_IS_SHELL&&typeof quit==="function"){quit(status)}throw new ExitStatus(status)}Module["exit"]=Module.exit=exit;var abortDecorators=[];function abort(what){if(what!==undefined){Module.print(what);Module.printErr(what);what=JSON.stringify(what)}else{what=""}ABORT=true;EXITSTATUS=1;var extra="\nIf this abort() is unexpected, build with -s ASSERTIONS=1 which can give more information.";var output="abort("+what+") at "+stackTrace()+extra;if(abortDecorators){abortDecorators.forEach((function(decorator){output=decorator(output,what)}))}throw output}Module["abort"]=Module.abort=abort;if(Module["preInit"]){if(typeof Module["preInit"]=="function")Module["preInit"]=[Module["preInit"]];while(Module["preInit"].length>0){Module["preInit"].pop()()}}var shouldRunNow=true;if(Module["noInitialRun"]){shouldRunNow=false}run() + + + + diff --git a/guidoar-dev/lang/javascript/src/bindings.cpp b/guidoar-dev/lang/javascript/src/bindings.cpp new file mode 100644 index 000000000..5ed5ec4ac --- /dev/null +++ b/guidoar-dev/lang/javascript/src/bindings.cpp @@ -0,0 +1,91 @@ +/* + GUIDO AR Library + Copyright (C) 2016 Grame + + This Source Code Form is subject to the terms of the Mozilla Public + License, v. 2.0. If a copy of the MPL was not distributed with this + file, You can obtain one at http://mozilla.org/MPL/2.0/. + + Grame Research Laboratory, 11, cours de Verdun Gensoul 69002 Lyon - France + research@grame.fr + +*/ + +#include +#include +#include "libguidoar.h" +#include "wrapper.h" + +using namespace emscripten; +using namespace guido; + +/* + * Structure and enum binding. + * This structures can be created and manipulated in javascript side like json object and passed to C++ method. + */ +EMSCRIPTEN_BINDINGS(CStruct) { + emscripten::value_object("garOut") + .field("err", &garOut::err) + .field("str", &garOut::str); + + emscripten::value_object("rational") + .field("num", &rational::fNumerator) + .field("denom", &rational::fDenominator); + + emscripten::enum_("garErr") + .value("kNoErr", garErr::kNoErr) + .value("kInvalidFile", garErr::kInvalidFile) + .value("kInvalidArgument", garErr::kInvalidArgument) + .value("kOperationFailed", garErr::kOperationFailed); + + emscripten::enum_("TApplyMode") + .value("kApplyOnce", TApplyMode::kApplyOnce) + .value("kApplyForwardLoop", TApplyMode::kApplyForwardLoop) + .value("kApplyForwardBackwardLoop", TApplyMode::kApplyForwardBackwardLoop); + + emscripten::enum_("chordPitchMode") + .value("kUseLowest", chordPitchMode::kUseLowest) + .value("kUseHighest", chordPitchMode::kUseHighest); +} + +/* + * C interface bindings. + * This classes can be used in javascript side. + */ +EMSCRIPTEN_BINDINGS(GuidoAR) +{ + function("guidoarVersion", guidoarVersion); + function("guidoarVersionString", guidoarVersionString); + + function("gmn2unrolled", &gmn2unrolled); + function("gmnVTranpose", &gmnVTranpose); + function("gmnGTranpose", &gmnGTranpose); + function("gmnVTop", &gmnVTop); + function("gmnGTop", &gmnGTop); + function("gmnVBottom", &gmnVBottom); + function("gmnGBottom", &gmnGBottom); + function("gmnVHead", &gmnVHead); + function("gmnGHead", &gmnGHead); + function("gmnVEHead", &gmnVEHead); + function("gmnGEHead", &gmnGEHead); + function("gmnVTail", &gmnVTail); + function("gmnGTail", &gmnGTail); + function("gmnVETail", &gmnVETail); + function("gmnGETail", &gmnGETail); + function("gmnVETail", &gmnVETail); + function("gmnGETail", &gmnGETail); + function("gmnGSeq", &gmnGSeq); + function("gmnGPar", &gmnGPar); + function("gmnGRPar", &gmnGRPar); + function("gmnGMirror", &gmnGMirror); + function("gmnGSetDuration", &gmnGSetDuration); + function("gmnApplyRythm", &gmnApplyRythm); + function("gmnApplyPitch", &gmnApplyPitch); + function("gmnVSetDuration", &gmnVSetDuration); + function("gmnVMultDuration",&gmnVMultDuration); + + function("gmncheck", &gmncheck); + function("gmnDuration", &gmnDuration); + function("gmnEv2Time", &gmnEv2Time); + +} diff --git a/guidoar-dev/lang/javascript/src/wrapper.cpp b/guidoar-dev/lang/javascript/src/wrapper.cpp new file mode 100644 index 000000000..25d8655b6 --- /dev/null +++ b/guidoar-dev/lang/javascript/src/wrapper.cpp @@ -0,0 +1,276 @@ +/* + GUIDO AR Library + Copyright (C) 2016 Grame + + This Source Code Form is subject to the terms of the Mozilla Public + License, v. 2.0. If a copy of the MPL was not distributed with this + file, You can obtain one at http://mozilla.org/MPL/2.0/. + + Grame Research Laboratory, 11, cours de Verdun Gensoul 69002 Lyon - France + research@grame.fr + +*/ + +#include +#include "wrapper.h" + +using namespace std; +using namespace guido; + +string guidoarVersionString() { return guidoarVersionStr(); } + + +//-------------------------------------------------------------------------------- +// operations on scores +//-------------------------------------------------------------------------------- +/*! \brief a wrapper to guido2unrolled */ +garOut gmn2unrolled(const string& gmn) +{ + stringstream stream; + garOut out; + out.err = guido2unrolled(gmn.c_str(), stream); + if (out.err == kNoErr) out.str = stream.str(); + return out; +} + +/*! \brief a wrapper to guidoVTranpose */ +garOut gmnVTranpose(const string& gmn, int interval) +{ + stringstream stream; + garOut out; + out.err = guidoVTranpose(gmn.c_str(), interval, stream); + if (out.err == kNoErr) out.str = stream.str(); + return out; +} + +/*! \brief a wrapper to guidoGTranpose */ +garOut gmnGTranpose(const string& gmn, const string& gmnSpec) +{ + stringstream stream; + garOut out; + out.err = guidoGTranpose(gmn.c_str(), gmnSpec.c_str(), stream); + if (out.err == kNoErr) out.str = stream.str(); + return out; +} + +/*! \brief a wrapper to guidoVTop */ +garOut gmnVTop(const string& gmn, int nvoices) +{ + stringstream stream; + garOut out; + out.err = guidoVTop(gmn.c_str(), nvoices, stream); + if (out.err == kNoErr) out.str = stream.str(); + return out; +} + +/*! \brief a wrapper to guidoGTop */ +garOut gmnGTop(const string& gmn, const string& gmnSpec) +{ + stringstream stream; + garOut out; + out.err = guidoGTop(gmn.c_str(), gmnSpec.c_str(), stream); + if (out.err == kNoErr) out.str = stream.str(); + return out; +} + +/*! \brief a wrapper to guidoVBottom */ +garOut gmnVBottom(const string& gmn, int nvoices) +{ + stringstream stream; + garOut out; + out.err = guidoVBottom(gmn.c_str(), nvoices, stream); + if (out.err == kNoErr) out.str = stream.str(); + return out; +} + +/*! \brief a wrapper to guidoGBottom */ +garOut gmnGBottom(const string& gmn, const string& gmnSpec) +{ + stringstream stream; + garOut out; + out.err = guidoGBottom(gmn.c_str(), gmnSpec.c_str(), stream); + if (out.err == kNoErr) out.str = stream.str(); + return out; +} + +/*! \brief a wrapper to guidoVHead */ +garOut gmnVHead(const string& gmn, rational duration) +{ + stringstream stream; + garOut out; + out.err = guidoVHead(gmn.c_str(), duration, stream); + if (out.err == kNoErr) out.str = stream.str(); + return out; +} + +/*! \brief a wrapper to guidoGHead */ +garOut gmnGHead(const string& gmn, const string& gmnSpec) +{ + stringstream stream; + garOut out; + out.err = guidoGHead(gmn.c_str(), gmnSpec.c_str(), stream); + if (out.err == kNoErr) out.str = stream.str(); + return out; +} + +/*! \brief a wrapper to guidoVEHead */ +garOut gmnVEHead(const string& gmn, int n) +{ + stringstream stream; + garOut out; + out.err = guidoVEHead(gmn.c_str(), n, stream); + if (out.err == kNoErr) out.str = stream.str(); + return out; +} + +/*! \brief a wrapper to guidoGEHead */ +garOut gmnGEHead(const string& gmn, const string& gmnSpec) +{ + stringstream stream; + garOut out; + out.err = guidoGEHead(gmn.c_str(), gmnSpec.c_str(), stream); + if (out.err == kNoErr) out.str = stream.str(); + return out; +} + +/*! \brief a wrapper to guidoVTail */ +garOut gmnVTail(const string& gmn, rational duration) +{ + stringstream stream; + garOut out; + out.err = guidoVTail(gmn.c_str(), duration, stream); + if (out.err == kNoErr) out.str = stream.str(); + return out; +} + +/*! \brief a wrapper to guidoGTail */ +garOut gmnGTail(const string& gmn, const string& gmnSpec) +{ + stringstream stream; + garOut out; + out.err = guidoGTail(gmn.c_str(), gmnSpec.c_str(), stream); + if (out.err == kNoErr) out.str = stream.str(); + return out; +} + +/*! \brief a wrapper to guidoVETail */ +garOut gmnVETail(const string& gmn, int n) +{ + stringstream stream; + garOut out; + out.err = guidoVETail(gmn.c_str(), n, stream); + if (out.err == kNoErr) out.str = stream.str(); + return out; +} + +/*! \brief a wrapper to guidoGETail */ +garOut gmnGETail(const string& gmn, const string& gmnSpec) +{ + stringstream stream; + garOut out; + out.err = guidoGETail(gmn.c_str(), gmnSpec.c_str(), stream); + if (out.err == kNoErr) out.str = stream.str(); + return out; +} + +/*! \brief a wrapper to guidoGSeq */ +garOut gmnGSeq(const string& gmn1, const string& gmn2) +{ + stringstream stream; + garOut out; + out.err = guidoGSeq(gmn1.c_str(), gmn2.c_str(), stream); + if (out.err == kNoErr) out.str = stream.str(); + return out; +} + +/*! \brief a wrapper to guidoGPar */ +garOut gmnGPar (const string& gmn1, const string& gmn2) +{ + stringstream stream; + garOut out; + out.err = guidoGPar(gmn1.c_str(), gmn2.c_str(), stream); + if (out.err == kNoErr) out.str = stream.str(); + return out; +} + +/*! \brief a wrapper to guidoGRPar */ +garOut gmnGRPar(const string& gmn1, const string& gmn2) +{ + stringstream stream; + garOut out; + out.err = guidoGRPar(gmn1.c_str(), gmn2.c_str(), stream); + if (out.err == kNoErr) out.str = stream.str(); + return out; +} + +/*! \brief a wrapper to guidoGMirror */ +garOut gmnGMirror(const string& gmn1, const string& gmn2) +{ + stringstream stream; + garOut out; + out.err = guidoGMirror(gmn1.c_str(), gmn2.c_str(), stream); + if (out.err == kNoErr) out.str = stream.str(); + return out; +} + +/*! \brief a wrapper to guidoGSetDuration */ +garOut gmnGSetDuration(const string& gmn, const string& gmnSpec) +{ + stringstream stream; + garOut out; + out.err = guidoGSetDuration(gmn.c_str(), gmnSpec.c_str(), stream); + if (out.err == kNoErr) out.str = stream.str(); + return out; +} + +/*! \brief a wrapper to guidoApplyRythm */ +garOut gmnApplyRythm(const string& gmn, const string& gmnSpec, TApplyMode mode) +{ + stringstream stream; + garOut out; + out.err = guidoApplyRythm(gmn.c_str(), gmnSpec.c_str(), mode, stream); + if (out.err == kNoErr) out.str = stream.str(); + return out; +} + +/*! \brief a wrapper to guidoApplyPitch */ +garOut gmnApplyPitch(const string& gmn, const string& gmnSpec, TApplyMode mode, chordPitchMode pmode) +{ + stringstream stream; + garOut out; + out.err = guidoApplyPitch(gmn.c_str(), gmnSpec.c_str(), mode, pmode, stream); + if (out.err == kNoErr) out.str = stream.str(); + return out; +} + +/*! \brief a wrapper to guidoVSetDuration */ +garOut gmnVSetDuration(const string& gmn, rational duration) +{ + stringstream stream; + garOut out; + out.err = guidoVSetDuration(gmn.c_str(), duration, stream); + if (out.err == kNoErr) out.str = stream.str(); + return out; +} + +/*! \brief a wrapper to guidoVMultDuration */ +garOut gmnVMultDuration(const string& gmn, float mult) +{ + stringstream stream; + garOut out; + out.err = guidoVMultDuration(gmn.c_str(), mult, stream); + if (out.err == kNoErr) out.str = stream.str(); + return out; +} + +/*! \brief a wrapper to guidocheck */ +bool gmncheck(const std::string& gmn) { return guidocheck(gmn.c_str()); } + +/*! \brief a wrapper to guidoDuration */ +rational gmnDuration(const std::string& gmn) { return guidoDuration(gmn.c_str()); } + +/*! \brief a wrapper to guidoEv2Time */ +rational gmnEv2Time(const std::string& gmn, unsigned int index, unsigned int voice) +{ + return guidoEv2Time (gmn.c_str(), index, voice); +} diff --git a/guidoar-dev/lang/javascript/src/wrapper.h b/guidoar-dev/lang/javascript/src/wrapper.h new file mode 100644 index 000000000..ba91a513b --- /dev/null +++ b/guidoar-dev/lang/javascript/src/wrapper.h @@ -0,0 +1,116 @@ +/* + GUIDO AR Library + Copyright (C) 2016 Grame + + This Source Code Form is subject to the terms of the Mozilla Public + License, v. 2.0. If a copy of the MPL was not distributed with this + file, You can obtain one at http://mozilla.org/MPL/2.0/. + + Grame Research Laboratory, 11, cours de Verdun Gensoul 69002 Lyon - France + research@grame.fr + +*/ + +#include +#include "libguidoar.h" + + +typedef struct garOut { + guido::garErr err; // the error code + std::string str; // the output string +} garOut; + + +std::string guidoarVersionString(); + +//-------------------------------------------------------------------------------- +// operations on scores +//-------------------------------------------------------------------------------- +/*! \brief a wrapper to guido2unrolled */ +garOut gmn2unrolled(const std::string& gmn); + +/*! \brief a wrapper to guidoVTranpose */ +garOut gmnVTranpose(const std::string& gmn, int interval); + +/*! \brief a wrapper to guidoGTranpose */ +garOut gmnGTranpose(const std::string& gmn, const std::string& gmnSpec); + +/*! \brief a wrapper to guidoVTop */ +garOut gmnVTop(const std::string& gmn, int nvoices); + +/*! \brief a wrapper to guidoGTop */ +garOut gmnGTop(const std::string& gmn, const std::string& gmnSpec); + +/*! \brief a wrapper to guidoVBottom */ +garOut gmnVBottom(const std::string& gmn, int nvoices); + +/*! \brief a wrapper to guidoGBottom */ +garOut gmnGBottom(const std::string& gmn, const std::string& gmnSpec); + +/*! \brief a wrapper to guidoVHead */ +garOut gmnVHead(const std::string& gmn, rational duration); + +/*! \brief a wrapper to guidoGHead */ +garOut gmnGHead(const std::string& gmn, const std::string& gmnSpec); + +/*! \brief a wrapper to guidoVEHead */ +garOut gmnVEHead(const std::string& gmn, int n); + +/*! \brief a wrapper to guidoGEHead */ +garOut gmnGEHead(const std::string& gmn, const std::string& gmnSpec); + +/*! \brief a wrapper to guidoVTail */ +garOut gmnVTail(const std::string& gmn, rational duration); + +/*! \brief a wrapper to guidoGTail */ +garOut gmnGTail(const std::string& gmn, const std::string& gmnSpec); + +/*! \brief a wrapper to guidoVETail */ +garOut gmnVETail(const std::string& gmn, int n); + +/*! \brief a wrapper to guidoGETail */ +garOut gmnGETail(const std::string& gmn, const std::string& gmnSpec); + +/*! \brief a wrapper to guidoVETail */ +garOut gmnVETail(const std::string& gmn, int n); + +/*! \brief a wrapper to guidoGETail */ +garOut gmnGETail(const std::string& gmn, const std::string& gmnSpec); + +/*! \brief a wrapper to guidoGSeq */ +garOut gmnGSeq(const std::string& gmn1, const std::string& gmn2); + +/*! \brief a wrapper to guidoGPar */ +garOut gmnGPar (const std::string& gmn1, const std::string& gmn2); + +/*! \brief a wrapper to guidoGRPar */ +garOut gmnGRPar(const std::string& gmn1, const std::string& gmn2); + +/*! \brief a wrapper to guidoGMirror */ +garOut gmnGMirror(const std::string& gmn1, const std::string& gmn2); + +/*! \brief a wrapper to guidoGSetDuration */ +garOut gmnGSetDuration(const std::string& gmn, const std::string& gmnSpec); + +/*! \brief a wrapper to guidoApplyRythm */ +garOut gmnApplyRythm(const std::string& gmn, const std::string& gmnSpec, guido::TApplyMode mode); + +/*! \brief a wrapper to guidoApplyPitch */ +garOut gmnApplyPitch(const std::string& gmn, const std::string& gmnSpec, guido::TApplyMode mode, guido::chordPitchMode pmode); + +/*! \brief a wrapper to guidoVSetDuration */ +garOut gmnVSetDuration(const std::string& gmn, rational duration); + +/*! \brief a wrapper to guidoVMultDuration */ +garOut gmnVMultDuration(const std::string& gmn, float mult); + +/*! \brief a wrapper to guidocheck */ +bool gmncheck(const std::string& gmn); + +/*! \brief a wrapper to guidoDuration */ +rational gmnDuration(const std::string& gmn); + +/*! \brief a wrapper to guidoEv2Time */ +rational gmnEv2Time(const std::string& gmn, unsigned int index, unsigned int voice); + + diff --git a/guidoar-dev/lang/javascript/tests.js b/guidoar-dev/lang/javascript/tests.js new file mode 100644 index 000000000..716c1eb48 --- /dev/null +++ b/guidoar-dev/lang/javascript/tests.js @@ -0,0 +1,26 @@ +/* + a simple test file + intended to verify that the js interface works + should be launched using 'node' +*/ + + +function debugmsg(str){ + typeof console !== 'undefined' ? console.log(str) : print(str); +} + +var gar = require('./libGuidoAR.js'); + +debugmsg ("version " + gar.guidoarVersionString()); +var seq = gar.gmnGSeq("[a b]", "[c d]"); +debugmsg (seq.err.value); +debugmsg (seq.str); + +var par = gar.gmnGPar("[a b]", "[c d]"); +debugmsg (par.err.value); +debugmsg (par.str); + +var dur = gar.gmnDuration ("[ a a a a g/1 g g g]"); +debugmsg (dur); + + diff --git a/guidoar-dev/lang/typescript/libGuidoAR.d.ts b/guidoar-dev/lang/typescript/libGuidoAR.d.ts new file mode 100644 index 000000000..9b3b68f83 --- /dev/null +++ b/guidoar-dev/lang/typescript/libGuidoAR.d.ts @@ -0,0 +1,60 @@ +declare enum garErr {} +declare enum TApplyMode {} +declare enum chordPitchMode {} + +interface garOut { + err: garErr; + str: string; +} + +interface rational { + num : number; + denom : number; +} + +interface GuidoAR { + guidoarVersion(): any; + guidoarVersionString(): string; + + gmn2unrolled(gmn: string): garOut; + + gmnVTranpose(gmn: string, interval: number) : garOut; + gmnGTranpose(gmn: string, gmnSpec: string) : garOut; + + gmnVTop(gmn: string, nvoices: number): garOut; + gmnGTop(gmn: string, gmnSpec: string): garOut; + + gmnVBottom(gmn: string, nvoices: number): garOut; + gmnGBottom(gmn: string, gmnSpec: string): garOut; + + gmnVHead(gmn: string, duration: rational): garOut; + gmnGHead(gmn: string, gmnSpec: string): garOut; + + gmnVEHead(gmn: string, n: number): garOut; + gmnGEHead(gmn: string, gmnSpec: string): garOut; + + gmnVTail(gmn: string, duration: rational): garOut; + gmnGTail(gmn: string, gmnSpec: string): garOut; + + gmnVETail(gmn: string, n: number): garOut; + gmnGETail(gmn: string, gmnSpec: string): garOut; + + gmnGSeq(gmn1: string, gmn2: string): garOut; + + gmnGPar(gmn1: string, gmn2: string) : garOut; + gmnGRPar(gmn1: string, gmn2: string): garOut; + + gmnGMirror(gmn1: string, gmn2: string): garOut; + + gmnGSetDuration(gmn: string, gmnSpec: string): garOut; + + gmnApplyRythm(gmn: string, gmnSpec: string, mode: TApplyMode): garOut; + gmnApplyPitch(gmn: string, gmnSpec: string, mode: TApplyMode, pmode: chordPitchMode): garOut; + + gmnVSetDuration(gmn: string, duration: rational): garOut; + gmnVMultDuration(gmn: string, mult: number): garOut; + + gmncheck(gmn: string) : boolean; + gmnDuration(gmn: string): rational; + gmnEv2Time(gmn: string, index: number, voice: number): rational; +} \ No newline at end of file diff --git a/guidoar-dev/lang/typescript/libGuidoAR.ts b/guidoar-dev/lang/typescript/libGuidoAR.ts new file mode 100644 index 000000000..a5d776516 --- /dev/null +++ b/guidoar-dev/lang/typescript/libGuidoAR.ts @@ -0,0 +1,17 @@ +enum garErr { + kNoErr, + kInvalidFile, + kInvalidArgument, + kOperationFailed +} + +enum TApplyMode { + kApplyOnce, + kApplyForwardLoop, + kApplyForwardBackwardLoop +} + +enum chordPitchMode { + kUseLowest, + kUseHighest +} diff --git a/guidoar-dev/lang/typescript/readme.txt b/guidoar-dev/lang/typescript/readme.txt new file mode 100644 index 000000000..e43090ac4 --- /dev/null +++ b/guidoar-dev/lang/typescript/readme.txt @@ -0,0 +1,4 @@ + +This folder contains a typescript interface for the GUIDO AR javascript library. +The test folder contains tools for the interface test. +To run the tests, 'cd' to the test folder and run 'make' diff --git a/guidoar-dev/lang/typescript/test/Makefile b/guidoar-dev/lang/typescript/test/Makefile new file mode 100644 index 000000000..ebb2d1523 --- /dev/null +++ b/guidoar-dev/lang/typescript/test/Makefile @@ -0,0 +1,8 @@ + +TS = $(wildcard *.ts) + +run : test.js + node test.js + +test.js : $(TS) + tsc --out test.js $(TS) diff --git a/guidoar-dev/lang/typescript/test/guidoARTest.ts b/guidoar-dev/lang/typescript/test/guidoARTest.ts new file mode 100644 index 000000000..159ec6f96 --- /dev/null +++ b/guidoar-dev/lang/typescript/test/guidoARTest.ts @@ -0,0 +1,106 @@ +/// +/// + +interface checkfunction { (n: any): boolean; } + +var guidoAR : GuidoAR; +var gmn : string = '[f g b/8 d f/4 e]'; +var gmn2 : string = '[a e f]'; + +var interval: number = 1; +var gmnSpec : string = '[a]'; +var nvoices : number = 4; +var duration: rational = { num: 1, denom: 1 }; +var n : number = 1; +var mode : TApplyMode = TApplyMode.kApplyOnce; +var pmode : chordPitchMode = chordPitchMode.kUseLowest; +var mult : number = 2; +var index : number = 1; +var voice : number = 1; + + +class guidoARTest { + + processTest(): void { + guidoAR = require('../../javascript/libGuidoAR.js'); + console.log('************************* New test *************************'); + console.log('** GuidoAR Version ' + guidoAR.guidoarVersionString() + ' **'); + console.log('************************************************************' + '\n'); + + this.processGuidoAR(); + + console.log('************************* Test End *************************'); + } + + + + _checkIsBool () : checkfunction { return (m) => (typeof m == 'boolean'); } + _checkIsStr () : checkfunction { return (m) => (typeof m == 'string'); } + _checkIsNum () : checkfunction { return (m) => (typeof m == 'number'); } + _checkIsRatio () : checkfunction { return (m) => (typeof m.num == 'number' && typeof m.denom == 'number' ); } + + _checkGarOut (e: number): checkfunction { return (m) => (e === m.err.value) && typeof m.str == 'string'; } + + testExpect(f: string, check : checkfunction): any { + let result = eval(f); + let expected = check(result); + if (expected) { + console.log ("OK " + f); + } + else { + console.log ("ERROR " + f + " => " + result); + console.log(result); + } + return result; + } + + + processGuidoAR():void { + this.testExpect("guidoAR.guidoarVersion()", this._checkIsNum()); + this.testExpect("guidoAR.guidoarVersionString()", this._checkIsStr()); + + this.testExpect("guidoAR.gmn2unrolled(gmn)", this._checkGarOut(garErr.kNoErr)); + + this.testExpect("guidoAR.gmnVTranpose(gmn, interval)", this._checkGarOut(garErr.kNoErr)); + this.testExpect("guidoAR.gmnGTranpose(gmn, gmnSpec)", this._checkGarOut(garErr.kNoErr)); + + this.testExpect("guidoAR.gmnVTop(gmn, nvoices)", this._checkGarOut(garErr.kNoErr)); + this.testExpect("guidoAR.gmnGTop(gmn, gmnSpec)", this._checkGarOut(garErr.kNoErr)); + + this.testExpect("guidoAR.gmnVBottom(gmn, nvoices)", this._checkGarOut(garErr.kNoErr)); + this.testExpect("guidoAR.gmnGBottom(gmn, gmnSpec)", this._checkGarOut(garErr.kNoErr)); + + this.testExpect("guidoAR.gmnVHead(gmn, duration)", this._checkGarOut(garErr.kNoErr)); + this.testExpect("guidoAR.gmnGHead(gmn, gmnSpec)", this._checkGarOut(garErr.kNoErr)); + + this.testExpect("guidoAR.gmnVEHead(gmn, n)", this._checkGarOut(garErr.kNoErr)); + this.testExpect("guidoAR.gmnGEHead(gmn, gmnSpec)", this._checkGarOut(garErr.kNoErr)); + + this.testExpect("guidoAR.gmnVTail(gmn, duration)", this._checkGarOut(garErr.kNoErr)); + this.testExpect("guidoAR.gmnGTail(gmn, gmnSpec)", this._checkGarOut(garErr.kNoErr)); + + this.testExpect("guidoAR.gmnVETail(gmn, n)", this._checkGarOut(garErr.kNoErr)); + this.testExpect("guidoAR.gmnGETail(gmn, gmnSpec)", this._checkGarOut(garErr.kNoErr)); + + this.testExpect("guidoAR.gmnGSeq(gmn, gmn2)", this._checkGarOut(garErr.kNoErr)); + + this.testExpect("guidoAR.gmnGPar(gmn, gmn2)", this._checkGarOut(garErr.kNoErr)); + this.testExpect("guidoAR.gmnGRPar(gmn, gmn2)", this._checkGarOut(garErr.kNoErr)); + + this.testExpect("guidoAR.gmnGMirror(gmn, gmn2)", this._checkGarOut(garErr.kNoErr)); + + this.testExpect("guidoAR.gmnGSetDuration(gmn, gmnSpec)", this._checkGarOut(garErr.kNoErr)); + + this.testExpect("guidoAR.gmnApplyRythm(gmn, gmnSpec, mode)", this._checkGarOut(garErr.kNoErr)); + this.testExpect("guidoAR.gmnApplyPitch(gmn, gmnSpec, mode, pmode)", this._checkGarOut(garErr.kNoErr)); + + this.testExpect("guidoAR.gmnVSetDuration(gmn, duration)", this._checkGarOut(garErr.kNoErr)); + this.testExpect("guidoAR.gmnVMultDuration(gmn, mult)", this._checkGarOut(garErr.kNoErr)); + + this.testExpect("guidoAR.gmncheck(gmn)", this._checkIsBool()); + this.testExpect("guidoAR.gmnDuration(gmn)", this._checkIsRatio()); + this.testExpect("guidoAR.gmnEv2Time(gmn, index, voice)", this._checkIsRatio()); + + console.log('\n'); + } +} \ No newline at end of file diff --git a/guidoar-dev/lang/typescript/test/main.ts b/guidoar-dev/lang/typescript/test/main.ts new file mode 100644 index 000000000..c7be4f90c --- /dev/null +++ b/guidoar-dev/lang/typescript/test/main.ts @@ -0,0 +1,8 @@ +/// + +function main(): void { + var guidoFullTest = new guidoARTest(); + guidoFullTest.processTest(); +} + +main(); \ No newline at end of file diff --git a/guidoar-dev/lang/typescript/test/node.d.ts b/guidoar-dev/lang/typescript/test/node.d.ts new file mode 100644 index 000000000..6f115759f --- /dev/null +++ b/guidoar-dev/lang/typescript/test/node.d.ts @@ -0,0 +1,2344 @@ +// Type definitions for Node.js v4.x +// Project: http://nodejs.org/ +// Definitions by: Microsoft TypeScript , DefinitelyTyped +// Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped + +/************************************************ +* * +* Node.js v4.x API * +* * +************************************************/ + +interface Error { + stack?: string; +} + + +// compat for TypeScript 1.8 +// if you use with --target es3 or --target es5 and use below definitions, +// use the lib.es6.d.ts that is bundled with TypeScript 1.8. +interface MapConstructor {} +interface WeakMapConstructor {} +interface SetConstructor {} +interface WeakSetConstructor {} + +/************************************************ +* * +* GLOBAL * +* * +************************************************/ +declare var process: NodeJS.Process; +declare var global: NodeJS.Global; + +declare var __filename: string; +declare var __dirname: string; + +declare function setTimeout(callback: (...args: any[]) => void, ms: number, ...args: any[]): NodeJS.Timer; +declare function clearTimeout(timeoutId: NodeJS.Timer): void; +declare function setInterval(callback: (...args: any[]) => void, ms: number, ...args: any[]): NodeJS.Timer; +declare function clearInterval(intervalId: NodeJS.Timer): void; +declare function setImmediate(callback: (...args: any[]) => void, ...args: any[]): any; +declare function clearImmediate(immediateId: any): void; + +interface NodeRequireFunction { + (id: string): any; +} + +interface NodeRequire extends NodeRequireFunction { + resolve(id:string): string; + cache: any; + extensions: any; + main: any; +} + +declare var require: NodeRequire; + +interface NodeModule { + exports: any; + require: NodeRequireFunction; + id: string; + filename: string; + loaded: boolean; + parent: any; + children: any[]; +} + +declare var module: NodeModule; + +// Same as module.exports +declare var exports: any; +declare var SlowBuffer: { + new (str: string, encoding?: string): Buffer; + new (size: number): Buffer; + new (size: Uint8Array): Buffer; + new (array: any[]): Buffer; + prototype: Buffer; + isBuffer(obj: any): boolean; + byteLength(string: string, encoding?: string): number; + concat(list: Buffer[], totalLength?: number): Buffer; +}; + + +// Buffer class +type BufferEncoding = "ascii" | "utf8" | "utf16le" | "ucs2" | "binary" | "hex"; +interface Buffer extends NodeBuffer {} + +/** + * Raw data is stored in instances of the Buffer class. + * A Buffer is similar to an array of integers but corresponds to a raw memory allocation outside the V8 heap. A Buffer cannot be resized. + * Valid string encodings: 'ascii'|'utf8'|'utf16le'|'ucs2'(alias of 'utf16le')|'base64'|'binary'(deprecated)|'hex' + */ +declare var Buffer: { + /** + * Allocates a new buffer containing the given {str}. + * + * @param str String to store in buffer. + * @param encoding encoding to use, optional. Default is 'utf8' + */ + new (str: string, encoding?: string): Buffer; + /** + * Allocates a new buffer of {size} octets. + * + * @param size count of octets to allocate. + */ + new (size: number): Buffer; + /** + * Allocates a new buffer containing the given {array} of octets. + * + * @param array The octets to store. + */ + new (array: Uint8Array): Buffer; + /** + * Produces a Buffer backed by the same allocated memory as + * the given {ArrayBuffer}. + * + * + * @param arrayBuffer The ArrayBuffer with which to share memory. + */ + new (arrayBuffer: ArrayBuffer): Buffer; + /** + * Allocates a new buffer containing the given {array} of octets. + * + * @param array The octets to store. + */ + new (array: any[]): Buffer; + /** + * Copies the passed {buffer} data onto a new {Buffer} instance. + * + * @param buffer The buffer to copy. + */ + new (buffer: Buffer): Buffer; + prototype: Buffer; + /** + * Returns true if {obj} is a Buffer + * + * @param obj object to test. + */ + isBuffer(obj: any): obj is Buffer; + /** + * Returns true if {encoding} is a valid encoding argument. + * Valid string encodings in Node 0.12: 'ascii'|'utf8'|'utf16le'|'ucs2'(alias of 'utf16le')|'base64'|'binary'(deprecated)|'hex' + * + * @param encoding string to test. + */ + isEncoding(encoding: string): boolean; + /** + * Gives the actual byte length of a string. encoding defaults to 'utf8'. + * This is not the same as String.prototype.length since that returns the number of characters in a string. + * + * @param string string to test. + * @param encoding encoding used to evaluate (defaults to 'utf8') + */ + byteLength(string: string, encoding?: string): number; + /** + * Returns a buffer which is the result of concatenating all the buffers in the list together. + * + * If the list has no items, or if the totalLength is 0, then it returns a zero-length buffer. + * If the list has exactly one item, then the first item of the list is returned. + * If the list has more than one item, then a new Buffer is created. + * + * @param list An array of Buffer objects to concatenate + * @param totalLength Total length of the buffers when concatenated. + * If totalLength is not provided, it is read from the buffers in the list. However, this adds an additional loop to the function, so it is faster to provide the length explicitly. + */ + concat(list: Buffer[], totalLength?: number): Buffer; + /** + * The same as buf1.compare(buf2). + */ + compare(buf1: Buffer, buf2: Buffer): number; +}; + +/************************************************ +* * +* GLOBAL INTERFACES * +* * +************************************************/ +declare namespace NodeJS { + export interface ErrnoException extends Error { + errno?: number; + code?: string; + path?: string; + syscall?: string; + stack?: string; + } + + export interface EventEmitter { + addListener(event: string, listener: Function): this; + on(event: string, listener: Function): this; + once(event: string, listener: Function): this; + removeListener(event: string, listener: Function): this; + removeAllListeners(event?: string): this; + setMaxListeners(n: number): this; + getMaxListeners(): number; + listeners(event: string): Function[]; + emit(event: string, ...args: any[]): boolean; + listenerCount(type: string): number; + } + + export interface ReadableStream extends EventEmitter { + readable: boolean; + read(size?: number): string|Buffer; + setEncoding(encoding: string): void; + pause(): void; + resume(): void; + pipe(destination: T, options?: { end?: boolean; }): T; + unpipe(destination?: T): void; + unshift(chunk: string): void; + unshift(chunk: Buffer): void; + wrap(oldStream: ReadableStream): ReadableStream; + } + + export interface WritableStream extends EventEmitter { + writable: boolean; + write(buffer: Buffer|string, cb?: Function): boolean; + write(str: string, encoding?: string, cb?: Function): boolean; + end(): void; + end(buffer: Buffer, cb?: Function): void; + end(str: string, cb?: Function): void; + end(str: string, encoding?: string, cb?: Function): void; + } + + export interface ReadWriteStream extends ReadableStream, WritableStream {} + + export interface Events extends EventEmitter { } + + export interface Domain extends Events { + run(fn: Function): void; + add(emitter: Events): void; + remove(emitter: Events): void; + bind(cb: (err: Error, data: any) => any): any; + intercept(cb: (data: any) => any): any; + dispose(): void; + + addListener(event: string, listener: Function): this; + on(event: string, listener: Function): this; + once(event: string, listener: Function): this; + removeListener(event: string, listener: Function): this; + removeAllListeners(event?: string): this; + } + + export interface MemoryUsage { + rss: number; + heapTotal: number; + heapUsed: number; + } + + export interface Process extends EventEmitter { + stdout: WritableStream; + stderr: WritableStream; + stdin: ReadableStream; + argv: string[]; + execArgv: string[]; + execPath: string; + abort(): void; + chdir(directory: string): void; + cwd(): string; + env: any; + exit(code?: number): void; + getgid(): number; + setgid(id: number): void; + setgid(id: string): void; + getuid(): number; + setuid(id: number): void; + setuid(id: string): void; + version: string; + versions: { + http_parser: string; + node: string; + v8: string; + ares: string; + uv: string; + zlib: string; + openssl: string; + }; + config: { + target_defaults: { + cflags: any[]; + default_configuration: string; + defines: string[]; + include_dirs: string[]; + libraries: string[]; + }; + variables: { + clang: number; + host_arch: string; + node_install_npm: boolean; + node_install_waf: boolean; + node_prefix: string; + node_shared_openssl: boolean; + node_shared_v8: boolean; + node_shared_zlib: boolean; + node_use_dtrace: boolean; + node_use_etw: boolean; + node_use_openssl: boolean; + target_arch: string; + v8_no_strict_aliasing: number; + v8_use_snapshot: boolean; + visibility: string; + }; + }; + kill(pid:number, signal?: string|number): void; + pid: number; + title: string; + arch: string; + platform: string; + memoryUsage(): MemoryUsage; + nextTick(callback: Function): void; + umask(mask?: number): number; + uptime(): number; + hrtime(time?:number[]): number[]; + domain: Domain; + + // Worker + send?(message: any, sendHandle?: any): void; + disconnect(): void; + connected: boolean; + } + + export interface Global { + Array: typeof Array; + ArrayBuffer: typeof ArrayBuffer; + Boolean: typeof Boolean; + Buffer: typeof Buffer; + DataView: typeof DataView; + Date: typeof Date; + Error: typeof Error; + EvalError: typeof EvalError; + Float32Array: typeof Float32Array; + Float64Array: typeof Float64Array; + Function: typeof Function; + GLOBAL: Global; + Infinity: typeof Infinity; + Int16Array: typeof Int16Array; + Int32Array: typeof Int32Array; + Int8Array: typeof Int8Array; + Intl: typeof Intl; + JSON: typeof JSON; + Map: MapConstructor; + Math: typeof Math; + NaN: typeof NaN; + Number: typeof Number; + Object: typeof Object; + Promise: Function; + RangeError: typeof RangeError; + ReferenceError: typeof ReferenceError; + RegExp: typeof RegExp; + Set: SetConstructor; + String: typeof String; + Symbol: Function; + SyntaxError: typeof SyntaxError; + TypeError: typeof TypeError; + URIError: typeof URIError; + Uint16Array: typeof Uint16Array; + Uint32Array: typeof Uint32Array; + Uint8Array: typeof Uint8Array; + Uint8ClampedArray: Function; + WeakMap: WeakMapConstructor; + WeakSet: WeakSetConstructor; + clearImmediate: (immediateId: any) => void; + clearInterval: (intervalId: NodeJS.Timer) => void; + clearTimeout: (timeoutId: NodeJS.Timer) => void; + console: typeof console; + decodeURI: typeof decodeURI; + decodeURIComponent: typeof decodeURIComponent; + encodeURI: typeof encodeURI; + encodeURIComponent: typeof encodeURIComponent; + escape: (str: string) => string; + eval: typeof eval; + global: Global; + isFinite: typeof isFinite; + isNaN: typeof isNaN; + parseFloat: typeof parseFloat; + parseInt: typeof parseInt; + process: Process; + root: Global; + setImmediate: (callback: (...args: any[]) => void, ...args: any[]) => any; + setInterval: (callback: (...args: any[]) => void, ms: number, ...args: any[]) => NodeJS.Timer; + setTimeout: (callback: (...args: any[]) => void, ms: number, ...args: any[]) => NodeJS.Timer; + undefined: typeof undefined; + unescape: (str: string) => string; + gc: () => void; + v8debug?: any; + } + + export interface Timer { + ref() : void; + unref() : void; + } +} + +/** + * @deprecated + */ +interface NodeBuffer extends Uint8Array { + write(string: string, offset?: number, length?: number, encoding?: string): number; + toString(encoding?: string, start?: number, end?: number): string; + toJSON(): any; + equals(otherBuffer: Buffer): boolean; + compare(otherBuffer: Buffer): number; + copy(targetBuffer: Buffer, targetStart?: number, sourceStart?: number, sourceEnd?: number): number; + slice(start?: number, end?: number): Buffer; + writeUIntLE(value: number, offset: number, byteLength: number, noAssert?: boolean): number; + writeUIntBE(value: number, offset: number, byteLength: number, noAssert?: boolean): number; + writeIntLE(value: number, offset: number, byteLength: number, noAssert?: boolean): number; + writeIntBE(value: number, offset: number, byteLength: number, noAssert?: boolean): number; + readUIntLE(offset: number, byteLength: number, noAssert?: boolean): number; + readUIntBE(offset: number, byteLength: number, noAssert?: boolean): number; + readIntLE(offset: number, byteLength: number, noAssert?: boolean): number; + readIntBE(offset: number, byteLength: number, noAssert?: boolean): number; + readUInt8(offset: number, noAssert?: boolean): number; + readUInt16LE(offset: number, noAssert?: boolean): number; + readUInt16BE(offset: number, noAssert?: boolean): number; + readUInt32LE(offset: number, noAssert?: boolean): number; + readUInt32BE(offset: number, noAssert?: boolean): number; + readInt8(offset: number, noAssert?: boolean): number; + readInt16LE(offset: number, noAssert?: boolean): number; + readInt16BE(offset: number, noAssert?: boolean): number; + readInt32LE(offset: number, noAssert?: boolean): number; + readInt32BE(offset: number, noAssert?: boolean): number; + readFloatLE(offset: number, noAssert?: boolean): number; + readFloatBE(offset: number, noAssert?: boolean): number; + readDoubleLE(offset: number, noAssert?: boolean): number; + readDoubleBE(offset: number, noAssert?: boolean): number; + writeUInt8(value: number, offset: number, noAssert?: boolean): number; + writeUInt16LE(value: number, offset: number, noAssert?: boolean): number; + writeUInt16BE(value: number, offset: number, noAssert?: boolean): number; + writeUInt32LE(value: number, offset: number, noAssert?: boolean): number; + writeUInt32BE(value: number, offset: number, noAssert?: boolean): number; + writeInt8(value: number, offset: number, noAssert?: boolean): number; + writeInt16LE(value: number, offset: number, noAssert?: boolean): number; + writeInt16BE(value: number, offset: number, noAssert?: boolean): number; + writeInt32LE(value: number, offset: number, noAssert?: boolean): number; + writeInt32BE(value: number, offset: number, noAssert?: boolean): number; + writeFloatLE(value: number, offset: number, noAssert?: boolean): number; + writeFloatBE(value: number, offset: number, noAssert?: boolean): number; + writeDoubleLE(value: number, offset: number, noAssert?: boolean): number; + writeDoubleBE(value: number, offset: number, noAssert?: boolean): number; + fill(value: any, offset?: number, end?: number): Buffer; + // TODO: encoding param + indexOf(value: string | number | Buffer, byteOffset?: number): number; + // TODO: entries + // TODO: includes + // TODO: keys + // TODO: values +} + +/************************************************ +* * +* MODULES * +* * +************************************************/ +declare module "buffer" { + export var INSPECT_MAX_BYTES: number; + var BuffType: typeof Buffer; + var SlowBuffType: typeof SlowBuffer; + export { BuffType as Buffer, SlowBuffType as SlowBuffer }; +} + +declare module "querystring" { + export interface StringifyOptions { + encodeURIComponent?: Function; + } + + export interface ParseOptions { + maxKeys?: number; + decodeURIComponent?: Function; + } + + export function stringify(obj: T, sep?: string, eq?: string, options?: StringifyOptions): string; + export function parse(str: string, sep?: string, eq?: string, options?: ParseOptions): any; + export function parse(str: string, sep?: string, eq?: string, options?: ParseOptions): T; + export function escape(str: string): string; + export function unescape(str: string): string; +} + +declare module "events" { + export class EventEmitter implements NodeJS.EventEmitter { + static EventEmitter: EventEmitter; + static listenerCount(emitter: EventEmitter, event: string): number; // deprecated + static defaultMaxListeners: number; + + addListener(event: string, listener: Function): this; + on(event: string, listener: Function): this; + once(event: string, listener: Function): this; + removeListener(event: string, listener: Function): this; + removeAllListeners(event?: string): this; + setMaxListeners(n: number): this; + getMaxListeners(): number; + listeners(event: string): Function[]; + emit(event: string, ...args: any[]): boolean; + listenerCount(type: string): number; + } +} + +declare module "http" { + import * as events from "events"; + import * as net from "net"; + import * as stream from "stream"; + + export interface RequestOptions { + protocol?: string; + host?: string; + hostname?: string; + family?: number; + port?: number; + localAddress?: string; + socketPath?: string; + method?: string; + path?: string; + headers?: { [key: string]: any }; + auth?: string; + agent?: Agent|boolean; + } + + export interface Server extends events.EventEmitter, net.Server { + setTimeout(msecs: number, callback: Function): void; + maxHeadersCount: number; + timeout: number; + } + /** + * @deprecated Use IncomingMessage + */ + export interface ServerRequest extends IncomingMessage { + connection: net.Socket; + } + export interface ServerResponse extends events.EventEmitter, stream.Writable { + // Extended base methods + write(buffer: Buffer): boolean; + write(buffer: Buffer, cb?: Function): boolean; + write(str: string, cb?: Function): boolean; + write(str: string, encoding?: string, cb?: Function): boolean; + write(str: string, encoding?: string, fd?: string): boolean; + + writeContinue(): void; + writeHead(statusCode: number, reasonPhrase?: string, headers?: any): void; + writeHead(statusCode: number, headers?: any): void; + statusCode: number; + statusMessage: string; + headersSent: boolean; + setHeader(name: string, value: string | string[]): void; + sendDate: boolean; + getHeader(name: string): string; + removeHeader(name: string): void; + write(chunk: any, encoding?: string): any; + addTrailers(headers: any): void; + + // Extended base methods + end(): void; + end(buffer: Buffer, cb?: Function): void; + end(str: string, cb?: Function): void; + end(str: string, encoding?: string, cb?: Function): void; + end(data?: any, encoding?: string): void; + } + export interface ClientRequest extends events.EventEmitter, stream.Writable { + // Extended base methods + write(buffer: Buffer): boolean; + write(buffer: Buffer, cb?: Function): boolean; + write(str: string, cb?: Function): boolean; + write(str: string, encoding?: string, cb?: Function): boolean; + write(str: string, encoding?: string, fd?: string): boolean; + + write(chunk: any, encoding?: string): void; + abort(): void; + setTimeout(timeout: number, callback?: Function): void; + setNoDelay(noDelay?: boolean): void; + setSocketKeepAlive(enable?: boolean, initialDelay?: number): void; + + setHeader(name: string, value: string | string[]): void; + getHeader(name: string): string; + removeHeader(name: string): void; + addTrailers(headers: any): void; + + // Extended base methods + end(): void; + end(buffer: Buffer, cb?: Function): void; + end(str: string, cb?: Function): void; + end(str: string, encoding?: string, cb?: Function): void; + end(data?: any, encoding?: string): void; + } + export interface IncomingMessage extends events.EventEmitter, stream.Readable { + httpVersion: string; + headers: any; + rawHeaders: string[]; + trailers: any; + rawTrailers: any; + setTimeout(msecs: number, callback: Function): NodeJS.Timer; + /** + * Only valid for request obtained from http.Server. + */ + method?: string; + /** + * Only valid for request obtained from http.Server. + */ + url?: string; + /** + * Only valid for response obtained from http.ClientRequest. + */ + statusCode?: number; + /** + * Only valid for response obtained from http.ClientRequest. + */ + statusMessage?: string; + socket: net.Socket; + } + /** + * @deprecated Use IncomingMessage + */ + export interface ClientResponse extends IncomingMessage { } + + export interface AgentOptions { + /** + * Keep sockets around in a pool to be used by other requests in the future. Default = false + */ + keepAlive?: boolean; + /** + * When using HTTP KeepAlive, how often to send TCP KeepAlive packets over sockets being kept alive. Default = 1000. + * Only relevant if keepAlive is set to true. + */ + keepAliveMsecs?: number; + /** + * Maximum number of sockets to allow per host. Default for Node 0.10 is 5, default for Node 0.12 is Infinity + */ + maxSockets?: number; + /** + * Maximum number of sockets to leave open in a free state. Only relevant if keepAlive is set to true. Default = 256. + */ + maxFreeSockets?: number; + } + + export class Agent { + maxSockets: number; + sockets: any; + requests: any; + + constructor(opts?: AgentOptions); + + /** + * Destroy any sockets that are currently in use by the agent. + * It is usually not necessary to do this. However, if you are using an agent with KeepAlive enabled, + * then it is best to explicitly shut down the agent when you know that it will no longer be used. Otherwise, + * sockets may hang open for quite a long time before the server terminates them. + */ + destroy(): void; + } + + export var METHODS: string[]; + + export var STATUS_CODES: { + [errorCode: number]: string; + [errorCode: string]: string; + }; + export function createServer(requestListener?: (request: IncomingMessage, response: ServerResponse) =>void ): Server; + export function createClient(port?: number, host?: string): any; + export function request(options: RequestOptions, callback?: (res: IncomingMessage) => void): ClientRequest; + export function get(options: any, callback?: (res: IncomingMessage) => void): ClientRequest; + export var globalAgent: Agent; +} + +declare module "cluster" { + import * as child from "child_process"; + import * as events from "events"; + + export interface ClusterSettings { + exec?: string; + args?: string[]; + silent?: boolean; + } + + export interface Address { + address: string; + port: number; + addressType: string; + } + + export class Worker extends events.EventEmitter { + id: string; + process: child.ChildProcess; + suicide: boolean; + send(message: any, sendHandle?: any): void; + kill(signal?: string): void; + destroy(signal?: string): void; + disconnect(): void; + isConnected(): boolean; + isDead(): boolean; + } + + export var settings: ClusterSettings; + export var isMaster: boolean; + export var isWorker: boolean; + export function setupMaster(settings?: ClusterSettings): void; + export function fork(env?: any): Worker; + export function disconnect(callback?: Function): void; + export var worker: Worker; + export var workers: { + [index: string]: Worker + }; + + // Event emitter + export function addListener(event: string, listener: Function): void; + export function on(event: "disconnect", listener: (worker: Worker) => void): void; + export function on(event: "exit", listener: (worker: Worker, code: number, signal: string) => void): void; + export function on(event: "fork", listener: (worker: Worker) => void): void; + export function on(event: "listening", listener: (worker: Worker, address: any) => void): void; + export function on(event: "message", listener: (worker: Worker, message: any) => void): void; + export function on(event: "online", listener: (worker: Worker) => void): void; + export function on(event: "setup", listener: (settings: any) => void): void; + export function on(event: string, listener: Function): any; + export function once(event: string, listener: Function): void; + export function removeListener(event: string, listener: Function): void; + export function removeAllListeners(event?: string): void; + export function setMaxListeners(n: number): void; + export function listeners(event: string): Function[]; + export function emit(event: string, ...args: any[]): boolean; +} + +declare module "zlib" { + import * as stream from "stream"; + export interface ZlibOptions { chunkSize?: number; windowBits?: number; level?: number; memLevel?: number; strategy?: number; dictionary?: any; } + + export interface Gzip extends stream.Transform { } + export interface Gunzip extends stream.Transform { } + export interface Deflate extends stream.Transform { } + export interface Inflate extends stream.Transform { } + export interface DeflateRaw extends stream.Transform { } + export interface InflateRaw extends stream.Transform { } + export interface Unzip extends stream.Transform { } + + export function createGzip(options?: ZlibOptions): Gzip; + export function createGunzip(options?: ZlibOptions): Gunzip; + export function createDeflate(options?: ZlibOptions): Deflate; + export function createInflate(options?: ZlibOptions): Inflate; + export function createDeflateRaw(options?: ZlibOptions): DeflateRaw; + export function createInflateRaw(options?: ZlibOptions): InflateRaw; + export function createUnzip(options?: ZlibOptions): Unzip; + + export function deflate(buf: Buffer, callback: (error: Error, result: any) =>void ): void; + export function deflateSync(buf: Buffer, options?: ZlibOptions): any; + export function deflateRaw(buf: Buffer, callback: (error: Error, result: any) =>void ): void; + export function deflateRawSync(buf: Buffer, options?: ZlibOptions): any; + export function gzip(buf: Buffer, callback: (error: Error, result: any) =>void ): void; + export function gzipSync(buf: Buffer, options?: ZlibOptions): any; + export function gunzip(buf: Buffer, callback: (error: Error, result: any) =>void ): void; + export function gunzipSync(buf: Buffer, options?: ZlibOptions): any; + export function inflate(buf: Buffer, callback: (error: Error, result: any) =>void ): void; + export function inflateSync(buf: Buffer, options?: ZlibOptions): any; + export function inflateRaw(buf: Buffer, callback: (error: Error, result: any) =>void ): void; + export function inflateRawSync(buf: Buffer, options?: ZlibOptions): any; + export function unzip(buf: Buffer, callback: (error: Error, result: any) =>void ): void; + export function unzipSync(buf: Buffer, options?: ZlibOptions): any; + + // Constants + export var Z_NO_FLUSH: number; + export var Z_PARTIAL_FLUSH: number; + export var Z_SYNC_FLUSH: number; + export var Z_FULL_FLUSH: number; + export var Z_FINISH: number; + export var Z_BLOCK: number; + export var Z_TREES: number; + export var Z_OK: number; + export var Z_STREAM_END: number; + export var Z_NEED_DICT: number; + export var Z_ERRNO: number; + export var Z_STREAM_ERROR: number; + export var Z_DATA_ERROR: number; + export var Z_MEM_ERROR: number; + export var Z_BUF_ERROR: number; + export var Z_VERSION_ERROR: number; + export var Z_NO_COMPRESSION: number; + export var Z_BEST_SPEED: number; + export var Z_BEST_COMPRESSION: number; + export var Z_DEFAULT_COMPRESSION: number; + export var Z_FILTERED: number; + export var Z_HUFFMAN_ONLY: number; + export var Z_RLE: number; + export var Z_FIXED: number; + export var Z_DEFAULT_STRATEGY: number; + export var Z_BINARY: number; + export var Z_TEXT: number; + export var Z_ASCII: number; + export var Z_UNKNOWN: number; + export var Z_DEFLATED: number; + export var Z_NULL: number; +} + +declare module "os" { + export interface CpuInfo { + model: string; + speed: number; + times: { + user: number; + nice: number; + sys: number; + idle: number; + irq: number; + }; + } + + export interface NetworkInterfaceInfo { + address: string; + netmask: string; + family: string; + mac: string; + internal: boolean; + } + + export function tmpdir(): string; + export function homedir(): string; + export function endianness(): string; + export function hostname(): string; + export function type(): string; + export function platform(): string; + export function arch(): string; + export function release(): string; + export function uptime(): number; + export function loadavg(): number[]; + export function totalmem(): number; + export function freemem(): number; + export function cpus(): CpuInfo[]; + export function networkInterfaces(): {[index: string]: NetworkInterfaceInfo[]}; + export var EOL: string; +} + +declare module "https" { + import * as tls from "tls"; + import * as events from "events"; + import * as http from "http"; + + export interface ServerOptions { + pfx?: any; + key?: any; + passphrase?: string; + cert?: any; + ca?: any; + crl?: any; + ciphers?: string; + honorCipherOrder?: boolean; + requestCert?: boolean; + rejectUnauthorized?: boolean; + NPNProtocols?: any; + SNICallback?: (servername: string) => any; + } + + export interface RequestOptions extends http.RequestOptions{ + pfx?: any; + key?: any; + passphrase?: string; + cert?: any; + ca?: any; + ciphers?: string; + rejectUnauthorized?: boolean; + secureProtocol?: string; + } + + export interface Agent { + maxSockets: number; + sockets: any; + requests: any; + } + export var Agent: { + new (options?: RequestOptions): Agent; + }; + export interface Server extends tls.Server { } + export function createServer(options: ServerOptions, requestListener?: Function): Server; + export function request(options: RequestOptions, callback?: (res: http.IncomingMessage) =>void ): http.ClientRequest; + export function get(options: RequestOptions, callback?: (res: http.IncomingMessage) =>void ): http.ClientRequest; + export var globalAgent: Agent; +} + +declare module "punycode" { + export function decode(string: string): string; + export function encode(string: string): string; + export function toUnicode(domain: string): string; + export function toASCII(domain: string): string; + export var ucs2: ucs2; + interface ucs2 { + decode(string: string): number[]; + encode(codePoints: number[]): string; + } + export var version: any; +} + +declare module "repl" { + import * as stream from "stream"; + import * as events from "events"; + + export interface ReplOptions { + prompt?: string; + input?: NodeJS.ReadableStream; + output?: NodeJS.WritableStream; + terminal?: boolean; + eval?: Function; + useColors?: boolean; + useGlobal?: boolean; + ignoreUndefined?: boolean; + writer?: Function; + } + export function start(options: ReplOptions): events.EventEmitter; +} + +declare module "readline" { + import * as events from "events"; + import * as stream from "stream"; + + export interface Key { + sequence?: string; + name?: string; + ctrl?: boolean; + meta?: boolean; + shift?: boolean; + } + + export interface ReadLine extends events.EventEmitter { + setPrompt(prompt: string): void; + prompt(preserveCursor?: boolean): void; + question(query: string, callback: (answer: string) => void): void; + pause(): ReadLine; + resume(): ReadLine; + close(): void; + write(data: string|Buffer, key?: Key): void; + } + + export interface Completer { + (line: string): CompleterResult; + (line: string, callback: (err: any, result: CompleterResult) => void): any; + } + + export interface CompleterResult { + completions: string[]; + line: string; + } + + export interface ReadLineOptions { + input: NodeJS.ReadableStream; + output?: NodeJS.WritableStream; + completer?: Completer; + terminal?: boolean; + historySize?: number; + } + + export function createInterface(input: NodeJS.ReadableStream, output?: NodeJS.WritableStream, completer?: Completer, terminal?: boolean): ReadLine; + export function createInterface(options: ReadLineOptions): ReadLine; + + export function cursorTo(stream: NodeJS.WritableStream, x: number, y: number): void; + export function moveCursor(stream: NodeJS.WritableStream, dx: number|string, dy: number|string): void; + export function clearLine(stream: NodeJS.WritableStream, dir: number): void; + export function clearScreenDown(stream: NodeJS.WritableStream): void; +} + +declare module "vm" { + export interface Context { } + export interface ScriptOptions { + filename?: string; + lineOffset?: number; + columnOffset?: number; + displayErrors?: boolean; + timeout?: number; + cachedData?: Buffer; + produceCachedData?: boolean; + } + export interface RunningScriptOptions { + filename?: string; + lineOffset?: number; + columnOffset?: number; + displayErrors?: boolean; + timeout?: number; + } + export class Script { + constructor(code: string, options?: ScriptOptions); + runInContext(contextifiedSandbox: Context, options?: RunningScriptOptions): any; + runInNewContext(sandbox?: Context, options?: RunningScriptOptions): any; + runInThisContext(options?: RunningScriptOptions): any; + } + export function createContext(sandbox?: Context): Context; + export function isContext(sandbox: Context): boolean; + export function runInContext(code: string, contextifiedSandbox: Context, options?: RunningScriptOptions): any; + export function runInDebugContext(code: string): any; + export function runInNewContext(code: string, sandbox?: Context, options?: RunningScriptOptions): any; + export function runInThisContext(code: string, options?: RunningScriptOptions): any; +} + +declare module "child_process" { + import * as events from "events"; + import * as stream from "stream"; + + export interface ChildProcess extends events.EventEmitter { + stdin: stream.Writable; + stdout: stream.Readable; + stderr: stream.Readable; + stdio: [stream.Writable, stream.Readable, stream.Readable]; + pid: number; + kill(signal?: string): void; + send(message: any, sendHandle?: any): void; + disconnect(): void; + unref(): void; + } + + export interface SpawnOptions { + cwd?: string; + env?: any; + stdio?: any; + detached?: boolean; + uid?: number; + gid?: number; + shell?: boolean | string; + } + export function spawn(command: string, args?: string[], options?: SpawnOptions): ChildProcess; + + export interface ExecOptions { + cwd?: string; + env?: any; + shell?: string; + timeout?: number; + maxBuffer?: number; + killSignal?: string; + uid?: number; + gid?: number; + } + export interface ExecOptionsWithStringEncoding extends ExecOptions { + encoding: BufferEncoding; + } + export interface ExecOptionsWithBufferEncoding extends ExecOptions { + encoding: string; // specify `null`. + } + export function exec(command: string, callback?: (error: Error, stdout: string, stderr: string) =>void ): ChildProcess; + export function exec(command: string, options: ExecOptionsWithStringEncoding, callback?: (error: Error, stdout: string, stderr: string) =>void ): ChildProcess; + // usage. child_process.exec("tsc", {encoding: null as string}, (err, stdout, stderr) => {}); + export function exec(command: string, options: ExecOptionsWithBufferEncoding, callback?: (error: Error, stdout: Buffer, stderr: Buffer) =>void ): ChildProcess; + export function exec(command: string, options: ExecOptions, callback?: (error: Error, stdout: string, stderr: string) =>void ): ChildProcess; + + export interface ExecFileOptions { + cwd?: string; + env?: any; + timeout?: number; + maxBuffer?: number; + killSignal?: string; + uid?: number; + gid?: number; + } + export interface ExecFileOptionsWithStringEncoding extends ExecFileOptions { + encoding: BufferEncoding; + } + export interface ExecFileOptionsWithBufferEncoding extends ExecFileOptions { + encoding: string; // specify `null`. + } + export function execFile(file: string, callback?: (error: Error, stdout: string, stderr: string) =>void ): ChildProcess; + export function execFile(file: string, options?: ExecFileOptionsWithStringEncoding, callback?: (error: Error, stdout: string, stderr: string) =>void ): ChildProcess; + // usage. child_process.execFile("file.sh", {encoding: null as string}, (err, stdout, stderr) => {}); + export function execFile(file: string, options?: ExecFileOptionsWithBufferEncoding, callback?: (error: Error, stdout: Buffer, stderr: Buffer) =>void ): ChildProcess; + export function execFile(file: string, options?: ExecFileOptions, callback?: (error: Error, stdout: string, stderr: string) =>void ): ChildProcess; + export function execFile(file: string, args?: string[], callback?: (error: Error, stdout: string, stderr: string) =>void ): ChildProcess; + export function execFile(file: string, args?: string[], options?: ExecFileOptionsWithStringEncoding, callback?: (error: Error, stdout: string, stderr: string) =>void ): ChildProcess; + // usage. child_process.execFile("file.sh", ["foo"], {encoding: null as string}, (err, stdout, stderr) => {}); + export function execFile(file: string, args?: string[], options?: ExecFileOptionsWithBufferEncoding, callback?: (error: Error, stdout: Buffer, stderr: Buffer) =>void ): ChildProcess; + export function execFile(file: string, args?: string[], options?: ExecFileOptions, callback?: (error: Error, stdout: string, stderr: string) =>void ): ChildProcess; + + export interface ForkOptions { + cwd?: string; + env?: any; + execPath?: string; + execArgv?: string[]; + silent?: boolean; + uid?: number; + gid?: number; + } + export function fork(modulePath: string, args?: string[], options?: ForkOptions): ChildProcess; + + export interface SpawnSyncOptions { + cwd?: string; + input?: string | Buffer; + stdio?: any; + env?: any; + uid?: number; + gid?: number; + timeout?: number; + killSignal?: string; + maxBuffer?: number; + encoding?: string; + shell?: boolean | string; + } + export interface SpawnSyncOptionsWithStringEncoding extends SpawnSyncOptions { + encoding: BufferEncoding; + } + export interface SpawnSyncOptionsWithBufferEncoding extends SpawnSyncOptions { + encoding: string; // specify `null`. + } + export interface SpawnSyncReturns { + pid: number; + output: string[]; + stdout: T; + stderr: T; + status: number; + signal: string; + error: Error; + } + export function spawnSync(command: string): SpawnSyncReturns; + export function spawnSync(command: string, options?: SpawnSyncOptionsWithStringEncoding): SpawnSyncReturns; + export function spawnSync(command: string, options?: SpawnSyncOptionsWithBufferEncoding): SpawnSyncReturns; + export function spawnSync(command: string, options?: SpawnSyncOptions): SpawnSyncReturns; + export function spawnSync(command: string, args?: string[], options?: SpawnSyncOptionsWithStringEncoding): SpawnSyncReturns; + export function spawnSync(command: string, args?: string[], options?: SpawnSyncOptionsWithBufferEncoding): SpawnSyncReturns; + export function spawnSync(command: string, args?: string[], options?: SpawnSyncOptions): SpawnSyncReturns; + + export interface ExecSyncOptions { + cwd?: string; + input?: string | Buffer; + stdio?: any; + env?: any; + shell?: string; + uid?: number; + gid?: number; + timeout?: number; + killSignal?: string; + maxBuffer?: number; + encoding?: string; + } + export interface ExecSyncOptionsWithStringEncoding extends ExecSyncOptions { + encoding: BufferEncoding; + } + export interface ExecSyncOptionsWithBufferEncoding extends ExecSyncOptions { + encoding: string; // specify `null`. + } + export function execSync(command: string): Buffer; + export function execSync(command: string, options?: ExecSyncOptionsWithStringEncoding): string; + export function execSync(command: string, options?: ExecSyncOptionsWithBufferEncoding): Buffer; + export function execSync(command: string, options?: ExecSyncOptions): Buffer; + + export interface ExecFileSyncOptions { + cwd?: string; + input?: string | Buffer; + stdio?: any; + env?: any; + uid?: number; + gid?: number; + timeout?: number; + killSignal?: string; + maxBuffer?: number; + encoding?: string; + } + export interface ExecFileSyncOptionsWithStringEncoding extends ExecFileSyncOptions { + encoding: BufferEncoding; + } + export interface ExecFileSyncOptionsWithBufferEncoding extends ExecFileSyncOptions { + encoding: string; // specify `null`. + } + export function execFileSync(command: string): Buffer; + export function execFileSync(command: string, options?: ExecFileSyncOptionsWithStringEncoding): string; + export function execFileSync(command: string, options?: ExecFileSyncOptionsWithBufferEncoding): Buffer; + export function execFileSync(command: string, options?: ExecFileSyncOptions): Buffer; + export function execFileSync(command: string, args?: string[], options?: ExecFileSyncOptionsWithStringEncoding): string; + export function execFileSync(command: string, args?: string[], options?: ExecFileSyncOptionsWithBufferEncoding): Buffer; + export function execFileSync(command: string, args?: string[], options?: ExecFileSyncOptions): Buffer; +} + +declare module "url" { + export interface Url { + href?: string; + protocol?: string; + auth?: string; + hostname?: string; + port?: string; + host?: string; + pathname?: string; + search?: string; + query?: any; // string | Object + slashes?: boolean; + hash?: string; + path?: string; + } + + export function parse(urlStr: string, parseQueryString?: boolean , slashesDenoteHost?: boolean ): Url; + export function format(url: Url): string; + export function resolve(from: string, to: string): string; +} + +declare module "dns" { + export function lookup(domain: string, family: number, callback: (err: Error, address: string, family: number) =>void ): string; + export function lookup(domain: string, callback: (err: Error, address: string, family: number) =>void ): string; + export function resolve(domain: string, rrtype: string, callback: (err: Error, addresses: string[]) =>void ): string[]; + export function resolve(domain: string, callback: (err: Error, addresses: string[]) =>void ): string[]; + export function resolve4(domain: string, callback: (err: Error, addresses: string[]) =>void ): string[]; + export function resolve6(domain: string, callback: (err: Error, addresses: string[]) =>void ): string[]; + export function resolveMx(domain: string, callback: (err: Error, addresses: string[]) =>void ): string[]; + export function resolveTxt(domain: string, callback: (err: Error, addresses: string[]) =>void ): string[]; + export function resolveSrv(domain: string, callback: (err: Error, addresses: string[]) =>void ): string[]; + export function resolveNs(domain: string, callback: (err: Error, addresses: string[]) =>void ): string[]; + export function resolveCname(domain: string, callback: (err: Error, addresses: string[]) =>void ): string[]; + export function reverse(ip: string, callback: (err: Error, domains: string[]) =>void ): string[]; +} + +declare module "net" { + import * as stream from "stream"; + + export interface Socket extends stream.Duplex { + // Extended base methods + write(buffer: Buffer): boolean; + write(buffer: Buffer, cb?: Function): boolean; + write(str: string, cb?: Function): boolean; + write(str: string, encoding?: string, cb?: Function): boolean; + write(str: string, encoding?: string, fd?: string): boolean; + + connect(port: number, host?: string, connectionListener?: Function): void; + connect(path: string, connectionListener?: Function): void; + bufferSize: number; + setEncoding(encoding?: string): void; + write(data: any, encoding?: string, callback?: Function): void; + destroy(): void; + pause(): void; + resume(): void; + setTimeout(timeout: number, callback?: Function): void; + setNoDelay(noDelay?: boolean): void; + setKeepAlive(enable?: boolean, initialDelay?: number): void; + address(): { port: number; family: string; address: string; }; + unref(): void; + ref(): void; + + remoteAddress: string; + remoteFamily: string; + remotePort: number; + localAddress: string; + localPort: number; + bytesRead: number; + bytesWritten: number; + + // Extended base methods + end(): void; + end(buffer: Buffer, cb?: Function): void; + end(str: string, cb?: Function): void; + end(str: string, encoding?: string, cb?: Function): void; + end(data?: any, encoding?: string): void; + } + + export var Socket: { + new (options?: { fd?: string; type?: string; allowHalfOpen?: boolean; }): Socket; + }; + + export interface ListenOptions { + port?: number; + host?: string; + backlog?: number; + path?: string; + exclusive?: boolean; + } + + export interface Server extends Socket { + listen(port: number, hostname?: string, backlog?: number, listeningListener?: Function): Server; + listen(port: number, hostname?: string, listeningListener?: Function): Server; + listen(port: number, backlog?: number, listeningListener?: Function): Server; + listen(port: number, listeningListener?: Function): Server; + listen(path: string, backlog?: number, listeningListener?: Function): Server; + listen(path: string, listeningListener?: Function): Server; + listen(handle: any, backlog?: number, listeningListener?: Function): Server; + listen(handle: any, listeningListener?: Function): Server; + listen(options: ListenOptions, listeningListener?: Function): Server; + close(callback?: Function): Server; + address(): { port: number; family: string; address: string; }; + getConnections(cb: (error: Error, count: number) => void): void; + ref(): Server; + unref(): Server; + maxConnections: number; + connections: number; + } + export function createServer(connectionListener?: (socket: Socket) =>void ): Server; + export function createServer(options?: { allowHalfOpen?: boolean; }, connectionListener?: (socket: Socket) =>void ): Server; + export function connect(options: { port: number, host?: string, localAddress? : string, localPort? : string, family? : number, allowHalfOpen?: boolean; }, connectionListener?: Function): Socket; + export function connect(port: number, host?: string, connectionListener?: Function): Socket; + export function connect(path: string, connectionListener?: Function): Socket; + export function createConnection(options: { port: number, host?: string, localAddress? : string, localPort? : string, family? : number, allowHalfOpen?: boolean; }, connectionListener?: Function): Socket; + export function createConnection(port: number, host?: string, connectionListener?: Function): Socket; + export function createConnection(path: string, connectionListener?: Function): Socket; + export function isIP(input: string): number; + export function isIPv4(input: string): boolean; + export function isIPv6(input: string): boolean; +} + +declare module "dgram" { + import * as events from "events"; + + interface RemoteInfo { + address: string; + port: number; + size: number; + } + + interface AddressInfo { + address: string; + family: string; + port: number; + } + + export function createSocket(type: string, callback?: (msg: Buffer, rinfo: RemoteInfo) => void): Socket; + + interface Socket extends events.EventEmitter { + send(buf: Buffer, offset: number, length: number, port: number, address: string, callback?: (error: Error, bytes: number) => void): void; + bind(port: number, address?: string, callback?: () => void): void; + close(): void; + address(): AddressInfo; + setBroadcast(flag: boolean): void; + setMulticastTTL(ttl: number): void; + setMulticastLoopback(flag: boolean): void; + addMembership(multicastAddress: string, multicastInterface?: string): void; + dropMembership(multicastAddress: string, multicastInterface?: string): void; + } +} + +declare module "fs" { + import * as stream from "stream"; + import * as events from "events"; + + interface Stats { + isFile(): boolean; + isDirectory(): boolean; + isBlockDevice(): boolean; + isCharacterDevice(): boolean; + isSymbolicLink(): boolean; + isFIFO(): boolean; + isSocket(): boolean; + dev: number; + ino: number; + mode: number; + nlink: number; + uid: number; + gid: number; + rdev: number; + size: number; + blksize: number; + blocks: number; + atime: Date; + mtime: Date; + ctime: Date; + birthtime: Date; + } + + interface FSWatcher extends events.EventEmitter { + close(): void; + } + + export interface ReadStream extends stream.Readable { + close(): void; + } + export interface WriteStream extends stream.Writable { + close(): void; + bytesWritten: number; + } + + /** + * Asynchronous rename. + * @param oldPath + * @param newPath + * @param callback No arguments other than a possible exception are given to the completion callback. + */ + export function rename(oldPath: string, newPath: string, callback?: (err?: NodeJS.ErrnoException) => void): void; + /** + * Synchronous rename + * @param oldPath + * @param newPath + */ + export function renameSync(oldPath: string, newPath: string): void; + export function truncate(path: string, callback?: (err?: NodeJS.ErrnoException) => void): void; + export function truncate(path: string, len: number, callback?: (err?: NodeJS.ErrnoException) => void): void; + export function truncateSync(path: string, len?: number): void; + export function ftruncate(fd: number, callback?: (err?: NodeJS.ErrnoException) => void): void; + export function ftruncate(fd: number, len: number, callback?: (err?: NodeJS.ErrnoException) => void): void; + export function ftruncateSync(fd: number, len?: number): void; + export function chown(path: string, uid: number, gid: number, callback?: (err?: NodeJS.ErrnoException) => void): void; + export function chownSync(path: string, uid: number, gid: number): void; + export function fchown(fd: number, uid: number, gid: number, callback?: (err?: NodeJS.ErrnoException) => void): void; + export function fchownSync(fd: number, uid: number, gid: number): void; + export function lchown(path: string, uid: number, gid: number, callback?: (err?: NodeJS.ErrnoException) => void): void; + export function lchownSync(path: string, uid: number, gid: number): void; + export function chmod(path: string, mode: number, callback?: (err?: NodeJS.ErrnoException) => void): void; + export function chmod(path: string, mode: string, callback?: (err?: NodeJS.ErrnoException) => void): void; + export function chmodSync(path: string, mode: number): void; + export function chmodSync(path: string, mode: string): void; + export function fchmod(fd: number, mode: number, callback?: (err?: NodeJS.ErrnoException) => void): void; + export function fchmod(fd: number, mode: string, callback?: (err?: NodeJS.ErrnoException) => void): void; + export function fchmodSync(fd: number, mode: number): void; + export function fchmodSync(fd: number, mode: string): void; + export function lchmod(path: string, mode: number, callback?: (err?: NodeJS.ErrnoException) => void): void; + export function lchmod(path: string, mode: string, callback?: (err?: NodeJS.ErrnoException) => void): void; + export function lchmodSync(path: string, mode: number): void; + export function lchmodSync(path: string, mode: string): void; + export function stat(path: string, callback?: (err: NodeJS.ErrnoException, stats: Stats) => any): void; + export function lstat(path: string, callback?: (err: NodeJS.ErrnoException, stats: Stats) => any): void; + export function fstat(fd: number, callback?: (err: NodeJS.ErrnoException, stats: Stats) => any): void; + export function statSync(path: string): Stats; + export function lstatSync(path: string): Stats; + export function fstatSync(fd: number): Stats; + export function link(srcpath: string, dstpath: string, callback?: (err?: NodeJS.ErrnoException) => void): void; + export function linkSync(srcpath: string, dstpath: string): void; + export function symlink(srcpath: string, dstpath: string, type?: string, callback?: (err?: NodeJS.ErrnoException) => void): void; + export function symlinkSync(srcpath: string, dstpath: string, type?: string): void; + export function readlink(path: string, callback?: (err: NodeJS.ErrnoException, linkString: string) => any): void; + export function readlinkSync(path: string): string; + export function realpath(path: string, callback?: (err: NodeJS.ErrnoException, resolvedPath: string) => any): void; + export function realpath(path: string, cache: {[path: string]: string}, callback: (err: NodeJS.ErrnoException, resolvedPath: string) =>any): void; + export function realpathSync(path: string, cache?: { [path: string]: string }): string; + /* + * Asynchronous unlink - deletes the file specified in {path} + * + * @param path + * @param callback No arguments other than a possible exception are given to the completion callback. + */ + export function unlink(path: string, callback?: (err?: NodeJS.ErrnoException) => void): void; + /* + * Synchronous unlink - deletes the file specified in {path} + * + * @param path + */ + export function unlinkSync(path: string): void; + /* + * Asynchronous rmdir - removes the directory specified in {path} + * + * @param path + * @param callback No arguments other than a possible exception are given to the completion callback. + */ + export function rmdir(path: string, callback?: (err?: NodeJS.ErrnoException) => void): void; + /* + * Synchronous rmdir - removes the directory specified in {path} + * + * @param path + */ + export function rmdirSync(path: string): void; + /* + * Asynchronous mkdir - creates the directory specified in {path}. Parameter {mode} defaults to 0777. + * + * @param path + * @param callback No arguments other than a possible exception are given to the completion callback. + */ + export function mkdir(path: string, callback?: (err?: NodeJS.ErrnoException) => void): void; + /* + * Asynchronous mkdir - creates the directory specified in {path}. Parameter {mode} defaults to 0777. + * + * @param path + * @param mode + * @param callback No arguments other than a possible exception are given to the completion callback. + */ + export function mkdir(path: string, mode: number, callback?: (err?: NodeJS.ErrnoException) => void): void; + /* + * Asynchronous mkdir - creates the directory specified in {path}. Parameter {mode} defaults to 0777. + * + * @param path + * @param mode + * @param callback No arguments other than a possible exception are given to the completion callback. + */ + export function mkdir(path: string, mode: string, callback?: (err?: NodeJS.ErrnoException) => void): void; + /* + * Synchronous mkdir - creates the directory specified in {path}. Parameter {mode} defaults to 0777. + * + * @param path + * @param mode + * @param callback No arguments other than a possible exception are given to the completion callback. + */ + export function mkdirSync(path: string, mode?: number): void; + /* + * Synchronous mkdir - creates the directory specified in {path}. Parameter {mode} defaults to 0777. + * + * @param path + * @param mode + * @param callback No arguments other than a possible exception are given to the completion callback. + */ + export function mkdirSync(path: string, mode?: string): void; + export function readdir(path: string, callback?: (err: NodeJS.ErrnoException, files: string[]) => void): void; + export function readdirSync(path: string): string[]; + export function close(fd: number, callback?: (err?: NodeJS.ErrnoException) => void): void; + export function closeSync(fd: number): void; + export function open(path: string, flags: string, callback?: (err: NodeJS.ErrnoException, fd: number) => any): void; + export function open(path: string, flags: string, mode: number, callback?: (err: NodeJS.ErrnoException, fd: number) => any): void; + export function open(path: string, flags: string, mode: string, callback?: (err: NodeJS.ErrnoException, fd: number) => any): void; + export function openSync(path: string, flags: string, mode?: number): number; + export function openSync(path: string, flags: string, mode?: string): number; + export function utimes(path: string, atime: number, mtime: number, callback?: (err?: NodeJS.ErrnoException) => void): void; + export function utimes(path: string, atime: Date, mtime: Date, callback?: (err?: NodeJS.ErrnoException) => void): void; + export function utimesSync(path: string, atime: number, mtime: number): void; + export function utimesSync(path: string, atime: Date, mtime: Date): void; + export function futimes(fd: number, atime: number, mtime: number, callback?: (err?: NodeJS.ErrnoException) => void): void; + export function futimes(fd: number, atime: Date, mtime: Date, callback?: (err?: NodeJS.ErrnoException) => void): void; + export function futimesSync(fd: number, atime: number, mtime: number): void; + export function futimesSync(fd: number, atime: Date, mtime: Date): void; + export function fsync(fd: number, callback?: (err?: NodeJS.ErrnoException) => void): void; + export function fsyncSync(fd: number): void; + export function write(fd: number, buffer: Buffer, offset: number, length: number, position: number, callback?: (err: NodeJS.ErrnoException, written: number, buffer: Buffer) => void): void; + export function write(fd: number, buffer: Buffer, offset: number, length: number, callback?: (err: NodeJS.ErrnoException, written: number, buffer: Buffer) => void): void; + export function write(fd: number, data: any, callback?: (err: NodeJS.ErrnoException, written: number, str: string) => void): void; + export function write(fd: number, data: any, offset: number, callback?: (err: NodeJS.ErrnoException, written: number, str: string) => void): void; + export function write(fd: number, data: any, offset: number, encoding: string, callback?: (err: NodeJS.ErrnoException, written: number, str: string) => void): void; + export function writeSync(fd: number, buffer: Buffer, offset: number, length: number, position?: number): number; + export function writeSync(fd: number, data: any, position?: number, enconding?: string): number; + export function read(fd: number, buffer: Buffer, offset: number, length: number, position: number, callback?: (err: NodeJS.ErrnoException, bytesRead: number, buffer: Buffer) => void): void; + export function readSync(fd: number, buffer: Buffer, offset: number, length: number, position: number): number; + /* + * Asynchronous readFile - Asynchronously reads the entire contents of a file. + * + * @param fileName + * @param encoding + * @param callback - The callback is passed two arguments (err, data), where data is the contents of the file. + */ + export function readFile(filename: string, encoding: string, callback: (err: NodeJS.ErrnoException, data: string) => void): void; + /* + * Asynchronous readFile - Asynchronously reads the entire contents of a file. + * + * @param fileName + * @param options An object with optional {encoding} and {flag} properties. If {encoding} is specified, readFile returns a string; otherwise it returns a Buffer. + * @param callback - The callback is passed two arguments (err, data), where data is the contents of the file. + */ + export function readFile(filename: string, options: { encoding: string; flag?: string; }, callback: (err: NodeJS.ErrnoException, data: string) => void): void; + /* + * Asynchronous readFile - Asynchronously reads the entire contents of a file. + * + * @param fileName + * @param options An object with optional {encoding} and {flag} properties. If {encoding} is specified, readFile returns a string; otherwise it returns a Buffer. + * @param callback - The callback is passed two arguments (err, data), where data is the contents of the file. + */ + export function readFile(filename: string, options: { flag?: string; }, callback: (err: NodeJS.ErrnoException, data: Buffer) => void): void; + /* + * Asynchronous readFile - Asynchronously reads the entire contents of a file. + * + * @param fileName + * @param callback - The callback is passed two arguments (err, data), where data is the contents of the file. + */ + export function readFile(filename: string, callback: (err: NodeJS.ErrnoException, data: Buffer) => void): void; + /* + * Synchronous readFile - Synchronously reads the entire contents of a file. + * + * @param fileName + * @param encoding + */ + export function readFileSync(filename: string, encoding: string): string; + /* + * Synchronous readFile - Synchronously reads the entire contents of a file. + * + * @param fileName + * @param options An object with optional {encoding} and {flag} properties. If {encoding} is specified, readFileSync returns a string; otherwise it returns a Buffer. + */ + export function readFileSync(filename: string, options: { encoding: string; flag?: string; }): string; + /* + * Synchronous readFile - Synchronously reads the entire contents of a file. + * + * @param fileName + * @param options An object with optional {encoding} and {flag} properties. If {encoding} is specified, readFileSync returns a string; otherwise it returns a Buffer. + */ + export function readFileSync(filename: string, options?: { flag?: string; }): Buffer; + export function writeFile(filename: string, data: any, callback?: (err: NodeJS.ErrnoException) => void): void; + export function writeFile(filename: string, data: any, options: { encoding?: string; mode?: number; flag?: string; }, callback?: (err: NodeJS.ErrnoException) => void): void; + export function writeFile(filename: string, data: any, options: { encoding?: string; mode?: string; flag?: string; }, callback?: (err: NodeJS.ErrnoException) => void): void; + export function writeFileSync(filename: string, data: any, options?: { encoding?: string; mode?: number; flag?: string; }): void; + export function writeFileSync(filename: string, data: any, options?: { encoding?: string; mode?: string; flag?: string; }): void; + export function appendFile(filename: string, data: any, options: { encoding?: string; mode?: number; flag?: string; }, callback?: (err: NodeJS.ErrnoException) => void): void; + export function appendFile(filename: string, data: any, options: { encoding?: string; mode?: string; flag?: string; }, callback?: (err: NodeJS.ErrnoException) => void): void; + export function appendFile(filename: string, data: any, callback?: (err: NodeJS.ErrnoException) => void): void; + export function appendFileSync(filename: string, data: any, options?: { encoding?: string; mode?: number; flag?: string; }): void; + export function appendFileSync(filename: string, data: any, options?: { encoding?: string; mode?: string; flag?: string; }): void; + export function watchFile(filename: string, listener: (curr: Stats, prev: Stats) => void): void; + export function watchFile(filename: string, options: { persistent?: boolean; interval?: number; }, listener: (curr: Stats, prev: Stats) => void): void; + export function unwatchFile(filename: string, listener?: (curr: Stats, prev: Stats) => void): void; + export function watch(filename: string, listener?: (event: string, filename: string) => any): FSWatcher; + export function watch(filename: string, options: { persistent?: boolean; }, listener?: (event: string, filename: string) => any): FSWatcher; + export function exists(path: string, callback?: (exists: boolean) => void): void; + export function existsSync(path: string): boolean; + /** Constant for fs.access(). File is visible to the calling process. */ + export var F_OK: number; + /** Constant for fs.access(). File can be read by the calling process. */ + export var R_OK: number; + /** Constant for fs.access(). File can be written by the calling process. */ + export var W_OK: number; + /** Constant for fs.access(). File can be executed by the calling process. */ + export var X_OK: number; + /** Tests a user's permissions for the file specified by path. */ + export function access(path: string, callback: (err: NodeJS.ErrnoException) => void): void; + export function access(path: string, mode: number, callback: (err: NodeJS.ErrnoException) => void): void; + /** Synchronous version of fs.access. This throws if any accessibility checks fail, and does nothing otherwise. */ + export function accessSync(path: string, mode ?: number): void; + export function createReadStream(path: string, options?: { + flags?: string; + encoding?: string; + fd?: number; + mode?: number; + autoClose?: boolean; + }): ReadStream; + export function createWriteStream(path: string, options?: { + flags?: string; + encoding?: string; + fd?: number; + mode?: number; + }): WriteStream; +} + +declare module "path" { + + /** + * A parsed path object generated by path.parse() or consumed by path.format(). + */ + export interface ParsedPath { + /** + * The root of the path such as '/' or 'c:\' + */ + root: string; + /** + * The full directory path such as '/home/user/dir' or 'c:\path\dir' + */ + dir: string; + /** + * The file name including extension (if any) such as 'index.html' + */ + base: string; + /** + * The file extension (if any) such as '.html' + */ + ext: string; + /** + * The file name without extension (if any) such as 'index' + */ + name: string; + } + + /** + * Normalize a string path, reducing '..' and '.' parts. + * When multiple slashes are found, they're replaced by a single one; when the path contains a trailing slash, it is preserved. On Windows backslashes are used. + * + * @param p string path to normalize. + */ + export function normalize(p: string): string; + /** + * Join all arguments together and normalize the resulting path. + * Arguments must be strings. In v0.8, non-string arguments were silently ignored. In v0.10 and up, an exception is thrown. + * + * @param paths string paths to join. + */ + export function join(...paths: any[]): string; + /** + * Join all arguments together and normalize the resulting path. + * Arguments must be strings. In v0.8, non-string arguments were silently ignored. In v0.10 and up, an exception is thrown. + * + * @param paths string paths to join. + */ + export function join(...paths: string[]): string; + /** + * The right-most parameter is considered {to}. Other parameters are considered an array of {from}. + * + * Starting from leftmost {from} paramter, resolves {to} to an absolute path. + * + * If {to} isn't already absolute, {from} arguments are prepended in right to left order, until an absolute path is found. If after using all {from} paths still no absolute path is found, the current working directory is used as well. The resulting path is normalized, and trailing slashes are removed unless the path gets resolved to the root directory. + * + * @param pathSegments string paths to join. Non-string arguments are ignored. + */ + export function resolve(...pathSegments: any[]): string; + /** + * Determines whether {path} is an absolute path. An absolute path will always resolve to the same location, regardless of the working directory. + * + * @param path path to test. + */ + export function isAbsolute(path: string): boolean; + /** + * Solve the relative path from {from} to {to}. + * At times we have two absolute paths, and we need to derive the relative path from one to the other. This is actually the reverse transform of path.resolve. + * + * @param from + * @param to + */ + export function relative(from: string, to: string): string; + /** + * Return the directory name of a path. Similar to the Unix dirname command. + * + * @param p the path to evaluate. + */ + export function dirname(p: string): string; + /** + * Return the last portion of a path. Similar to the Unix basename command. + * Often used to extract the file name from a fully qualified path. + * + * @param p the path to evaluate. + * @param ext optionally, an extension to remove from the result. + */ + export function basename(p: string, ext?: string): string; + /** + * Return the extension of the path, from the last '.' to end of string in the last portion of the path. + * If there is no '.' in the last portion of the path or the first character of it is '.', then it returns an empty string + * + * @param p the path to evaluate. + */ + export function extname(p: string): string; + /** + * The platform-specific file separator. '\\' or '/'. + */ + export var sep: string; + /** + * The platform-specific file delimiter. ';' or ':'. + */ + export var delimiter: string; + /** + * Returns an object from a path string - the opposite of format(). + * + * @param pathString path to evaluate. + */ + export function parse(pathString: string): ParsedPath; + /** + * Returns a path string from an object - the opposite of parse(). + * + * @param pathString path to evaluate. + */ + export function format(pathObject: ParsedPath): string; + + export module posix { + export function normalize(p: string): string; + export function join(...paths: any[]): string; + export function resolve(...pathSegments: any[]): string; + export function isAbsolute(p: string): boolean; + export function relative(from: string, to: string): string; + export function dirname(p: string): string; + export function basename(p: string, ext?: string): string; + export function extname(p: string): string; + export var sep: string; + export var delimiter: string; + export function parse(p: string): ParsedPath; + export function format(pP: ParsedPath): string; + } + + export module win32 { + export function normalize(p: string): string; + export function join(...paths: any[]): string; + export function resolve(...pathSegments: any[]): string; + export function isAbsolute(p: string): boolean; + export function relative(from: string, to: string): string; + export function dirname(p: string): string; + export function basename(p: string, ext?: string): string; + export function extname(p: string): string; + export var sep: string; + export var delimiter: string; + export function parse(p: string): ParsedPath; + export function format(pP: ParsedPath): string; + } +} + +declare module "string_decoder" { + export interface NodeStringDecoder { + write(buffer: Buffer): string; + detectIncompleteChar(buffer: Buffer): number; + } + export var StringDecoder: { + new (encoding: string): NodeStringDecoder; + }; +} + +declare module "tls" { + import * as crypto from "crypto"; + import * as net from "net"; + import * as stream from "stream"; + + var CLIENT_RENEG_LIMIT: number; + var CLIENT_RENEG_WINDOW: number; + + export interface TlsOptions { + host?: string; + port?: number; + pfx?: any; //string or buffer + key?: any; //string or buffer + passphrase?: string; + cert?: any; + ca?: any; //string or buffer + crl?: any; //string or string array + ciphers?: string; + honorCipherOrder?: any; + requestCert?: boolean; + rejectUnauthorized?: boolean; + NPNProtocols?: any; //array or Buffer; + SNICallback?: (servername: string) => any; + } + + export interface ConnectionOptions { + host?: string; + port?: number; + socket?: net.Socket; + pfx?: any; //string | Buffer + key?: any; //string | Buffer + passphrase?: string; + cert?: any; //string | Buffer + ca?: any; //Array of string | Buffer + rejectUnauthorized?: boolean; + NPNProtocols?: any; //Array of string | Buffer + servername?: string; + } + + export interface Server extends net.Server { + close(): Server; + address(): { port: number; family: string; address: string; }; + addContext(hostName: string, credentials: { + key: string; + cert: string; + ca: string; + }): void; + maxConnections: number; + connections: number; + } + + export interface ClearTextStream extends stream.Duplex { + authorized: boolean; + authorizationError: Error; + getPeerCertificate(): any; + getCipher: { + name: string; + version: string; + }; + address: { + port: number; + family: string; + address: string; + }; + remoteAddress: string; + remotePort: number; + } + + export interface SecurePair { + encrypted: any; + cleartext: any; + } + + export interface SecureContextOptions { + pfx?: any; //string | buffer + key?: any; //string | buffer + passphrase?: string; + cert?: any; // string | buffer + ca?: any; // string | buffer + crl?: any; // string | string[] + ciphers?: string; + honorCipherOrder?: boolean; + } + + export interface SecureContext { + context: any; + } + + export function createServer(options: TlsOptions, secureConnectionListener?: (cleartextStream: ClearTextStream) =>void ): Server; + export function connect(options: TlsOptions, secureConnectionListener?: () =>void ): ClearTextStream; + export function connect(port: number, host?: string, options?: ConnectionOptions, secureConnectListener?: () =>void ): ClearTextStream; + export function connect(port: number, options?: ConnectionOptions, secureConnectListener?: () =>void ): ClearTextStream; + export function createSecurePair(credentials?: crypto.Credentials, isServer?: boolean, requestCert?: boolean, rejectUnauthorized?: boolean): SecurePair; + export function createSecureContext(details: SecureContextOptions): SecureContext; +} + +declare module "crypto" { + export interface CredentialDetails { + pfx: string; + key: string; + passphrase: string; + cert: string; + ca: any; //string | string array + crl: any; //string | string array + ciphers: string; + } + export interface Credentials { context?: any; } + export function createCredentials(details: CredentialDetails): Credentials; + export function createHash(algorithm: string): Hash; + export function createHmac(algorithm: string, key: string): Hmac; + export function createHmac(algorithm: string, key: Buffer): Hmac; + export interface Hash { + update(data: any, input_encoding?: string): Hash; + digest(encoding: 'buffer'): Buffer; + digest(encoding: string): any; + digest(): Buffer; + } + export interface Hmac extends NodeJS.ReadWriteStream { + update(data: any, input_encoding?: string): Hmac; + digest(encoding: 'buffer'): Buffer; + digest(encoding: string): any; + digest(): Buffer; + } + export function createCipher(algorithm: string, password: any): Cipher; + export function createCipheriv(algorithm: string, key: any, iv: any): Cipher; + export interface Cipher extends NodeJS.ReadWriteStream { + update(data: Buffer): Buffer; + update(data: string, input_encoding: "utf8"|"ascii"|"binary"): Buffer; + update(data: Buffer, input_encoding: any, output_encoding: "binary"|"base64"|"hex"): string; + update(data: string, input_encoding: "utf8"|"ascii"|"binary", output_encoding: "binary"|"base64"|"hex"): string; + final(): Buffer; + final(output_encoding: string): string; + setAutoPadding(auto_padding: boolean): void; + getAuthTag(): Buffer; + } + export function createDecipher(algorithm: string, password: any): Decipher; + export function createDecipheriv(algorithm: string, key: any, iv: any): Decipher; + export interface Decipher extends NodeJS.ReadWriteStream { + update(data: Buffer): Buffer; + update(data: string, input_encoding: "binary"|"base64"|"hex"): Buffer; + update(data: Buffer, input_encoding: any, output_encoding: "utf8"|"ascii"|"binary"): string; + update(data: string, input_encoding: "binary"|"base64"|"hex", output_encoding: "utf8"|"ascii"|"binary"): string; + final(): Buffer; + final(output_encoding: string): string; + setAutoPadding(auto_padding: boolean): void; + setAuthTag(tag: Buffer): void; + } + export function createSign(algorithm: string): Signer; + export interface Signer extends NodeJS.WritableStream { + update(data: any): void; + sign(private_key: string, output_format: string): string; + } + export function createVerify(algorith: string): Verify; + export interface Verify extends NodeJS.WritableStream { + update(data: any): void; + verify(object: string, signature: string, signature_format?: string): boolean; + } + export function createDiffieHellman(prime_length: number): DiffieHellman; + export function createDiffieHellman(prime: number, encoding?: string): DiffieHellman; + export interface DiffieHellman { + generateKeys(encoding?: string): string; + computeSecret(other_public_key: string, input_encoding?: string, output_encoding?: string): string; + getPrime(encoding?: string): string; + getGenerator(encoding: string): string; + getPublicKey(encoding?: string): string; + getPrivateKey(encoding?: string): string; + setPublicKey(public_key: string, encoding?: string): void; + setPrivateKey(public_key: string, encoding?: string): void; + } + export function getDiffieHellman(group_name: string): DiffieHellman; + export function pbkdf2(password: string|Buffer, salt: string|Buffer, iterations: number, keylen: number, callback: (err: Error, derivedKey: Buffer) => any): void; + export function pbkdf2(password: string|Buffer, salt: string|Buffer, iterations: number, keylen: number, digest: string, callback: (err: Error, derivedKey: Buffer) => any): void; + export function pbkdf2Sync(password: string|Buffer, salt: string|Buffer, iterations: number, keylen: number) : Buffer; + export function pbkdf2Sync(password: string|Buffer, salt: string|Buffer, iterations: number, keylen: number, digest: string) : Buffer; + export function randomBytes(size: number): Buffer; + export function randomBytes(size: number, callback: (err: Error, buf: Buffer) =>void ): void; + export function pseudoRandomBytes(size: number): Buffer; + export function pseudoRandomBytes(size: number, callback: (err: Error, buf: Buffer) =>void ): void; + export interface RsaPublicKey { + key: string; + padding?: any; + } + export interface RsaPrivateKey { + key: string; + passphrase?: string, + padding?: any; + } + export function publicEncrypt(public_key: string|RsaPublicKey, buffer: Buffer): Buffer + export function privateDecrypt(private_key: string|RsaPrivateKey, buffer: Buffer): Buffer +} + +declare module "stream" { + import * as events from "events"; + + export class Stream extends events.EventEmitter { + pipe(destination: T, options?: { end?: boolean; }): T; + } + + export interface ReadableOptions { + highWaterMark?: number; + encoding?: string; + objectMode?: boolean; + } + + export class Readable extends events.EventEmitter implements NodeJS.ReadableStream { + readable: boolean; + constructor(opts?: ReadableOptions); + _read(size: number): void; + read(size?: number): any; + setEncoding(encoding: string): void; + pause(): void; + resume(): void; + pipe(destination: T, options?: { end?: boolean; }): T; + unpipe(destination?: T): void; + unshift(chunk: any): void; + wrap(oldStream: NodeJS.ReadableStream): NodeJS.ReadableStream; + push(chunk: any, encoding?: string): boolean; + } + + export interface WritableOptions { + highWaterMark?: number; + decodeStrings?: boolean; + objectMode?: boolean; + } + + export class Writable extends events.EventEmitter implements NodeJS.WritableStream { + writable: boolean; + constructor(opts?: WritableOptions); + _write(chunk: any, encoding: string, callback: Function): void; + write(chunk: any, cb?: Function): boolean; + write(chunk: any, encoding?: string, cb?: Function): boolean; + end(): void; + end(chunk: any, cb?: Function): void; + end(chunk: any, encoding?: string, cb?: Function): void; + } + + export interface DuplexOptions extends ReadableOptions, WritableOptions { + allowHalfOpen?: boolean; + } + + // Note: Duplex extends both Readable and Writable. + export class Duplex extends Readable implements NodeJS.ReadWriteStream { + writable: boolean; + constructor(opts?: DuplexOptions); + _write(chunk: any, encoding: string, callback: Function): void; + write(chunk: any, cb?: Function): boolean; + write(chunk: any, encoding?: string, cb?: Function): boolean; + end(): void; + end(chunk: any, cb?: Function): void; + end(chunk: any, encoding?: string, cb?: Function): void; + } + + export interface TransformOptions extends ReadableOptions, WritableOptions {} + + // Note: Transform lacks the _read and _write methods of Readable/Writable. + export class Transform extends events.EventEmitter implements NodeJS.ReadWriteStream { + readable: boolean; + writable: boolean; + constructor(opts?: TransformOptions); + _transform(chunk: any, encoding: string, callback: Function): void; + _flush(callback: Function): void; + read(size?: number): any; + setEncoding(encoding: string): void; + pause(): void; + resume(): void; + pipe(destination: T, options?: { end?: boolean; }): T; + unpipe(destination?: T): void; + unshift(chunk: any): void; + wrap(oldStream: NodeJS.ReadableStream): NodeJS.ReadableStream; + push(chunk: any, encoding?: string): boolean; + write(chunk: any, cb?: Function): boolean; + write(chunk: any, encoding?: string, cb?: Function): boolean; + end(): void; + end(chunk: any, cb?: Function): void; + end(chunk: any, encoding?: string, cb?: Function): void; + } + + export class PassThrough extends Transform {} +} + +declare module "util" { + export interface InspectOptions { + showHidden?: boolean; + depth?: number; + colors?: boolean; + customInspect?: boolean; + } + + export function format(format: any, ...param: any[]): string; + export function debug(string: string): void; + export function error(...param: any[]): void; + export function puts(...param: any[]): void; + export function print(...param: any[]): void; + export function log(string: string): void; + export function inspect(object: any, showHidden?: boolean, depth?: number, color?: boolean): string; + export function inspect(object: any, options: InspectOptions): string; + export function isArray(object: any): boolean; + export function isRegExp(object: any): boolean; + export function isDate(object: any): boolean; + export function isError(object: any): boolean; + export function inherits(constructor: any, superConstructor: any): void; + export function debuglog(key:string): (msg:string,...param: any[])=>void; +} + +declare module "assert" { + function internal (value: any, message?: string): void; + namespace internal { + export class AssertionError implements Error { + name: string; + message: string; + actual: any; + expected: any; + operator: string; + generatedMessage: boolean; + + constructor(options?: {message?: string; actual?: any; expected?: any; + operator?: string; stackStartFunction?: Function}); + } + + export function fail(actual?: any, expected?: any, message?: string, operator?: string): void; + export function ok(value: any, message?: string): void; + export function equal(actual: any, expected: any, message?: string): void; + export function notEqual(actual: any, expected: any, message?: string): void; + export function deepEqual(actual: any, expected: any, message?: string): void; + export function notDeepEqual(acutal: any, expected: any, message?: string): void; + export function strictEqual(actual: any, expected: any, message?: string): void; + export function notStrictEqual(actual: any, expected: any, message?: string): void; + export function deepStrictEqual(actual: any, expected: any, message?: string): void; + export function notDeepStrictEqual(actual: any, expected: any, message?: string): void; + export var throws: { + (block: Function, message?: string): void; + (block: Function, error: Function, message?: string): void; + (block: Function, error: RegExp, message?: string): void; + (block: Function, error: (err: any) => boolean, message?: string): void; + }; + + export var doesNotThrow: { + (block: Function, message?: string): void; + (block: Function, error: Function, message?: string): void; + (block: Function, error: RegExp, message?: string): void; + (block: Function, error: (err: any) => boolean, message?: string): void; + }; + + export function ifError(value: any): void; + } + + export = internal; +} + +declare module "tty" { + import * as net from "net"; + + export function isatty(fd: number): boolean; + export interface ReadStream extends net.Socket { + isRaw: boolean; + setRawMode(mode: boolean): void; + isTTY: boolean; + } + export interface WriteStream extends net.Socket { + columns: number; + rows: number; + isTTY: boolean; + } +} + +declare module "domain" { + import * as events from "events"; + + export class Domain extends events.EventEmitter implements NodeJS.Domain { + run(fn: Function): void; + add(emitter: events.EventEmitter): void; + remove(emitter: events.EventEmitter): void; + bind(cb: (err: Error, data: any) => any): any; + intercept(cb: (data: any) => any): any; + dispose(): void; + } + + export function create(): Domain; +} + +declare module "constants" { + export var E2BIG: number; + export var EACCES: number; + export var EADDRINUSE: number; + export var EADDRNOTAVAIL: number; + export var EAFNOSUPPORT: number; + export var EAGAIN: number; + export var EALREADY: number; + export var EBADF: number; + export var EBADMSG: number; + export var EBUSY: number; + export var ECANCELED: number; + export var ECHILD: number; + export var ECONNABORTED: number; + export var ECONNREFUSED: number; + export var ECONNRESET: number; + export var EDEADLK: number; + export var EDESTADDRREQ: number; + export var EDOM: number; + export var EEXIST: number; + export var EFAULT: number; + export var EFBIG: number; + export var EHOSTUNREACH: number; + export var EIDRM: number; + export var EILSEQ: number; + export var EINPROGRESS: number; + export var EINTR: number; + export var EINVAL: number; + export var EIO: number; + export var EISCONN: number; + export var EISDIR: number; + export var ELOOP: number; + export var EMFILE: number; + export var EMLINK: number; + export var EMSGSIZE: number; + export var ENAMETOOLONG: number; + export var ENETDOWN: number; + export var ENETRESET: number; + export var ENETUNREACH: number; + export var ENFILE: number; + export var ENOBUFS: number; + export var ENODATA: number; + export var ENODEV: number; + export var ENOENT: number; + export var ENOEXEC: number; + export var ENOLCK: number; + export var ENOLINK: number; + export var ENOMEM: number; + export var ENOMSG: number; + export var ENOPROTOOPT: number; + export var ENOSPC: number; + export var ENOSR: number; + export var ENOSTR: number; + export var ENOSYS: number; + export var ENOTCONN: number; + export var ENOTDIR: number; + export var ENOTEMPTY: number; + export var ENOTSOCK: number; + export var ENOTSUP: number; + export var ENOTTY: number; + export var ENXIO: number; + export var EOPNOTSUPP: number; + export var EOVERFLOW: number; + export var EPERM: number; + export var EPIPE: number; + export var EPROTO: number; + export var EPROTONOSUPPORT: number; + export var EPROTOTYPE: number; + export var ERANGE: number; + export var EROFS: number; + export var ESPIPE: number; + export var ESRCH: number; + export var ETIME: number; + export var ETIMEDOUT: number; + export var ETXTBSY: number; + export var EWOULDBLOCK: number; + export var EXDEV: number; + export var WSAEINTR: number; + export var WSAEBADF: number; + export var WSAEACCES: number; + export var WSAEFAULT: number; + export var WSAEINVAL: number; + export var WSAEMFILE: number; + export var WSAEWOULDBLOCK: number; + export var WSAEINPROGRESS: number; + export var WSAEALREADY: number; + export var WSAENOTSOCK: number; + export var WSAEDESTADDRREQ: number; + export var WSAEMSGSIZE: number; + export var WSAEPROTOTYPE: number; + export var WSAENOPROTOOPT: number; + export var WSAEPROTONOSUPPORT: number; + export var WSAESOCKTNOSUPPORT: number; + export var WSAEOPNOTSUPP: number; + export var WSAEPFNOSUPPORT: number; + export var WSAEAFNOSUPPORT: number; + export var WSAEADDRINUSE: number; + export var WSAEADDRNOTAVAIL: number; + export var WSAENETDOWN: number; + export var WSAENETUNREACH: number; + export var WSAENETRESET: number; + export var WSAECONNABORTED: number; + export var WSAECONNRESET: number; + export var WSAENOBUFS: number; + export var WSAEISCONN: number; + export var WSAENOTCONN: number; + export var WSAESHUTDOWN: number; + export var WSAETOOMANYREFS: number; + export var WSAETIMEDOUT: number; + export var WSAECONNREFUSED: number; + export var WSAELOOP: number; + export var WSAENAMETOOLONG: number; + export var WSAEHOSTDOWN: number; + export var WSAEHOSTUNREACH: number; + export var WSAENOTEMPTY: number; + export var WSAEPROCLIM: number; + export var WSAEUSERS: number; + export var WSAEDQUOT: number; + export var WSAESTALE: number; + export var WSAEREMOTE: number; + export var WSASYSNOTREADY: number; + export var WSAVERNOTSUPPORTED: number; + export var WSANOTINITIALISED: number; + export var WSAEDISCON: number; + export var WSAENOMORE: number; + export var WSAECANCELLED: number; + export var WSAEINVALIDPROCTABLE: number; + export var WSAEINVALIDPROVIDER: number; + export var WSAEPROVIDERFAILEDINIT: number; + export var WSASYSCALLFAILURE: number; + export var WSASERVICE_NOT_FOUND: number; + export var WSATYPE_NOT_FOUND: number; + export var WSA_E_NO_MORE: number; + export var WSA_E_CANCELLED: number; + export var WSAEREFUSED: number; + export var SIGHUP: number; + export var SIGINT: number; + export var SIGILL: number; + export var SIGABRT: number; + export var SIGFPE: number; + export var SIGKILL: number; + export var SIGSEGV: number; + export var SIGTERM: number; + export var SIGBREAK: number; + export var SIGWINCH: number; + export var SSL_OP_ALL: number; + export var SSL_OP_ALLOW_UNSAFE_LEGACY_RENEGOTIATION: number; + export var SSL_OP_CIPHER_SERVER_PREFERENCE: number; + export var SSL_OP_CISCO_ANYCONNECT: number; + export var SSL_OP_COOKIE_EXCHANGE: number; + export var SSL_OP_CRYPTOPRO_TLSEXT_BUG: number; + export var SSL_OP_DONT_INSERT_EMPTY_FRAGMENTS: number; + export var SSL_OP_EPHEMERAL_RSA: number; + export var SSL_OP_LEGACY_SERVER_CONNECT: number; + export var SSL_OP_MICROSOFT_BIG_SSLV3_BUFFER: number; + export var SSL_OP_MICROSOFT_SESS_ID_BUG: number; + export var SSL_OP_MSIE_SSLV2_RSA_PADDING: number; + export var SSL_OP_NETSCAPE_CA_DN_BUG: number; + export var SSL_OP_NETSCAPE_CHALLENGE_BUG: number; + export var SSL_OP_NETSCAPE_DEMO_CIPHER_CHANGE_BUG: number; + export var SSL_OP_NETSCAPE_REUSE_CIPHER_CHANGE_BUG: number; + export var SSL_OP_NO_COMPRESSION: number; + export var SSL_OP_NO_QUERY_MTU: number; + export var SSL_OP_NO_SESSION_RESUMPTION_ON_RENEGOTIATION: number; + export var SSL_OP_NO_SSLv2: number; + export var SSL_OP_NO_SSLv3: number; + export var SSL_OP_NO_TICKET: number; + export var SSL_OP_NO_TLSv1: number; + export var SSL_OP_NO_TLSv1_1: number; + export var SSL_OP_NO_TLSv1_2: number; + export var SSL_OP_PKCS1_CHECK_1: number; + export var SSL_OP_PKCS1_CHECK_2: number; + export var SSL_OP_SINGLE_DH_USE: number; + export var SSL_OP_SINGLE_ECDH_USE: number; + export var SSL_OP_SSLEAY_080_CLIENT_DH_BUG: number; + export var SSL_OP_SSLREF2_REUSE_CERT_TYPE_BUG: number; + export var SSL_OP_TLS_BLOCK_PADDING_BUG: number; + export var SSL_OP_TLS_D5_BUG: number; + export var SSL_OP_TLS_ROLLBACK_BUG: number; + export var ENGINE_METHOD_DSA: number; + export var ENGINE_METHOD_DH: number; + export var ENGINE_METHOD_RAND: number; + export var ENGINE_METHOD_ECDH: number; + export var ENGINE_METHOD_ECDSA: number; + export var ENGINE_METHOD_CIPHERS: number; + export var ENGINE_METHOD_DIGESTS: number; + export var ENGINE_METHOD_STORE: number; + export var ENGINE_METHOD_PKEY_METHS: number; + export var ENGINE_METHOD_PKEY_ASN1_METHS: number; + export var ENGINE_METHOD_ALL: number; + export var ENGINE_METHOD_NONE: number; + export var DH_CHECK_P_NOT_SAFE_PRIME: number; + export var DH_CHECK_P_NOT_PRIME: number; + export var DH_UNABLE_TO_CHECK_GENERATOR: number; + export var DH_NOT_SUITABLE_GENERATOR: number; + export var NPN_ENABLED: number; + export var RSA_PKCS1_PADDING: number; + export var RSA_SSLV23_PADDING: number; + export var RSA_NO_PADDING: number; + export var RSA_PKCS1_OAEP_PADDING: number; + export var RSA_X931_PADDING: number; + export var RSA_PKCS1_PSS_PADDING: number; + export var POINT_CONVERSION_COMPRESSED: number; + export var POINT_CONVERSION_UNCOMPRESSED: number; + export var POINT_CONVERSION_HYBRID: number; + export var O_RDONLY: number; + export var O_WRONLY: number; + export var O_RDWR: number; + export var S_IFMT: number; + export var S_IFREG: number; + export var S_IFDIR: number; + export var S_IFCHR: number; + export var S_IFLNK: number; + export var O_CREAT: number; + export var O_EXCL: number; + export var O_TRUNC: number; + export var O_APPEND: number; + export var F_OK: number; + export var R_OK: number; + export var W_OK: number; + export var X_OK: number; + export var UV_UDP_REUSEADDR: number; +} diff --git a/guidoar-dev/out32/.vs/guidoar/v16/.suo b/guidoar-dev/out32/.vs/guidoar/v16/.suo new file mode 100644 index 000000000..600efb1ad Binary files /dev/null and b/guidoar-dev/out32/.vs/guidoar/v16/.suo differ diff --git a/guidoar-dev/out32/.vs/guidoar/v16/Solution.VC.db b/guidoar-dev/out32/.vs/guidoar/v16/Solution.VC.db new file mode 100644 index 000000000..394f3c21a Binary files /dev/null and b/guidoar-dev/out32/.vs/guidoar/v16/Solution.VC.db differ diff --git a/guidoar-dev/out32/guidoar.sln b/guidoar-dev/out32/guidoar.sln new file mode 100644 index 000000000..767843435 --- /dev/null +++ b/guidoar-dev/out32/guidoar.sln @@ -0,0 +1,67 @@ + +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio Version 16 +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "ALL_BUILD", "ALL_BUILD.vcxproj", "{8875F2A0-36C6-39F6-9791-1EEC8044FAA4}" + ProjectSection(ProjectDependencies) = postProject + {8DC852E3-FAB8-3470-AB6A-D4CEC46CF5D1} = {8DC852E3-FAB8-3470-AB6A-D4CEC46CF5D1} + {40292091-39C7-3259-B4F5-6596293F9862} = {40292091-39C7-3259-B4F5-6596293F9862} + EndProjectSection +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "INSTALL", "INSTALL.vcxproj", "{A13C99E3-823D-31CF-9D04-96BB695922AF}" + ProjectSection(ProjectDependencies) = postProject + {8875F2A0-36C6-39F6-9791-1EEC8044FAA4} = {8875F2A0-36C6-39F6-9791-1EEC8044FAA4} + {8DC852E3-FAB8-3470-AB6A-D4CEC46CF5D1} = {8DC852E3-FAB8-3470-AB6A-D4CEC46CF5D1} + EndProjectSection +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "ZERO_CHECK", "ZERO_CHECK.vcxproj", "{8DC852E3-FAB8-3470-AB6A-D4CEC46CF5D1}" + ProjectSection(ProjectDependencies) = postProject + EndProjectSection +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "guidoar", "guidoar.vcxproj", "{40292091-39C7-3259-B4F5-6596293F9862}" + ProjectSection(ProjectDependencies) = postProject + {8DC852E3-FAB8-3470-AB6A-D4CEC46CF5D1} = {8DC852E3-FAB8-3470-AB6A-D4CEC46CF5D1} + EndProjectSection +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Win32 = Debug|Win32 + Release|Win32 = Release|Win32 + MinSizeRel|Win32 = MinSizeRel|Win32 + RelWithDebInfo|Win32 = RelWithDebInfo|Win32 + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {8875F2A0-36C6-39F6-9791-1EEC8044FAA4}.Debug|Win32.ActiveCfg = Debug|Win32 + {8875F2A0-36C6-39F6-9791-1EEC8044FAA4}.Debug|Win32.Build.0 = Debug|Win32 + {8875F2A0-36C6-39F6-9791-1EEC8044FAA4}.Release|Win32.ActiveCfg = Release|Win32 + {8875F2A0-36C6-39F6-9791-1EEC8044FAA4}.Release|Win32.Build.0 = Release|Win32 + {8875F2A0-36C6-39F6-9791-1EEC8044FAA4}.MinSizeRel|Win32.ActiveCfg = MinSizeRel|Win32 + {8875F2A0-36C6-39F6-9791-1EEC8044FAA4}.MinSizeRel|Win32.Build.0 = MinSizeRel|Win32 + {8875F2A0-36C6-39F6-9791-1EEC8044FAA4}.RelWithDebInfo|Win32.ActiveCfg = RelWithDebInfo|Win32 + {8875F2A0-36C6-39F6-9791-1EEC8044FAA4}.RelWithDebInfo|Win32.Build.0 = RelWithDebInfo|Win32 + {A13C99E3-823D-31CF-9D04-96BB695922AF}.Debug|Win32.ActiveCfg = Debug|Win32 + {A13C99E3-823D-31CF-9D04-96BB695922AF}.Release|Win32.ActiveCfg = Release|Win32 + {A13C99E3-823D-31CF-9D04-96BB695922AF}.MinSizeRel|Win32.ActiveCfg = MinSizeRel|Win32 + {A13C99E3-823D-31CF-9D04-96BB695922AF}.RelWithDebInfo|Win32.ActiveCfg = RelWithDebInfo|Win32 + {8DC852E3-FAB8-3470-AB6A-D4CEC46CF5D1}.Debug|Win32.ActiveCfg = Debug|Win32 + {8DC852E3-FAB8-3470-AB6A-D4CEC46CF5D1}.Debug|Win32.Build.0 = Debug|Win32 + {8DC852E3-FAB8-3470-AB6A-D4CEC46CF5D1}.Release|Win32.ActiveCfg = Release|Win32 + {8DC852E3-FAB8-3470-AB6A-D4CEC46CF5D1}.Release|Win32.Build.0 = Release|Win32 + {8DC852E3-FAB8-3470-AB6A-D4CEC46CF5D1}.MinSizeRel|Win32.ActiveCfg = MinSizeRel|Win32 + {8DC852E3-FAB8-3470-AB6A-D4CEC46CF5D1}.MinSizeRel|Win32.Build.0 = MinSizeRel|Win32 + {8DC852E3-FAB8-3470-AB6A-D4CEC46CF5D1}.RelWithDebInfo|Win32.ActiveCfg = RelWithDebInfo|Win32 + {8DC852E3-FAB8-3470-AB6A-D4CEC46CF5D1}.RelWithDebInfo|Win32.Build.0 = RelWithDebInfo|Win32 + {40292091-39C7-3259-B4F5-6596293F9862}.Debug|Win32.ActiveCfg = Debug|Win32 + {40292091-39C7-3259-B4F5-6596293F9862}.Debug|Win32.Build.0 = Debug|Win32 + {40292091-39C7-3259-B4F5-6596293F9862}.Release|Win32.ActiveCfg = Release|Win32 + {40292091-39C7-3259-B4F5-6596293F9862}.Release|Win32.Build.0 = Release|Win32 + {40292091-39C7-3259-B4F5-6596293F9862}.MinSizeRel|Win32.ActiveCfg = MinSizeRel|Win32 + {40292091-39C7-3259-B4F5-6596293F9862}.MinSizeRel|Win32.Build.0 = MinSizeRel|Win32 + {40292091-39C7-3259-B4F5-6596293F9862}.RelWithDebInfo|Win32.ActiveCfg = RelWithDebInfo|Win32 + {40292091-39C7-3259-B4F5-6596293F9862}.RelWithDebInfo|Win32.Build.0 = RelWithDebInfo|Win32 + EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + SolutionGuid = {81A22FF2-1C34-37D5-A3C7-CCA810F7EDBC} + EndGlobalSection + GlobalSection(ExtensibilityAddIns) = postSolution + EndGlobalSection +EndGlobal diff --git a/guidoar-dev/out64/.vs/guidoar/FileContentIndex/d9f01b1b-cfd0-4d9b-89c7-6978df01293f.vsidx b/guidoar-dev/out64/.vs/guidoar/FileContentIndex/d9f01b1b-cfd0-4d9b-89c7-6978df01293f.vsidx new file mode 100644 index 000000000..88d0defcf Binary files /dev/null and b/guidoar-dev/out64/.vs/guidoar/FileContentIndex/d9f01b1b-cfd0-4d9b-89c7-6978df01293f.vsidx differ diff --git a/guidoar-dev/out64/.vs/guidoar/v16/.suo b/guidoar-dev/out64/.vs/guidoar/v16/.suo new file mode 100644 index 000000000..510cb21f1 Binary files /dev/null and b/guidoar-dev/out64/.vs/guidoar/v16/.suo differ diff --git a/guidoar-dev/out64/.vs/guidoar/v16/Solution.VC.db b/guidoar-dev/out64/.vs/guidoar/v16/Solution.VC.db new file mode 100644 index 000000000..e05182652 Binary files /dev/null and b/guidoar-dev/out64/.vs/guidoar/v16/Solution.VC.db differ diff --git a/guidoar-dev/out64/.vs/guidoar/v17/.suo b/guidoar-dev/out64/.vs/guidoar/v17/.suo new file mode 100644 index 000000000..9645dcd3b Binary files /dev/null and b/guidoar-dev/out64/.vs/guidoar/v17/.suo differ diff --git a/guidoar-dev/out64/.vs/guidoar/v17/Solution.VC.db b/guidoar-dev/out64/.vs/guidoar/v17/Solution.VC.db new file mode 100644 index 000000000..204ca3415 Binary files /dev/null and b/guidoar-dev/out64/.vs/guidoar/v17/Solution.VC.db differ diff --git a/guidoar-dev/out64/guidoar.sln b/guidoar-dev/out64/guidoar.sln new file mode 100644 index 000000000..1edf2a79d --- /dev/null +++ b/guidoar-dev/out64/guidoar.sln @@ -0,0 +1,67 @@ + +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio Version 16 +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "ALL_BUILD", "ALL_BUILD.vcxproj", "{F7EF903F-6787-30AD-AB4A-3578B75E24A8}" + ProjectSection(ProjectDependencies) = postProject + {FF612E1E-8A35-366B-91B2-FD5E82DDE903} = {FF612E1E-8A35-366B-91B2-FD5E82DDE903} + {6F58F7B2-7B7A-3C42-9AE1-5666C797BAD7} = {6F58F7B2-7B7A-3C42-9AE1-5666C797BAD7} + EndProjectSection +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "INSTALL", "INSTALL.vcxproj", "{B91B3715-1FE5-397E-9496-29244D0411C9}" + ProjectSection(ProjectDependencies) = postProject + {F7EF903F-6787-30AD-AB4A-3578B75E24A8} = {F7EF903F-6787-30AD-AB4A-3578B75E24A8} + {FF612E1E-8A35-366B-91B2-FD5E82DDE903} = {FF612E1E-8A35-366B-91B2-FD5E82DDE903} + EndProjectSection +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "ZERO_CHECK", "ZERO_CHECK.vcxproj", "{FF612E1E-8A35-366B-91B2-FD5E82DDE903}" + ProjectSection(ProjectDependencies) = postProject + EndProjectSection +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "guidoar", "guidoar.vcxproj", "{6F58F7B2-7B7A-3C42-9AE1-5666C797BAD7}" + ProjectSection(ProjectDependencies) = postProject + {FF612E1E-8A35-366B-91B2-FD5E82DDE903} = {FF612E1E-8A35-366B-91B2-FD5E82DDE903} + EndProjectSection +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|x64 = Debug|x64 + Release|x64 = Release|x64 + MinSizeRel|x64 = MinSizeRel|x64 + RelWithDebInfo|x64 = RelWithDebInfo|x64 + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {F7EF903F-6787-30AD-AB4A-3578B75E24A8}.Debug|x64.ActiveCfg = Debug|x64 + {F7EF903F-6787-30AD-AB4A-3578B75E24A8}.Debug|x64.Build.0 = Debug|x64 + {F7EF903F-6787-30AD-AB4A-3578B75E24A8}.Release|x64.ActiveCfg = Release|x64 + {F7EF903F-6787-30AD-AB4A-3578B75E24A8}.Release|x64.Build.0 = Release|x64 + {F7EF903F-6787-30AD-AB4A-3578B75E24A8}.MinSizeRel|x64.ActiveCfg = MinSizeRel|x64 + {F7EF903F-6787-30AD-AB4A-3578B75E24A8}.MinSizeRel|x64.Build.0 = MinSizeRel|x64 + {F7EF903F-6787-30AD-AB4A-3578B75E24A8}.RelWithDebInfo|x64.ActiveCfg = RelWithDebInfo|x64 + {F7EF903F-6787-30AD-AB4A-3578B75E24A8}.RelWithDebInfo|x64.Build.0 = RelWithDebInfo|x64 + {B91B3715-1FE5-397E-9496-29244D0411C9}.Debug|x64.ActiveCfg = Debug|x64 + {B91B3715-1FE5-397E-9496-29244D0411C9}.Release|x64.ActiveCfg = Release|x64 + {B91B3715-1FE5-397E-9496-29244D0411C9}.MinSizeRel|x64.ActiveCfg = MinSizeRel|x64 + {B91B3715-1FE5-397E-9496-29244D0411C9}.RelWithDebInfo|x64.ActiveCfg = RelWithDebInfo|x64 + {FF612E1E-8A35-366B-91B2-FD5E82DDE903}.Debug|x64.ActiveCfg = Debug|x64 + {FF612E1E-8A35-366B-91B2-FD5E82DDE903}.Debug|x64.Build.0 = Debug|x64 + {FF612E1E-8A35-366B-91B2-FD5E82DDE903}.Release|x64.ActiveCfg = Release|x64 + {FF612E1E-8A35-366B-91B2-FD5E82DDE903}.Release|x64.Build.0 = Release|x64 + {FF612E1E-8A35-366B-91B2-FD5E82DDE903}.MinSizeRel|x64.ActiveCfg = MinSizeRel|x64 + {FF612E1E-8A35-366B-91B2-FD5E82DDE903}.MinSizeRel|x64.Build.0 = MinSizeRel|x64 + {FF612E1E-8A35-366B-91B2-FD5E82DDE903}.RelWithDebInfo|x64.ActiveCfg = RelWithDebInfo|x64 + {FF612E1E-8A35-366B-91B2-FD5E82DDE903}.RelWithDebInfo|x64.Build.0 = RelWithDebInfo|x64 + {6F58F7B2-7B7A-3C42-9AE1-5666C797BAD7}.Debug|x64.ActiveCfg = Debug|x64 + {6F58F7B2-7B7A-3C42-9AE1-5666C797BAD7}.Debug|x64.Build.0 = Debug|x64 + {6F58F7B2-7B7A-3C42-9AE1-5666C797BAD7}.Release|x64.ActiveCfg = Release|x64 + {6F58F7B2-7B7A-3C42-9AE1-5666C797BAD7}.Release|x64.Build.0 = Release|x64 + {6F58F7B2-7B7A-3C42-9AE1-5666C797BAD7}.MinSizeRel|x64.ActiveCfg = MinSizeRel|x64 + {6F58F7B2-7B7A-3C42-9AE1-5666C797BAD7}.MinSizeRel|x64.Build.0 = MinSizeRel|x64 + {6F58F7B2-7B7A-3C42-9AE1-5666C797BAD7}.RelWithDebInfo|x64.ActiveCfg = RelWithDebInfo|x64 + {6F58F7B2-7B7A-3C42-9AE1-5666C797BAD7}.RelWithDebInfo|x64.Build.0 = RelWithDebInfo|x64 + EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + SolutionGuid = {190BFFB6-5D24-387A-9C3A-1B32CFDF8EE9} + EndGlobalSection + GlobalSection(ExtensibilityAddIns) = postSolution + EndGlobalSection +EndGlobal diff --git a/guidoar-dev/readme.txt b/guidoar-dev/readme.txt new file mode 100644 index 000000000..c4f656293 --- /dev/null +++ b/guidoar-dev/readme.txt @@ -0,0 +1,61 @@ +---------------------------------------------------------------------- + + GuidoAr library + + A library providing a simple memory representation and a consistent + way to browse and transform Guido Music Notation scores. + It provides also a set of score level manipulation operations + (like putting scores in sequence, in parallel, stretching etc.). + + Copyright 2009-2016 (c) Grame + +---------------------------------------------------------------------- + +====================================================================== +1) Compiling the GuidoAR library +---------------------------------------------------------------------- +GuidoAR relies on CMake, a cross-platform, open-source build +system ( see http://www.cmake.org/). +The build folder contains the project description and is used to generate +native projects. + +You should run 'make' from the 'build' folder. +Your target platform is inferred from the Makefile. + +OPTIONS +To embed Midi file export in the library, you should call 'make' with MIDIEXPORT='yes | no' +as argument. + +Note about MIDI export: +------------------------------- + MIDI export requires libmidisharelight. For MacOS and Windows, the library is embedded + in binary form in the src/midisharelight folder. Thus there is no additional step. + On linux, you must get the library source code, compile and install. + +Supporting MIDI export on linux: +------------------------------- + you must get the midishare source code that includes the midisharelight library: + git://git.code.sf.net/p/midishare/code + You don't need to compile midishare but only the midisharelight library. + midisharelight is a recent addition to the project and for the moment, it is only + available from the 'dev' branch. It is located at the project root folder. + midisharelight is cmake based: + > cd midisharelight/cmake + > cmake -G "Unix Makefiles" + > make + > sudo make install + +Note for Windows platforms: +------------------------------- + MSYS is recommended to get a unix like shell and commands (like make) + see at http://www.mingw.org/wiki/msys + You should use Visual Studio to compile. If you have Visual Studio 12 2013 or + Visual Studio 10 installed, the makefile should detect your version and compile correctly. + To use another version, you'll have to override the MSVC and WIN32VS vairables. + See the corresponding section in the Makefile. + +====================================================================== +In case of trouble, contact me: +---------------------------------------------------------------------- +Copyright 2009-2016 (c) Grame +====================================================================== diff --git a/guidoar-dev/rsrc/libguidoar.rc b/guidoar-dev/rsrc/libguidoar.rc new file mode 100644 index 000000000..32ced9e8b --- /dev/null +++ b/guidoar-dev/rsrc/libguidoar.rc @@ -0,0 +1,101 @@ +// Microsoft Visual C++ generated resource script. +// +#include "resource.h" + +#define APSTUDIO_READONLY_SYMBOLS +///////////////////////////////////////////////////////////////////////////// +// +// Generated from the TEXTINCLUDE 2 resource. +// +#include "windows.h" + +///////////////////////////////////////////////////////////////////////////// +#undef APSTUDIO_READONLY_SYMBOLS + +///////////////////////////////////////////////////////////////////////////// +// Français (France) resources + +#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_FRA) +#ifdef _WIN32 +LANGUAGE LANG_FRENCH, SUBLANG_FRENCH +#pragma code_page(1252) +#endif //_WIN32 + +#ifdef APSTUDIO_INVOKED +///////////////////////////////////////////////////////////////////////////// +// +// TEXTINCLUDE +// + +1 TEXTINCLUDE +BEGIN + "resource.h\0" +END + +2 TEXTINCLUDE +BEGIN + "#include ""afxres.h""\r\n" + "\0" +END + +3 TEXTINCLUDE +BEGIN + "\r\n" + "\0" +END + +#endif // APSTUDIO_INVOKED + + +///////////////////////////////////////////////////////////////////////////// +// +// Version +// + +VS_VERSION_INFO VERSIONINFO + FILEVERSION 1,0,0,0 + PRODUCTVERSION 1,0,0,0 + FILEFLAGSMASK 0x17L +#ifdef _DEBUG + FILEFLAGS 0x1L +#else + FILEFLAGS 0x0L +#endif + FILEOS 0x4L + FILETYPE 0x2L + FILESUBTYPE 0x0L +BEGIN + BLOCK "StringFileInfo" + BEGIN + BLOCK "040c04b0" + BEGIN + VALUE "FileDescription", "Bibliothèque de liens dynamiques libguidoar" + VALUE "FileVersion", "1, 0, 0, 0" + VALUE "InternalName", "libguidoar" + VALUE "LegalCopyright", "Copyright (C) Grame 2009-2016" + VALUE "OriginalFilename", "libguidoar.dll" + VALUE "ProductName", " Bibliothèque de liens dynamiques libguidoar" + VALUE "ProductVersion", "1, 0, 0, 0" + END + END + BLOCK "VarFileInfo" + BEGIN + VALUE "Translation", 0x40c, 1200 + END +END + +#endif // Français (France) resources +///////////////////////////////////////////////////////////////////////////// + + + +#ifndef APSTUDIO_INVOKED +///////////////////////////////////////////////////////////////////////////// +// +// Generated from the TEXTINCLUDE 3 resource. +// + + +///////////////////////////////////////////////////////////////////////////// +#endif // not APSTUDIO_INVOKED + diff --git a/guidoar-dev/rsrc/resource.h b/guidoar-dev/rsrc/resource.h new file mode 100644 index 000000000..51c08bae8 --- /dev/null +++ b/guidoar-dev/rsrc/resource.h @@ -0,0 +1,14 @@ +//{{NO_DEPENDENCIES}} +// Microsoft Visual C++ generated include file. +// Used by libguidoar.rc + +// Valeurs par défaut suivantes des nouveaux objets +// +#ifdef APSTUDIO_INVOKED +#ifndef APSTUDIO_READONLY_SYMBOLS +#define _APS_NEXT_RESOURCE_VALUE 101 +#define _APS_NEXT_COMMAND_VALUE 40001 +#define _APS_NEXT_CONTROL_VALUE 1001 +#define _APS_NEXT_SYMED_VALUE 101 +#endif +#endif diff --git a/guidoar-dev/samples/bluerondo/ba.gmn b/guidoar-dev/samples/bluerondo/ba.gmn new file mode 100644 index 000000000..36e4cdf03 --- /dev/null +++ b/guidoar-dev/samples/bluerondo/ba.gmn @@ -0,0 +1,5 @@ +[ + \clef<"f"> \meter<"9/8"> + {\accent(\stacc(e)), f0} {\accent(\stacc(e&1)), f0} {\accent(\stacc(d1)), f0} {\ten(c#1), f0} + _/8 +] diff --git a/guidoar-dev/samples/bluerondo/bba.gmn b/guidoar-dev/samples/bluerondo/bba.gmn new file mode 100644 index 000000000..5e497b140 --- /dev/null +++ b/guidoar-dev/samples/bluerondo/bba.gmn @@ -0,0 +1,6 @@ +[ + \clef<"f"> + {\accent(\stacc(c1)), f0} {\accent(\stacc(c#1)), f0} + {\accent(\stacc(d1)), f0} {\ten(e&1), f0} + _/8 +] diff --git a/guidoar-dev/samples/bluerondo/bbb.gmn b/guidoar-dev/samples/bluerondo/bbb.gmn new file mode 100644 index 000000000..96738b50e --- /dev/null +++ b/guidoar-dev/samples/bluerondo/bbb.gmn @@ -0,0 +1,6 @@ +[ + \clef<"f"> + {\accent(c1), f0} _/8 + {\accent(c#1/4), f0} _/8 + {\accent(d1/4), f0} _/8 +] diff --git a/guidoar-dev/samples/bluerondo/bluerondo b/guidoar-dev/samples/bluerondo/bluerondo new file mode 100644 index 000000000..0d6f76504 --- /dev/null +++ b/guidoar-dev/samples/bluerondo/bluerondo @@ -0,0 +1,9 @@ +#!/bin/sh +# + +cat sa1.gmn | guidoseq header.gmn - - - \ + | guidoseq - sb1.gmn - sb2.gmn - sb1.gmn sb3.gmn \ + | guidopar - "$(cat ba.gmn | guidoseq - bba.gmn - bbb.gmn)" > __tmp$$ + +cat __tmp$$ | guidoseq - - "$(guidotranspose __tmp$$ [c2])" - +rm -f __tmp$$ diff --git a/guidoar-dev/samples/bluerondo/bluerondo.gmn b/guidoar-dev/samples/bluerondo/bluerondo.gmn new file mode 100644 index 000000000..cb58ce308 --- /dev/null +++ b/guidoar-dev/samples/bluerondo/bluerondo.gmn @@ -0,0 +1,68 @@ +{ + [ + \title<"Blue Rondo A La Turk"> \meter<"9/8"> \tempo<"Lively [3/8] = 126","3/8=126"> + \barFormat \sl( \beam( \accent( a1*1/8 ) \stacc( f ) ) ) \sl + ( \beam( \accent( a1*1/8 ) \stacc( f ) ) ) \sl( \beam( \accent( a1*1/8 ) \stacc( f + ) ) ) \slur( \b( \accent( e1*1/8 ) f \stacc( g ) ) ) \sl( \beam( \accent( a1*1/8 + ) \stacc( f ) ) ) \sl( \beam( \accent( a1*1/8 ) \stacc( f ) ) ) \sl( \beam( \accent + ( a1*1/8 ) \stacc( f ) ) ) \slur( \b( \accent( b&1*1/8 ) a \stacc( g ) ) ) \sl( \beam + ( \accent( a1*1/8 ) \stacc( f ) ) ) \sl( \beam( \accent( a1*1/8 ) \stacc( f ) ) ) + \sl( \beam( \accent( a1*1/8 ) \stacc( f ) ) ) \slur( \b( \accent( e1*1/8 ) f \stacc + ( g ) ) ) \slur( \b( \accent( f1*1/8 ) g \stacc( a ) ) ) \slur( \b( \accent( g/8 ) a + \stacc( b& ) ) ) \slur( \b( \accent( a/8 ) b& \stacc( c2 ) ) ) \sl( \beam( \accent + ( a1*1/8 ) \stacc( f ) ) ) \sl( \beam( \accent( a1*1/8 ) \stacc( f ) ) ) \sl( \beam + ( \accent( a1*1/8 ) \stacc( f ) ) ) \slur( \b( \accent( e1*1/8 ) f \stacc( g ) ) ) + \sl( \beam( \accent( a1*1/8 ) \stacc( f ) ) ) \sl( \beam( \accent( a1*1/8 ) \stacc + ( f ) ) ) \sl( \beam( \accent( a1*1/8 ) \stacc( f ) ) ) \slur( \b( \accent( b&1*1/8 + ) a \stacc( g ) ) ) \sl( \beam( \accent( a1*1/8 ) \stacc( f ) ) ) \sl( \beam( \accent + ( a1*1/8 ) \stacc( f ) ) ) \sl( \beam( \accent( a1*1/8 ) \stacc( f ) ) ) \slur( \b + ( \accent( e1*1/8 ) f \stacc( g ) ) ) \slur( \b( \accent( f1*1/8 ) g \stacc( a ) ) + ) \slur( \b( \accent( g/8 ) a \stacc( b& ) ) ) \slur( \b( \accent( a/8 ) b& \stacc + ( c2 ) ) ) \sl( \beam( \accent( c2*1/8 ) \stacc( a&1 ) ) ) \sl( \beam( \accent( c2*1/8 + ) \stacc( a&1 ) ) ) \sl( \beam( \accent( c2*1/8 ) \stacc( a&1 ) ) ) \slur( \b( \accent + ( g1*1/8 ) a& \stacc( b& ) ) ) \sl( \beam( \accent( c2*1/8 ) \stacc( a&1 ) ) ) \sl + ( \beam( \accent( c2*1/8 ) \stacc( a&1 ) ) ) \sl( \beam( \accent( c2*1/8 ) \stacc + ( a&1 ) ) ) \slur( \b( \accent( d&2*1/8 ) c \stacc( b&1 ) ) ) \sl( \beam( \accent + ( c2*1/8 ) \stacc( a&1 ) ) ) \sl( \beam( \accent( c2*1/8 ) \stacc( a&1 ) ) ) \sl + ( \beam( \accent( c2*1/8 ) \stacc( a&1 ) ) ) \slur( \b( \accent( g1*1/8 ) a& \stacc + ( b& ) ) ) \slur( \b( \accent( a&1*1/8 ) b& \stacc( c2 ) ) ) \slur( \b( \accent( b&1*1/8 + ) c2 \stacc( d& ) ) ) \slur( \b( \accent( c/8 ) d& \stacc( e&2 ) ) ) \sl( \beam( \accent + ( a1*1/8 ) \stacc( f ) ) ) \sl( \beam( \accent( a1*1/8 ) \stacc( f ) ) ) \sl( \beam + ( \accent( a1*1/8 ) \stacc( f ) ) ) \slur( \b( \accent( e1*1/8 ) f \stacc( g ) ) ) + \sl( \beam( \accent( a1*1/8 ) \stacc( f ) ) ) \sl( \beam( \accent( a1*1/8 ) \stacc + ( f ) ) ) \sl( \beam( \accent( a1*1/8 ) \stacc( f ) ) ) \slur( \b( \accent( b&1*1/8 + ) a \stacc( g ) ) ) \sl( \beam( \accent( a1*1/8 ) \stacc( f ) ) ) \sl( \beam( \accent + ( a1*1/8 ) \stacc( f ) ) ) \sl( \beam( \accent( a1*1/8 ) \stacc( f ) ) ) \slur( \b + ( \accent( e1*1/8 ) f \stacc( g ) ) ) \slur( \b( \accent( f1*1/8 ) g \stacc( a ) ) + ) \slur( \b( \accent( g/8 ) a \stacc( b& ) ) ) \slur( \b( \accent( a/8 ) b& \stacc + ( c2 ) ) ) + ], + + [ + \clef<"f"> \meter<"9/8"> { \accent( \stacc( e ) ) , f0 } { \accent( \stacc + ( e&1 ) ) , f0 } { \accent( \stacc( d1 ) ) , f0 } { \ten( c#1 ) , f0 } _/8 { \accent + ( \stacc( c1*1/4 ) ) , f0 } { \accent( \stacc( c#1 ) ) , f0 } { \accent( \stacc + ( d1 ) ) , f0 } { \ten( e&1 ) , f0 } _/8 { \accent( \stacc( e1*1/4 ) ) , f0 } + { \accent( \stacc( e&1 ) ) , f0 } { \accent( \stacc( d1 ) ) , f0 } { \ten( c#1 + ) , f0 } _/8 { \accent( c1*1/4 ) , f0 } _/8 { \accent( c#1*1/4 ) , f0 } _/8 + { \accent( d1*1/4 ) , f0 } _/8 { \accent( \stacc( e1*1/4 ) ) , f0 } { \accent + ( \stacc( e&1 ) ) , f0 } { \accent( \stacc( d1 ) ) , f0 } { \ten( c#1 ) , f0 } + _/8 { \accent( \stacc( c1*1/4 ) ) , f0 } { \accent( \stacc( c#1 ) ) , f0 } { \accent + ( \stacc( d1 ) ) , f0 } { \ten( e&1 ) , f0 } _/8 { \accent( \stacc( e1*1/4 ) ) + , f0 } { \accent( \stacc( e&1 ) ) , f0 } { \accent( \stacc( d1 ) ) , f0 } { \ten + ( c#1 ) , f0 } _/8 { \accent( c1*1/4 ) , f0 } _/8 { \accent( c#1*1/4 ) , f0 } + _/8 { \accent( d1*1/4 ) , f0 } _/8 { \accent( \stacc( g1*1/4 ) ) , a&0 } { \accent + ( \stacc( g&1 ) ) , a&0 } { \accent( \stacc( f1 ) ) , a&0 } { \ten( e1 ) , a&0 + } _/8 { \accent( \stacc( e&1*1/4 ) ) , a&0 } { \accent( \stacc( e1 ) ) , a&0 + } { \accent( \stacc( f1 ) ) , a&0 } { \ten( g&1 ) , a&0 } _/8 { \accent( \stacc + ( g1*1/4 ) ) , a&0 } { \accent( \stacc( g&1 ) ) , a&0 } { \accent( \stacc( f1 + ) ) , a&0 } { \ten( e1 ) , a&0 } _/8 { \accent( e&1*1/4 ) , a&0 } _/8 { \accent + ( e1*1/4 ) , a&0 } _/8 { \accent( f1*1/4 ) , a&0 } _/8 { \accent( \stacc( e1*1/4 + ) ) , f0 } { \accent( \stacc( e&1 ) ) , f0 } { \accent( \stacc( d1 ) ) , f0 + } { \ten( c#1 ) , f0 } _/8 { \accent( \stacc( c1*1/4 ) ) , f0 } { \accent( \stacc + ( c#1 ) ) , f0 } { \accent( \stacc( d1 ) ) , f0 } { \ten( e&1 ) , f0 } _/8 { \accent + ( \stacc( e1*1/4 ) ) , f0 } { \accent( \stacc( e&1 ) ) , f0 } { \accent( \stacc + ( d1 ) ) , f0 } { \ten( c#1 ) , f0 } _/8 { \accent( c1*1/4 ) , f0 } _/8 { \accent + ( c#1*1/4 ) , f0 } _/8 { \accent( d1*1/4 ) , f0 } _/8 + ] +} diff --git a/guidoar-dev/samples/bluerondo/header.gmn b/guidoar-dev/samples/bluerondo/header.gmn new file mode 100644 index 000000000..445dd65b6 --- /dev/null +++ b/guidoar-dev/samples/bluerondo/header.gmn @@ -0,0 +1,4 @@ +[ + \title<"Blue Rondo A La Turk"> + \meter<"9/8"> \tempo<"Lively [3/8] = 126","3/8=126"> \barFormat +] diff --git a/guidoar-dev/samples/bluerondo/makefile b/guidoar-dev/samples/bluerondo/makefile new file mode 100644 index 000000000..9052f46c8 --- /dev/null +++ b/guidoar-dev/samples/bluerondo/makefile @@ -0,0 +1,18 @@ + +target := bluerondo +out := $(target).gmn $(target).mid $(target).pdf + +all: $(out) + +$(target).gmn : + sh bluerondo > $(target).gmn + + +$(target).mid : $(target).gmn + guido2midi $(target).gmn $(target).mid + +$(target).pdf : $(target).gmn + guido2image -f $(target).gmn -t pdf + +clean: + rm -f $(out) diff --git a/guidoar-dev/samples/bluerondo/sa1.gmn b/guidoar-dev/samples/bluerondo/sa1.gmn new file mode 100644 index 000000000..2b9c30595 --- /dev/null +++ b/guidoar-dev/samples/bluerondo/sa1.gmn @@ -0,0 +1,3 @@ +[ + \sl( \beam( \accent(a/8) \stacc(f))) +] diff --git a/guidoar-dev/samples/bluerondo/sb1.gmn b/guidoar-dev/samples/bluerondo/sb1.gmn new file mode 100644 index 000000000..ec614e1e6 --- /dev/null +++ b/guidoar-dev/samples/bluerondo/sb1.gmn @@ -0,0 +1,3 @@ +[ + \slur( \b(\accent(e/8) f \stacc(g))) +] diff --git a/guidoar-dev/samples/bluerondo/sb2.gmn b/guidoar-dev/samples/bluerondo/sb2.gmn new file mode 100644 index 000000000..7cce8b0d1 --- /dev/null +++ b/guidoar-dev/samples/bluerondo/sb2.gmn @@ -0,0 +1,3 @@ +[ + \slur( \b(\accent(b&/8) a \stacc(g))) +] diff --git a/guidoar-dev/samples/bluerondo/sb3.gmn b/guidoar-dev/samples/bluerondo/sb3.gmn new file mode 100644 index 000000000..407254bb3 --- /dev/null +++ b/guidoar-dev/samples/bluerondo/sb3.gmn @@ -0,0 +1,5 @@ +[ + \slur( \b(\accent(f/8) g \stacc(a))) + \slur( \b(\accent(g/8) a \stacc(b&))) + \slur( \b(\accent(a/8) b& \stacc(c2))) +] diff --git a/guidoar-dev/samples/layout/base.gmn b/guidoar-dev/samples/layout/base.gmn new file mode 100644 index 000000000..ae1b1f971 --- /dev/null +++ b/guidoar-dev/samples/layout/base.gmn @@ -0,0 +1,6 @@ +{ + [ c d e f g a h c2 ], + [ c2 b1 a g f e d c ], + [ c d e f g a h c2 ], + [ c2 b1 a g f e d c ] +} diff --git a/guidoar-dev/samples/layout/format1.gmn b/guidoar-dev/samples/layout/format1.gmn new file mode 100644 index 000000000..560263b86 --- /dev/null +++ b/guidoar-dev/samples/layout/format1.gmn @@ -0,0 +1,7 @@ +{ + [ \staffFormat ], + [ \staffFormat ], + [ \staffFormat \clef<"none"> ], + [ \staffFormat ] +} + diff --git a/guidoar-dev/samples/layout/format2.gmn b/guidoar-dev/samples/layout/format2.gmn new file mode 100644 index 000000000..f91012ac9 --- /dev/null +++ b/guidoar-dev/samples/layout/format2.gmn @@ -0,0 +1,11 @@ +{ + [ \systemFormat + \instr<"Voice.",dx=-2cm, dy=-0.8cm> \staffFormat \barFormat + \clef<"c2", dx=1hs> \space<10hs>\meter<"4/4"> \noteFormat ], + + [ \instr<"Perc.",dx=-2cm> \staffFormat \clef<"none"> \meter<"4/4">], + + [ \instr<"Luth",transp="G",dx=-2cm,dy=-0.6cm> \staffFormat \meter<"4/4">], + + [ \instr<"clarinet in A",transp="A",dx=-2cm,dy=-0.6cm> \staffFormat \meter<"4/4">] +} diff --git a/guidoar-dev/samples/layout/layout1.gmn b/guidoar-dev/samples/layout/layout1.gmn new file mode 100644 index 000000000..f858cfce0 --- /dev/null +++ b/guidoar-dev/samples/layout/layout1.gmn @@ -0,0 +1,9 @@ +{ + [\staffFormat c1 d e f g a h c2 ], + + [\staffFormat c2 b1 a g f e d c ], + + [\staffFormat \clef<"none"> c1 d e f g a h c2 ], + + [\staffFormat c2 b1 a g f e d c ] +} diff --git a/guidoar-dev/samples/layout/layout2.gmn b/guidoar-dev/samples/layout/layout2.gmn new file mode 100644 index 000000000..1d79cb794 --- /dev/null +++ b/guidoar-dev/samples/layout/layout2.gmn @@ -0,0 +1,22 @@ +{ + [ + \systemFormat \instr<"Voice.",dx=-2cm,dy=-0.8cm> \staffFormat + \barFormat \clef<"c2",dx=1hs> \space<10hs> \meter<"4/4"> + \noteFormat c1 d e f g a h c2 + ], + + [ + \instr<"Perc.",dx=-2cm> \staffFormat \clef<"none"> + \meter<"4/4"> c2 b1 a g f e d c + ], + + [ + \instr<"Luth",transp="G",dx=-2cm,dy=-0.6cm> \staffFormat + \meter<"4/4"> c1 d e f g a h c2 + ], + + [ + \instr<"clarinet in A",transp="A",dx=-2cm,dy=-0.6cm> \staffFormat + \meter<"4/4"> c2 b1 a g f e d c + ] +} diff --git a/guidoar-dev/samples/layout/makefile b/guidoar-dev/samples/layout/makefile new file mode 100644 index 000000000..425179c9a --- /dev/null +++ b/guidoar-dev/samples/layout/makefile @@ -0,0 +1,13 @@ + +target := layout1.gmn layout2.gmn + +all: $(target) + +layout1.gmn : base.gmn format1.gmn + guidoseq format1.gmn base.gmn > layout1.gmn + +layout2.gmn : base.gmn format2.gmn + guidoseq format2.gmn base.gmn > layout2.gmn + +clean: + rm -f $(target) diff --git a/guidoar-dev/samples/repeats/makefile b/guidoar-dev/samples/repeats/makefile new file mode 100644 index 000000000..82e6dc8cc --- /dev/null +++ b/guidoar-dev/samples/repeats/makefile @@ -0,0 +1,16 @@ + +target := repeathead.gmn repeattail.gmn repeatwhole.gmn + +all: $(target) + +repeathead.gmn : repeats.gmn wholex2.gmn + guidohead repeats.gmn wholex2.gmn > repeathead.gmn + +repeattail.gmn : repeats.gmn wholex2.gmn + guidotail repeats.gmn wholex2.gmn > repeattail.gmn + +repeatwhole.gmn : repeathead.gmn repeattail.gmn + guidoseq repeathead.gmn repeattail.gmn > repeatwhole.gmn + +clean: + rm -f $(target) diff --git a/guidoar-dev/samples/repeats/repeathead.gmn b/guidoar-dev/samples/repeats/repeathead.gmn new file mode 100644 index 000000000..8daf9b2fa --- /dev/null +++ b/guidoar-dev/samples/repeats/repeathead.gmn @@ -0,0 +1,7 @@ +{ + [ + \meter<"4/4"> f g a b + \repeatBegin c2 b1 a g + \repeatEnd + ] +} diff --git a/guidoar-dev/samples/repeats/repeats.gmn b/guidoar-dev/samples/repeats/repeats.gmn new file mode 100644 index 000000000..61471345e --- /dev/null +++ b/guidoar-dev/samples/repeats/repeats.gmn @@ -0,0 +1,3 @@ +[\meter<"4/4"> f g a b +\repeatBegin c2 b1 a g f ga b\repeatEnd + c2 b1 a g] \ No newline at end of file diff --git a/guidoar-dev/samples/repeats/repeattail.gmn b/guidoar-dev/samples/repeats/repeattail.gmn new file mode 100644 index 000000000..c88b87a62 --- /dev/null +++ b/guidoar-dev/samples/repeats/repeattail.gmn @@ -0,0 +1,7 @@ +{ + [ + \meter<"4/4"> + \repeatBegin f1*1/4 g a b + \repeatEnd c2 b1 a g + ] +} diff --git a/guidoar-dev/samples/repeats/repeatwhole.gmn b/guidoar-dev/samples/repeats/repeatwhole.gmn new file mode 100644 index 000000000..18db01732 --- /dev/null +++ b/guidoar-dev/samples/repeats/repeatwhole.gmn @@ -0,0 +1,7 @@ +{ + [ + \meter<"4/4"> f g a b + \repeatBegin c2 b1 a g f1*1/4 g a b + \repeatEnd c2 b1 a g + ] +} diff --git a/guidoar-dev/samples/repeats/wholex2.gmn b/guidoar-dev/samples/repeats/wholex2.gmn new file mode 100644 index 000000000..49951956f --- /dev/null +++ b/guidoar-dev/samples/repeats/wholex2.gmn @@ -0,0 +1 @@ +[\tie(c/1 c/1)] \ No newline at end of file diff --git a/guidoar-dev/samples/slurs/makefile b/guidoar-dev/samples/slurs/makefile new file mode 100644 index 000000000..ed7fbcc9d --- /dev/null +++ b/guidoar-dev/samples/slurs/makefile @@ -0,0 +1,19 @@ + +target := slurhead.gmn slurtail.gmn slurwhole.gmn slur1-2.gmn + +all: $(target) + +slurhead.gmn : slur.gmn whole.gmn + guidohead slur.gmn whole.gmn > slurhead.gmn + +slurtail.gmn : slur.gmn whole.gmn + guidotail slur.gmn whole.gmn > slurtail.gmn + +slurwhole.gmn : slurhead.gmn slurtail.gmn + guidoseq slurhead.gmn slurtail.gmn > slurwhole.gmn + +slur1-2.gmn : slur1.gmn slur2.gmn + guidoseq slur1.gmn slur2.gmn > slur1-2.gmn + +clean: + rm -f $(target) diff --git a/guidoar-dev/samples/slurs/slur.gmn b/guidoar-dev/samples/slurs/slur.gmn new file mode 100644 index 000000000..a7f1c4a6b --- /dev/null +++ b/guidoar-dev/samples/slurs/slur.gmn @@ -0,0 +1 @@ +[\meter<"4/4"> \slur( c2 b1 a g f ga b)] \ No newline at end of file diff --git a/guidoar-dev/samples/slurs/slur1-2.gmn b/guidoar-dev/samples/slurs/slur1-2.gmn new file mode 100644 index 000000000..495114335 --- /dev/null +++ b/guidoar-dev/samples/slurs/slur1-2.gmn @@ -0,0 +1,3 @@ +{ + [\meter<"4/4"> \slur( c2 b1 a g ) \slur( f1 g a b ) ] +} diff --git a/guidoar-dev/samples/slurs/slur1.gmn b/guidoar-dev/samples/slurs/slur1.gmn new file mode 100644 index 000000000..fc5100f8a --- /dev/null +++ b/guidoar-dev/samples/slurs/slur1.gmn @@ -0,0 +1 @@ +[\meter<"4/4"> \slur( c2 b1 a g )] \ No newline at end of file diff --git a/guidoar-dev/samples/slurs/slur2.gmn b/guidoar-dev/samples/slurs/slur2.gmn new file mode 100644 index 000000000..68326eb07 --- /dev/null +++ b/guidoar-dev/samples/slurs/slur2.gmn @@ -0,0 +1 @@ +[\meter<"4/4"> \slur( f ga b)] \ No newline at end of file diff --git a/guidoar-dev/samples/slurs/slurhead.gmn b/guidoar-dev/samples/slurs/slurhead.gmn new file mode 100644 index 000000000..808506b24 --- /dev/null +++ b/guidoar-dev/samples/slurs/slurhead.gmn @@ -0,0 +1,3 @@ +{ + [\meter<"4/4"> \slur( c2 b1 a g ) ] +} diff --git a/guidoar-dev/samples/slurs/slurtail.gmn b/guidoar-dev/samples/slurs/slurtail.gmn new file mode 100644 index 000000000..1b25aee66 --- /dev/null +++ b/guidoar-dev/samples/slurs/slurtail.gmn @@ -0,0 +1,3 @@ +{ + [\meter<"4/4"> \slur( f1*1/4 g a b ) ] +} diff --git a/guidoar-dev/samples/slurs/slurwhole.gmn b/guidoar-dev/samples/slurs/slurwhole.gmn new file mode 100644 index 000000000..7c81f877a --- /dev/null +++ b/guidoar-dev/samples/slurs/slurwhole.gmn @@ -0,0 +1,3 @@ +{ + [\meter<"4/4"> \slur( c2 b1 a g f1*1/4 g a b ) ] +} diff --git a/guidoar-dev/samples/slurs/whole.gmn b/guidoar-dev/samples/slurs/whole.gmn new file mode 100644 index 000000000..58a9bfa6d --- /dev/null +++ b/guidoar-dev/samples/slurs/whole.gmn @@ -0,0 +1 @@ +[c/1] \ No newline at end of file diff --git a/guidoar-dev/samples/ties/makefile b/guidoar-dev/samples/ties/makefile new file mode 100644 index 000000000..307230f39 --- /dev/null +++ b/guidoar-dev/samples/ties/makefile @@ -0,0 +1,16 @@ + +target := wholehead.gmn wholetail.gmn wholewhole.gmn + +all: $(target) + +wholehead.gmn : wholex4.gmn whole.gmn + guidohead wholex4.gmn whole.gmn > wholehead.gmn + +wholetail.gmn : wholex4.gmn whole.gmn + guidotail wholex4.gmn whole.gmn > wholetail.gmn + +wholewhole.gmn : wholehead.gmn wholetail.gmn + guidoseq wholehead.gmn wholetail.gmn > wholewhole.gmn + +clean: + rm -f $(target) diff --git a/guidoar-dev/samples/ties/whole.gmn b/guidoar-dev/samples/ties/whole.gmn new file mode 100644 index 000000000..58a9bfa6d --- /dev/null +++ b/guidoar-dev/samples/ties/whole.gmn @@ -0,0 +1 @@ +[c/1] \ No newline at end of file diff --git a/guidoar-dev/samples/ties/wholehead.gmn b/guidoar-dev/samples/ties/wholehead.gmn new file mode 100644 index 000000000..a2d75c3ef --- /dev/null +++ b/guidoar-dev/samples/ties/wholehead.gmn @@ -0,0 +1,3 @@ +{ + [\meter<"4/4"> \tie( \tie( c1*1/1 ) ) ] +} diff --git a/guidoar-dev/samples/ties/wholetail.gmn b/guidoar-dev/samples/ties/wholetail.gmn new file mode 100644 index 000000000..4e558d6f4 --- /dev/null +++ b/guidoar-dev/samples/ties/wholetail.gmn @@ -0,0 +1,3 @@ +{ + [\meter<"4/4"> \tie( \tie( c1*3/1 ) ) ] +} diff --git a/guidoar-dev/samples/ties/wholewhole.gmn b/guidoar-dev/samples/ties/wholewhole.gmn new file mode 100644 index 000000000..02e6201e9 --- /dev/null +++ b/guidoar-dev/samples/ties/wholewhole.gmn @@ -0,0 +1,3 @@ +{ + [\meter<"4/4"> \tie( c1*4/1 ) \tie ] +} diff --git a/guidoar-dev/samples/ties/wholex4.gmn b/guidoar-dev/samples/ties/wholex4.gmn new file mode 100644 index 000000000..99d482ea6 --- /dev/null +++ b/guidoar-dev/samples/ties/wholex4.gmn @@ -0,0 +1 @@ +[\meter<"4/4">\tie(c*4/1)] \ No newline at end of file diff --git a/guidoar-dev/src/guido/abstract/ARChord.cpp b/guidoar-dev/src/guido/abstract/ARChord.cpp new file mode 100644 index 000000000..6f4d2b56f --- /dev/null +++ b/guidoar-dev/src/guido/abstract/ARChord.cpp @@ -0,0 +1,217 @@ +/* + GUIDO Library + Copyright (C) 2006 Grame + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + + Grame Research Laboratory, 9 rue du Garet, 69001 Lyon - France + research@grame.fr + +*/ + +#include + +#include "ARChord.h" +#include "ARNote.h" +#include "ARTypes.h" +#include "functor.h" +#include "tree_browser.h" +#include "visitor.h" + +using namespace std; + +namespace guido +{ + +//______________________________________________________________________________ +// a class chord duration transformation +//______________________________________________________________________________ +class chorddurationchange : public visitor +{ + public: + chorddurationchange() : fBrowser(this) {} + virtual ~chorddurationchange() {} + + virtual void operator ()(const ARChord* chord, const rational& d) { + fDuration = d; + fBrowser.browse (*(guidoelement*)chord); + } + + protected: + rational fDuration; + tree_browser fBrowser; +}; + +class chordequal : public chorddurationchange { protected: inline void visitStart ( SARNote& elt ) { *elt = fDuration; } }; +class chordplusequal : public chorddurationchange { protected: inline void visitStart ( SARNote& elt ) { *elt += fDuration; } }; +class chordminusequal : public chorddurationchange { protected: inline void visitStart ( SARNote& elt ) { *elt -= fDuration; } }; +class chordmultequal : public chorddurationchange { protected: inline void visitStart ( SARNote& elt ) { *elt *= fDuration; } }; +class chorddivequal : public chorddurationchange { protected: inline void visitStart ( SARNote& elt ) { *elt /= fDuration; } }; + + +//______________________________________________________________________________ +// a class to collect notes midi pitches +//______________________________________________________________________________ +class chordpitchvisitor : public visitor +{ + vector fPitchlist; + int fCurrentOctave; + public: + chordpitchvisitor() : fBrowser(this) {} + virtual ~chordpitchvisitor() {} + + void pitches (const ARChord* chord, int& currentoctave, vector& pitches); + + protected: + virtual void visitStart( SARNote& elt ) { fPitchlist.push_back (elt->midiPitch(fCurrentOctave)); } + tree_browser fBrowser; +}; + +void chordpitchvisitor::pitches (const ARChord* chord, int& currentoctave, vector& pitches) +{ + fCurrentOctave = currentoctave; + fPitchlist.clear(); + fBrowser.browse (*(guidoelement*)chord); + sort(fPitchlist.begin(), fPitchlist.end()); + pitches = fPitchlist; + currentoctave = fCurrentOctave; +} + +//______________________________________________________________________________ +// a class to collect a chord notes durations +//______________________________________________________________________________ +class chorddurationvisitor : public visitor +{ + public: + chorddurationvisitor() : fBrowser(this) {} + virtual ~chorddurationvisitor() {} + + void durations (const ARChord* chord, rationals& dlist); + + protected: + virtual void visitStart( SARNote& elt ) { fDurations.push_back (elt->duration()); } + + rationals fDurations; + tree_browser fBrowser; +}; + +//______________________________________________________________________________ +// a class to collect a chord notes total durations in a given context +//______________________________________________________________________________ +class chordtotaldurationvisitor : public chorddurationvisitor +{ + rational fCurrentDuration; + int fCurrentDots; + public: + chordtotaldurationvisitor(rational currentduration, int currentdots) + : fCurrentDuration(currentduration), fCurrentDots(currentdots) {} + virtual ~chordtotaldurationvisitor() {} + + protected: + virtual void visitStart( SARNote& elt ) { fDurations.push_back (elt->totalduration(fCurrentDuration, fCurrentDots)); } +}; + +//______________________________________________________________________________ +void chorddurationvisitor::durations (const ARChord* chord, rationals& dlist) +{ + fDurations.clear(); + fBrowser.browse (*(guidoelement*)chord); + dlist = fDurations; +} + + +//______________________________________________________________________________ +// +// ARChord +//______________________________________________________________________________ +void ARChord::duration (rationals& dur) const { + chorddurationvisitor v; + v.durations (this, dur); +} + +void ARChord::duration (rationals& dur, rational currdur, int curdots) const { + chordtotaldurationvisitor v (currdur, curdots); + v.durations (this, dur); +} + +//______________________________________________________________________________ +void ARChord::acceptIn(basevisitor& v) { + if (visitor >* p = dynamic_cast >*>(&v)) { + SMARTP sptr = this; + p->visitStart(sptr); + } + else guidoelement::acceptIn(v); +} + +//______________________________________________________________________________ +void ARChord::acceptOut(basevisitor& v) { + if (visitor >* p = dynamic_cast >*>(&v)) { + SMARTP sptr = this; + p->visitEnd(sptr); + } + else guidoelement::acceptOut(v); +} + +//______________________________________________________________________________ +SMARTP ARChord::create() + { ARChord* o = new ARChord; assert(o!=0); return o; } + + +//______________________________________________________________________________ +void ARChord::midiPitch(int& currentoctave, vector& pitches) const +{ + chordpitchvisitor cp; + cp.pitches (this, currentoctave, pitches); +} + +//______________________________________________________________________________ +rational ARChord::totalduration(rational current, int currentdots) const +{ + rationals dlist; + duration (dlist, current, currentdots); + rational maxd (0,1); + for (unsigned int i=0; i maxd) maxd = dlist[i]; + } + return maxd; +} + +//______________________________________________________________________________ +rational ARChord::duration() const +{ + rationals dlist; + duration (dlist); + rational maxd (0,1); + bool implicit = false; + for (unsigned int i=0; i maxd) maxd = dlist[i]; + } + if (implicit) { + if (maxd.getNumerator() > 0) // some notes have explicit duration + maxd.setNumerator (-maxd.getNumerator()); // indicated using a negative value + else // all notes have implicit durations + maxd.setNumerator (0); // indicated using a null value + } + return maxd; +} + +ARChord& ARChord::operator = (const rational& d) { chordequal dc; dc(this, d); return *this; } +ARChord& ARChord::operator += (const rational& d) { chordplusequal dc; dc(this, d); return *this; } +ARChord& ARChord::operator -= (const rational& d) { chordminusequal dc; dc(this, d); return *this; } +ARChord& ARChord::operator *= (const rational& d) { chordmultequal dc; dc(this, d); return *this; } +ARChord& ARChord::operator /= (const rational& d) { chorddivequal dc; dc(this, d); return *this; } + +} // namespace diff --git a/guidoar-dev/src/guido/abstract/ARChord.h b/guidoar-dev/src/guido/abstract/ARChord.h new file mode 100644 index 000000000..27e70f634 --- /dev/null +++ b/guidoar-dev/src/guido/abstract/ARChord.h @@ -0,0 +1,83 @@ +/* + GUIDO Library + Copyright (C) 2006 Grame + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + + Grame Research Laboratory, 9 rue du Garet, 69001 Lyon - France + research@grame.fr + +*/ + +#ifndef __ARChord__ +#define __ARChord__ + +#include + +#include "arexport.h" +#include "guidoelement.h" +#include "guidorational.h" + +namespace guido +{ + +/*! +\addtogroup abstract +@{ +*/ + +class basevisitor; +//______________________________________________________________________________ +/*! +\brief A Guido chord +*/ +class gar_export ARChord : public guidoelement +{ + public: + static SMARTP create(); + virtual void acceptIn(basevisitor& v); + virtual void acceptOut(basevisitor& v); + // gives the list of notes durations + virtual void duration(rationals&) const; + // gives the list of notes total durations in the given context + virtual void duration(rationals&, rational current, int currentdots) const; + // gives the list of the chord midi pitch in ascending ordered + virtual void midiPitch(int& currentoctave, std::vector& pitches) const; + + /// a chord duration is the max of its notes durations + /// it returns 0 when all notes have implicit duration + /// or -max if one of the notes has an implicit duration + rational duration() const; + /// gives the chord duration within the given context + rational totalduration(rational current, int currentdots) const; + + ARChord& operator = (const rational& d); ///< force all notes duration to d + ARChord& operator += (const rational& d); ///< add d to all notes duration + ARChord& operator -= (const rational& d); ///< substract d from all notes duration + ARChord& operator *= (const rational& d); ///< multiplies all notes duration by d + ARChord& operator /= (const rational& d); ///< divides all notes duration by d + + bool implicitDuration(const rational& d) { return d.getNumerator() <= 0; } + + protected: + ARChord() {} + virtual ~ARChord() {} +}; + +/*! @} */ + +} // namespace + +#endif diff --git a/guidoar-dev/src/guido/abstract/ARFactory.cpp b/guidoar-dev/src/guido/abstract/ARFactory.cpp new file mode 100644 index 000000000..450e3d897 --- /dev/null +++ b/guidoar-dev/src/guido/abstract/ARFactory.cpp @@ -0,0 +1,246 @@ +/* + GUIDO Library + Copyright (C) 2006 Grame + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + + Grame Research Laboratory, 9 rue du Garet, 69001 Lyon - France + research@grame.fr + +*/ + +#ifdef WIN32 +# pragma warning (disable : 4786) +#endif + +#include + +#include "guidotags.h" +#include "ARFactory.h" +#include "ARChord.h" +#include "ARNote.h" +#include "AROthers.h" +#include "ARTag.h" + +using namespace std; + +namespace guido +{ + +//______________________________________________________________________________ +template +class newTagFunctor : public functor { + public: + Sguidotag operator ()(long id) { return ARTag::create(id); } +}; + +//______________________________________________________________________________ +SARMusic ARFactory::createMusic() const +{ + SARMusic elt = ARMusic::create(); + if (elt) elt->setName("music"); + return elt; +} + +//______________________________________________________________________________ +SARVoice ARFactory::createVoice() const +{ + SARVoice elt = ARVoice::create(); + if (elt) elt->setName("voice"); + return elt; +} + +//______________________________________________________________________________ +SARChord ARFactory::createChord() const +{ + SARChord elt = ARChord::create(); + if (elt) elt->setName("chord"); + return elt; +} + +//______________________________________________________________________________ +SARNote ARFactory::createNote(const std::string& name) const +{ + SARNote elt = ARNote::create(); + if (elt) elt->setName(name); + return elt; +} + +//______________________________________________________________________________ +Sguidotag ARFactory::createTag(const string& eltname, long id) const +{ + map::const_iterator i = fMap.find( eltname ); + if (i != fMap.end()) { + NewTagFunctor* f= i->second; + if (f) { + Sguidotag elt = (*f)(id); + elt->setName(eltname); + return elt; + } + } + cerr << "Sguidoelement factory::create called with unknown element \"" << eltname << "\"" << endl; + return 0; +} + +//______________________________________________________________________________ +ARFactory::ARFactory() +{ + fMap["acc"] = new newTagFunctor; + fMap["accel"] = new newTagFunctor; + fMap["accelBegin"] = new newTagFunctor; + fMap["accelEnd"] = new newTagFunctor; + fMap["accent"] = new newTagFunctor; + fMap["accol"] = new newTagFunctor; + fMap["alter"] = new newTagFunctor; + fMap["auto"] = new newTagFunctor; + fMap["autoBreak"] = new newTagFunctor; + fMap["bar"] = new newTagFunctor; + fMap["barFormat"] = new newTagFunctor; + fMap["beam"] = new newTagFunctor; + fMap["bm"] = fMap["beam"]; + fMap["b"] = fMap["beam"]; + fMap["beamBegin"] = new newTagFunctor; + fMap["beamEnd"] = new newTagFunctor; + fMap["beamsAuto"] = new newTagFunctor; + fMap["beamsOff"] = new newTagFunctor; + fMap["bembel"] = new newTagFunctor; + fMap["breathMark"] = new newTagFunctor; + fMap["clef"] = new newTagFunctor; + fMap["coda"] = new newTagFunctor; + fMap["color"] = new newTagFunctor; + fMap["colour"] = fMap["color"]; + fMap["composer"] = new newTagFunctor; + fMap["cresc"] = new newTagFunctor; + fMap["crescBegin"] = new newTagFunctor; + fMap["crescEnd"] = new newTagFunctor; + fMap["cue"] = new newTagFunctor; + fMap["daCapo"] = new newTagFunctor; + fMap["daCapoAlFine"] = new newTagFunctor; + fMap["daCoda"] = new newTagFunctor; + fMap["dalSegno"] = new newTagFunctor; + fMap["dalSegnoAlFine"] = new newTagFunctor; + fMap["decresc"] = new newTagFunctor; + fMap["defineTag"] = new newTagFunctor; + fMap["dim"] = new newTagFunctor; + fMap["dimBegin"] = new newTagFunctor; + fMap["dimEnd"] = new newTagFunctor; + fMap["diminuendo"] = new newTagFunctor; + fMap["dispDur"] = new newTagFunctor; + fMap["dotFormat"] = new newTagFunctor; + fMap["doubleBar"] = new newTagFunctor; + fMap["endBar"] = new newTagFunctor; + fMap["fermata"] = new newTagFunctor; + fMap["fine"] = new newTagFunctor; + fMap["fingering"] = new newTagFunctor; + fMap["grace"] = new newTagFunctor; + fMap["headsCenter"] = new newTagFunctor; + fMap["headsLeft"] = new newTagFunctor; + fMap["headsNormal"] = new newTagFunctor; + fMap["headsReverse"]= new newTagFunctor; + fMap["headsRight"] = new newTagFunctor; + fMap["instr"] = new newTagFunctor; + fMap["intens"] = new newTagFunctor; + fMap["i"] = fMap["intens"]; + fMap["key"] = new newTagFunctor; + fMap["label"] = new newTagFunctor; + fMap["lyrics"] = new newTagFunctor; + fMap["marcato"] = new newTagFunctor; + fMap["mark"] = new newTagFunctor; + fMap["merge"] = new newTagFunctor; + fMap["meter"] = new newTagFunctor; + fMap["mord"] = new newTagFunctor; + fMap["newLine"] = new newTagFunctor; + fMap["newPage"] = new newTagFunctor; + fMap["newSystem"] = new newTagFunctor; + fMap["noteFormat"] = new newTagFunctor; + fMap["oct"] = new newTagFunctor; + fMap["pageFormat"] = new newTagFunctor; + fMap["port"] = new newTagFunctor; + fMap["repeatBegin"] = new newTagFunctor; + fMap["repeatEnd"] = new newTagFunctor; + fMap["restFormat"] = new newTagFunctor; + fMap["rit"] = new newTagFunctor; + fMap["ritBegin"] = new newTagFunctor; + fMap["ritEnd"] = new newTagFunctor; + fMap["segno"] = new newTagFunctor; + fMap["set"] = fMap["auto"]; + fMap["shareLocation"] = new newTagFunctor; + fMap["slur"] = new newTagFunctor; + fMap["sl"] = fMap["slur"]; + fMap["slurBegin"] = new newTagFunctor; + fMap["slurEnd"] = new newTagFunctor; + fMap["space"] = new newTagFunctor; + fMap["special"] = new newTagFunctor; + fMap["splitChord"] = new newTagFunctor; + fMap["chord"] = fMap["splitChord"]; + fMap["stacc"] = new newTagFunctor; + fMap["staccBegin"] = new newTagFunctor; + fMap["staccEnd"] = new newTagFunctor; + fMap["staff"] = new newTagFunctor; + fMap["staffFormat"] = new newTagFunctor; + fMap["staffOff"] = new newTagFunctor; + fMap["staffOn"] = new newTagFunctor; + fMap["stemsAuto"] = new newTagFunctor; + fMap["stemsDown"] = new newTagFunctor; + fMap["stemsOff"] = new newTagFunctor; + fMap["stemsUp"] = new newTagFunctor; + fMap["systemFormat"]= new newTagFunctor; + fMap["tempo"] = new newTagFunctor; + fMap["ten"] = new newTagFunctor; + fMap["text"] = new newTagFunctor; + fMap["t"] = fMap["text"]; + fMap["tie"] = new newTagFunctor; + fMap["tieBegin"] = new newTagFunctor; + fMap["tieEnd"] = new newTagFunctor; + fMap["title"] = new newTagFunctor; + fMap["trem"] = new newTagFunctor; + fMap["trill"] = new newTagFunctor; + fMap["tuplet"] = new newTagFunctor; + fMap["turn"] = new newTagFunctor; + fMap["units"] = new newTagFunctor; + fMap["volta"] = new newTagFunctor; + fMap["voltaBegin"] = new newTagFunctor; + fMap["voltaEnd"] = new newTagFunctor; + fMap["DrHoos"] = new newTagFunctor; + fMap["DrRenz"] = new newTagFunctor; + fMap["backward"] = new newTagFunctor; + // new tags Guido v.1.38 + fMap["harmonic"] = new newTagFunctor; + fMap["pizz"] = new newTagFunctor; +} + +//______________________________________________________________________________ +// WARNING ! +// the functors map contains aliases that must be set to 0 before deallocation +// +ARFactory::~ARFactory() +{ + fMap["bm"] = 0; + fMap["b"] = 0; + fMap["colour"] = 0; + fMap["i"] = 0; + fMap["set"] = 0; + fMap["sl"] = 0; + fMap["chord"] = 0; + fMap["t"] = 0; + TFunctors::iterator i = fMap.begin(); + while (i != fMap.end()) { + delete i->second; + i++; + } +} + + +} // namespace diff --git a/guidoar-dev/src/guido/abstract/ARFactory.h b/guidoar-dev/src/guido/abstract/ARFactory.h new file mode 100644 index 000000000..98b0f0a8e --- /dev/null +++ b/guidoar-dev/src/guido/abstract/ARFactory.h @@ -0,0 +1,69 @@ +/* + GUIDO Library + Copyright (C) 2006 Grame + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + + Grame Research Laboratory, 9 rue du Garet, 69001 Lyon - France + research@grame.fr + +*/ + +#ifndef __ARFactory__ +#define __ARFactory__ + +#include +#include +#include "arexport.h" +#include "functor.h" +#include "singleton.h" +#include "ARTypes.h" + + +/*! +\addtogroup abstract +@{ +*/ + +namespace guido +{ + +typedef functor NewTagFunctor; + + +//______________________________________________________________________________ +/*! +\brief A factory for creating GAR objects +*/ +class gar_export ARFactory : public singleton{ + + typedef std::map TFunctors; + TFunctors fMap; + public: + ARFactory(); + virtual ~ARFactory(); + + Sguidotag createTag(const std::string& elt, long id=0) const; + SARMusic createMusic() const; + SARVoice createVoice() const; + SARChord createChord() const; + SARNote createNote(const std::string& name) const; +}; + +} // namespace + +/*! @} */ + +#endif diff --git a/guidoar-dev/src/guido/abstract/ARNote.cpp b/guidoar-dev/src/guido/abstract/ARNote.cpp new file mode 100644 index 000000000..4c5719731 --- /dev/null +++ b/guidoar-dev/src/guido/abstract/ARNote.cpp @@ -0,0 +1,354 @@ +/* + GUIDO Library + Copyright (C) 2006 Grame + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + + Grame Research Laboratory, 9 rue du Garet, 69001 Lyon - France + research@grame.fr + +*/ + +#ifdef WIN32 +#pragma warning (disable : 4786) +#endif + +#include +#include +#include "ARNote.h" +#include "visitor.h" + +using namespace std; + +namespace guido +{ + +std::map > ARNote::fNormalizeMap; + +//______________________________________________________________________________ +ARNote::ARNote() + : fOctave(kUndefinedOctave), fAccidental(0), + fDots(0), fDuration(kUndefinedDuration,4) + +{ + if (!fNormalizeMap.size()) { + fNormalizeMap["c"] = make_pair('c', 0); + fNormalizeMap["d"] = make_pair('d', 0); + fNormalizeMap["e"] = make_pair('e', 0); + fNormalizeMap["f"] = make_pair('f', 0); + fNormalizeMap["g"] = make_pair('g', 0); + fNormalizeMap["a"] = make_pair('a', 0); + fNormalizeMap["b"] = make_pair('b', 0); + fNormalizeMap["h"] = make_pair('b', 0); + + fNormalizeMap["do"] = make_pair('c', 0); + fNormalizeMap["re"] = make_pair('d', 0); + fNormalizeMap["mi"] = make_pair('e', 0); + fNormalizeMap["fa"] = make_pair('f', 0); + fNormalizeMap["sol"] = make_pair('g', 0); + fNormalizeMap["la"] = make_pair('a', 0); + fNormalizeMap["si"] = make_pair('b', 0); + fNormalizeMap["ti"] = make_pair('b', 0); + + fNormalizeMap["cis"] = make_pair('c', 1); + fNormalizeMap["dis"] = make_pair('d', 1); + fNormalizeMap["fis"] = make_pair('f', 1); + fNormalizeMap["gis"] = make_pair('g', 1); + fNormalizeMap["ais"] = make_pair('a', 1); + } +} + +//______________________________________________________________________________ +char ARNote::NormalizedPitchName (const string& name, int* alter) +{ + pair >::const_iterator, map >::const_iterator> + erp = fNormalizeMap.equal_range( name ); + char outname = 0; + if (erp.first != erp.second) { + outname = (*erp.first).second.first; + if (alter) *alter = (*erp.first).second.second; + } + return outname; +} + +//______________________________________________________________________________ +char ARNote::NormalizedPitchName (int* alter) const +{ + return NormalizedPitchName( getName(), alter ); +} + +//______________________________________________________________________________ +char ARNote::NormalizedPitch2Name (pitch p) +{ + if (p >= A) return 'a' + p - A; + else if (p >= C) return 'c' + p - C; + return 0; +} + +//______________________________________________________________________________ +ARNote::pitch ARNote::OffsetPitch (pitch p, int offset, int& octave, int& alter, int targetInterval) +{ + octave += offset / 12; + offset %= 12; + int n = p; + while (offset > 0) { + if (n == E) { n++; offset--; } + else if (n == B) { n = C; octave++; offset--; } + else if (offset > 1) { n++; offset -= 2; } + else if (offset == 1) { alter++; offset--; } + } + while (offset < 0) { + if (n == C) { n = B; offset--; octave++; } + else if (n == F) { n--; octave--; offset++; } + else if (offset < -1) { n--; offset += 2; } + else if (offset == -1) { alter--; offset++; } + } + offset = n - p - targetInterval; + if (offset > 0) { + if (n == B) { n=C; octave++; alter--; } + else if (n == E) { n++; alter--; } + else { n++; alter-=2; } + } + else if (offset < 0) { + if (n == C) { n=B; octave--; alter++; } + else if (n == F) { n--; alter++; } + else { n--; alter+=2; } + } + return pitch(n); +} + +//______________________________________________________________________________ +ARNote::pitch ARNote::NormalizedName2Pitch (char note) +{ + switch (note) { + case 'a': return A; + case 'b': return B; + case 'c': return C; + case 'd': return D; + case 'e': return E; + case 'f': return F; + case 'g': return G; + } + return kNoPitch; +} + +//______________________________________________________________________________ +ARNote::pitch ARNote::enharmonic (pitch p, int& octave, int& alter) +{ + if (alter > 0) { + p = incPitch (p, octave, alter); + alter--; + } + else if (alter < 0) { + p = decPitch (p, octave, alter); + alter++; + } + return p; +} + +//______________________________________________________________________________ +ARNote::pitch ARNote::incPitch (pitch p, int& octave, int& alter) +{ + alter++; + if (alter >= 2) { + alter -= 2; + switch (p) { + case C: p = D; break; + case D: p = E; break; + case F: p = G; break; + case G: p = A; break; + case A: p = B; break; + case E: + p = F; + alter++; + break; + case B: + p = C; + alter++; + octave++; + break; + default: + ; + } + } + return p; +} + +//______________________________________________________________________________ +ARNote::pitch ARNote::decPitch (pitch p, int& octave, int& alter) +{ + alter--; + if (alter <= -2) { + alter += 2; + switch (p) { + case D: p = C; break; + case E: p = D; break; + case G: p = F; break; + case A: p = G; break; + case B: p = A; break; + case F: + p = E; + alter--; + break; + case C: + p = B; + alter--; + octave--; + break; + default: + ; + } + } + return p; +} + +//______________________________________________________________________________ +ARNote::pitch ARNote::chromaticOffsetPitch (pitch p, int interval, int& octave, int& alter, bool preferSharp) +{ + if (interval > 0) { + while (interval) { + p = incPitch (p, octave, alter); + interval--; + } + } + else if (interval < 0) { + while (interval) { + p = decPitch (p, octave, alter); + interval++; + } + } + if (preferSharp) { + if (alter < 0) p = enharmonic (p, octave, alter); + } + else if (alter > 0) + p = enharmonic (p, octave, alter); + return p; +} + +//______________________________________________________________________________ +int ARNote::midiPitch (int& currentOctave) const +{ + int alter=0, midi = -1; + pitch notepitch = GetPitch (alter); + + int octave = fOctave == kUndefinedOctave ? currentOctave : fOctave; + currentOctave = octave; + if (notepitch != ARNote::kNoPitch) { + // offset in octave numeration between guido and midi is 4 + int midioctave = (octave + 4) * 12; + midi = midioctave + (notepitch*2) + alter; + if (notepitch > ARNote::E) midi--; + } + return midi; +} + +//______________________________________________________________________________ +ARNote::pitch ARNote::GetPitch (int& alter) const +{ + char npitch = NormalizedPitchName (&alter); + alter += GetAccidental(); + return NormalizedName2Pitch(npitch); +} + +//______________________________________________________________________________ +rational ARNote::totalduration(rational& current, int& currentdots) const +{ + rational dur = duration(); // determine the note duration + if (dur == getImplicitDuration()) + dur = current; // when implicit, uses the current duration + else { + current = dur; // else update the current duration + currentdots = 0; // and reset the current dots count + } + + int dots = GetDots(); // determine the dots count + if (dots) + currentdots = dots; + else + dots = currentdots; // when no dots, uses the current dots information + + int den = 1; + rational mult = rational(0,1); + while (dots--) + mult += rational(1, den *= 2); + dur += dur * mult; + dur.rationalise(); + return dur; +} + +//______________________________________________________________________________ +ARNote& ARNote::operator = (const rational& d) { fDuration = d; fDuration.rationalise(); return *this; } +ARNote& ARNote::operator += (const rational& d) { fDuration += d; fDuration.rationalise(); return *this; } +ARNote& ARNote::operator *= (const rational& d) { fDuration *= d; fDuration.rationalise(); return *this; } +ARNote& ARNote::operator /= (const rational& d) { fDuration /= d; fDuration.rationalise(); return *this; } +ARNote& ARNote::operator -= (const rational& d) { fDuration -= d; fDuration.rationalise(); return *this; } + +//______________________________________________________________________________ +void ARNote::acceptIn(basevisitor& v) { + if (visitor >* p = dynamic_cast >*>(&v)) { + SMARTP sptr = this; + p->visitStart(sptr); + } + else guidoelement::acceptIn(v); +} + +//______________________________________________________________________________ +void ARNote::acceptOut(basevisitor& v) { + if (visitor >* p = dynamic_cast >*>(&v)) { + SMARTP sptr = this; + p->visitEnd(sptr); + } + else guidoelement::acceptOut(v); +} + +//______________________________________________________________________________ +ARNote::operator string() const { + ostringstream str; + + bool octOut = false; + str << getName(); + if ((getName() != "_") && (getName() != "empty")) { + int n = GetAccidental(); + if (n) { + char c = (n > 0) ? '#' : '&'; + n = abs(n); + while (n--) str << c; + } + + n = GetOctave(); + if ( n != ARNote::kUndefinedOctave) { + str << n; + octOut = true; + } + } + + long n = fDuration.getNumerator(); + if (n != kUndefinedDuration) { + if ((n != 1) || octOut) str << '*' << n; + n = fDuration.getDenominator(); + if (n > 0) str << '/' << n; + } + + n = GetDots(); + while (n--) str << '.'; + + return str.str(); +} + +//______________________________________________________________________________ +SMARTP ARNote::create() + { ARNote* o = new ARNote(); assert(o!=0); return o; } + +} diff --git a/guidoar-dev/src/guido/abstract/ARNote.h b/guidoar-dev/src/guido/abstract/ARNote.h new file mode 100644 index 000000000..f517341f0 --- /dev/null +++ b/guidoar-dev/src/guido/abstract/ARNote.h @@ -0,0 +1,126 @@ +/* + GUIDO Library + Copyright (C) 2006 Grame + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + + Grame Research Laboratory, 9 rue du Garet, 69001 Lyon - France + research@grame.fr + +*/ + +#ifndef __ARNote__ +#define __ARNote__ + +#include +#include + +#include "guidoelement.h" +#include "guidorational.h" +#include "arexport.h" + +namespace guido +{ + +/*! +\addtogroup abstract +@{ +*/ + +class basevisitor; +//______________________________________________________________________________ +/*! +\brief A Guido note description +*/ +class gar_export ARNote : public guidoelement +{ + protected: + ARNote(); + virtual ~ARNote() {} + + int fOctave, fAccidental, fDots; + rational fDuration; + + static std::map > fNormalizeMap; + + public: + enum { kUndefinedOctave = -999, kUndefinedDuration = -999999, kDefaultOctave=1 }; + enum pitch { kNoPitch = -1, C, D, E, F, G, A, B }; + + static SMARTP create(); + virtual void acceptIn (basevisitor& v); + virtual void acceptOut (basevisitor& v); + + void SetOctave (int oct) { fOctave = oct; } + void SetAccidental (int acc) { fAccidental= acc; } + void SetDots (int dots) { fDots = dots; } + + //! normalizes pitch names to 'a b c d...' notation, alter is to catch 'cis, dis...' notation + char NormalizedPitchName (int* alter = 0) const; + + int GetOctave () const { return fOctave; } + int GetAccidental () const { return fAccidental; } + int GetDots () const { return fDots; } + bool isRest () const { return getName() == "_"; } + bool isEmpty () const { return getName() == "empty"; } + bool isPitched () const { return !isRest() && !isEmpty(); } + + pitch GetPitch (int& alter) const; + int midiPitch (int& currentOctave) const; + + // duration operations + const rational& duration() const { return fDuration; } + rational totalduration(rational& current, int& currentdots) const; + ARNote& operator = (const rational&); + ARNote& operator += (const rational&); + ARNote& operator -= (const rational&); + ARNote& operator *= (const rational&); + ARNote& operator /= (const rational&); + bool implicitDuration() const { return fDuration == getImplicitDuration(); } + bool implicitOctave() const { return fOctave == getImplicitOctave(); } + void setImplicitDuration() { fDuration.set(kUndefinedDuration,4); } + + static rational getImplicitDuration() { return rational(kUndefinedDuration,4); } + static bool implicitDuration(const rational& d) { return d.getNumerator() == kUndefinedDuration; } + static rational getDefaultDuration() { return rational(1,4); } + static int getDefaultOctave() { return 1; } + static int getImplicitOctave() { return kUndefinedOctave; } + static bool implicitOctave(int o) { return o == kUndefinedOctave; } + + /// offsets a pitch according diatonic steps and a chromatic target interval + static pitch OffsetPitch (pitch p, int offset, int& octave, int& alter, int targetinterval); + /// converts a note name to a pitch + static pitch NormalizedName2Pitch (char note); + /// converts a pitch to a normalized note name + static char NormalizedPitch2Name (pitch p); + /// converts a note name to a normalized note name i.e. 'a b c d...' notation, outalter is to catch 'cis, dis...' notation + static char NormalizedPitchName (const std::string& name, int* outalter=0); + static pitch chromaticOffsetPitch (pitch p, int interval, int& octave, int& alter, bool preferSharp); + + /// converts a pitch to the enharmonic pitch + static pitch enharmonic (pitch p, int& octave, int& alter); + /// a semi tone pitch increment (updates octave and alter) + static pitch incPitch (pitch p, int& octave, int& alter); + /// a semi tone pitch decrement (updates octave and alter) + static pitch decPitch (pitch p, int& octave, int& alter); + + operator std::string () const; +}; + +} + +/*! @} */ + +#endif diff --git a/guidoar-dev/src/guido/abstract/AROthers.cpp b/guidoar-dev/src/guido/abstract/AROthers.cpp new file mode 100644 index 000000000..32caba71c --- /dev/null +++ b/guidoar-dev/src/guido/abstract/AROthers.cpp @@ -0,0 +1,83 @@ +/* + GUIDO Library + Copyright (C) 2006 Grame + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + + Grame Research Laboratory, 9 rue du Garet, 69001 Lyon - France + research@grame.fr + +*/ + +#include "AROthers.h" +#include "visitor.h" + +using namespace std; + +namespace guido +{ + +//______________________________________________________________________________ +// +// ARMusic +//______________________________________________________________________________ +void ARMusic::acceptIn(basevisitor& v) { + if (visitor >* p = dynamic_cast >*>(&v)) { + SMARTP sptr = this; + p->visitStart(sptr); + } + else guidoelement::acceptIn(v); +} + +//______________________________________________________________________________ +void ARMusic::acceptOut(basevisitor& v) { + if (visitor >* p = dynamic_cast >*>(&v)) { + SMARTP sptr = this; + p->visitEnd(sptr); + } + else guidoelement::acceptOut(v); +} + +//______________________________________________________________________________ +SMARTP ARMusic::create() + { ARMusic* o = new ARMusic; assert(o!=0); return o; } + + +//______________________________________________________________________________ +// +// ARVoice +//______________________________________________________________________________ +void ARVoice::acceptIn(basevisitor& v) { + if (visitor >* p = dynamic_cast >*>(&v)) { + SMARTP sptr = this; + p->visitStart(sptr); + } + else guidoelement::acceptIn(v); +} + +//______________________________________________________________________________ +void ARVoice::acceptOut(basevisitor& v) { + if (visitor >* p = dynamic_cast >*>(&v)) { + SMARTP sptr = this; + p->visitEnd(sptr); + } + else guidoelement::acceptOut(v); +} + +//______________________________________________________________________________ +SMARTP ARVoice::create() + { ARVoice* o = new ARVoice; assert(o!=0); return o; } + +} // namespace diff --git a/guidoar-dev/src/guido/abstract/AROthers.h b/guidoar-dev/src/guido/abstract/AROthers.h new file mode 100644 index 000000000..512210875 --- /dev/null +++ b/guidoar-dev/src/guido/abstract/AROthers.h @@ -0,0 +1,75 @@ +/* + GUIDO Library + Copyright (C) 2006 Grame + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + + Grame Research Laboratory, 9 rue du Garet, 69001 Lyon - France + research@grame.fr + +*/ + +#ifndef __AROthers__ +#define __AROthers__ + +#include "arexport.h" +#include "guidoelement.h" + +namespace guido +{ + +/*! +\addtogroup abstract +@{ +*/ + +class basevisitor; +//______________________________________________________________________________ +/*! +\brief The root element of a Guido tree +*/ +class gar_export ARMusic : public guidoelement +{ + public: + static SMARTP create(); + virtual void acceptIn(basevisitor& v); + virtual void acceptOut(basevisitor& v); + + protected: + ARMusic() {} + virtual ~ARMusic() {} +}; + +//______________________________________________________________________________ +/*! +\brief A Guido voice +*/ +class gar_export ARVoice : public guidoelement +{ + public: + static SMARTP create(); + virtual void acceptIn(basevisitor& v); + virtual void acceptOut(basevisitor& v); + + protected: + ARVoice() {} + virtual ~ARVoice() {} +}; + +/*! @} */ + +} // namespace + +#endif diff --git a/guidoar-dev/src/guido/abstract/ARTag.cpp b/guidoar-dev/src/guido/abstract/ARTag.cpp new file mode 100644 index 000000000..e26fe47cb --- /dev/null +++ b/guidoar-dev/src/guido/abstract/ARTag.cpp @@ -0,0 +1,137 @@ +/* + GUIDO Library + Copyright (C) 2006 Grame + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + + Grame Research Laboratory, 9 rue du Garet, 69001 Lyon - France + research@grame.fr + +*/ + +#include +#include "ARTag.h" + +using namespace std; + +namespace guido +{ + +//______________________________________________________________________________ +bool guidotag::beginTag() const { + return getName().find("Begin", 0) != string::npos; +} + +//______________________________________________________________________________ +bool guidotag::endTag() const { + return getName().find("End", 0) != string::npos; +} + +//______________________________________________________________________________ +string guidotag::matchTag () const { + string name = getName(); + size_t n = name.find("Begin", 0); + if (n != string::npos) { + name.replace (n, name.length(), "End"); + return name; + } + else { + n = name.find("End", 0); + if (n != string::npos) { + name.replace (n, name.length(), "Begin"); + return name; + } + } + return ""; +} + +//______________________________________________________________________________ +bool guidotag::matchTag (const Sguidotag& tag) const { + return matchTag() == tag->getName(); +} + +//______________________________________________________________________________ +bool guidotag::operator ==(const Sguidotag& elt) const { + return (guidoelement::operator == (elt)) && (getID() == elt->getID()); +} + +//______________________________________________________________________________ +void guidotag::acceptIn(basevisitor& v) { + if (visitor >* p = dynamic_cast >*>(&v)) { + SMARTP sptr = this; + p->visitStart(sptr); + } + else guidoelement::acceptIn(v); +} + +//______________________________________________________________________________ +void guidotag::acceptOut(basevisitor& v) { + if (visitor >* p = dynamic_cast >*>(&v)) { + SMARTP sptr = this; + p->visitEnd(sptr); + } + else guidoelement::acceptOut(v); +} + +//______________________________________________________________________________ +string guidotag::escape(const std::string& val) const +{ + string esc; + size_t n = val.size(); + for (int i=0; igetName().size(); + if (n) str << (*attr)->getName() << "="; + + const string quote = (*attr)->quoteVal() ? "\"" : ""; + string value = escape((*attr)->getValue()); + + str << quote << value << quote; + + n = (*attr)->getUnit().size(); + if (n) str << (*attr)->getUnit(); + + attr++; + if (attr != attributes().end()) + str << ','; + } + str << '>'; + } + return str.str(); +} + +} // namespace + diff --git a/guidoar-dev/src/guido/abstract/ARTag.h b/guidoar-dev/src/guido/abstract/ARTag.h new file mode 100644 index 000000000..8f784016f --- /dev/null +++ b/guidoar-dev/src/guido/abstract/ARTag.h @@ -0,0 +1,122 @@ +/* + GUIDO Library + Copyright (C) 2006 Grame + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + + Grame Research Laboratory, 9 rue du Garet, 69001 Lyon - France + research@grame.fr + +*/ + +#ifndef __ARTag__ +#define __ARTag__ + +#include +#include + +#include "arexport.h" +#include "guidoelement.h" +#include "visitor.h" + +namespace guido +{ + +/*! +\addtogroup abstract + +The Guido Abstract Representation (GAR) is close to the +gmn files. It supports logical layout thru GAR to GAR transformations. +The GAR is organised as a Tree composed of the following elements: +- ARMusic : the root element of the music description +- ARVoice : a sequence of Guido elements +- ARChord : a guido chord representation +- ARNote : a guido note representation +- ARTag : a set of types build over guidotag to handle all of the guido tags. +@{ +*/ + + +//______________________________________________________________________________ +/*! +\brief A type for guido tags. +*/ +class guidotag; +typedef SMARTP Sguidotag; +class gar_export guidotag : public guidoelement +{ + public: + virtual void acceptIn(basevisitor& v); + virtual void acceptOut(basevisitor& v); + + int getType() const { return fType; } /// return the tag type ie the tag template integer + long getID() const { return fID; } /// return the tag id i.e. the xx of the \\tag:xx form + void setID(long id) { fID = id; } + operator std::string () const; + + bool beginTag () const; /// return true when the tag is in the form xxxBegin (tieBegin, slurBegin etc...) + bool endTag () const; /// return true when the tag is in the form xxxEnd (tieEnd, slurEnd etc...) + bool matchTag (const Sguidotag&) const; /// return true if tags are in the form xxxBegin and xxxEnd and xxx matches + std::string matchTag () const; /// return the name of the matching xxxBegin or xxxEnd form if any + + //________________________________________________________________________ + virtual bool operator ==(const Sguidotag& i) const; + virtual bool operator !=(const Sguidotag& i) const { return !(*this == i); } + + protected: + guidotag(long id) : fID(id) {} + virtual ~guidotag() {} + std::string escape(const std::string&) const; + long fID; /// represents the tag id i.e the \\tag:xx form of the tags where xx is a discriminant id + int fType; /// the tag template integer +}; + +//______________________________________________________________________________ +/*! +\brief A template class to type all guido tags with integers + + The class implements the acyclic visitor accept method. +*/ +template class ARTag : public guidotag +{ + public: + static SMARTP > create(long id=0) + { ARTag* o = new ARTag(id); assert(o!=0); o->fType=elt; return o; } + + virtual void acceptIn(basevisitor& v) { + if (visitor > >* p = dynamic_cast > >*>(&v)) { + SMARTP > sptr = this; + p->visitStart(sptr); + } + else guidotag::acceptIn(v); + } + virtual void acceptOut(basevisitor& v) { + if (visitor > >* p = dynamic_cast > >*>(&v)) { + SMARTP > sptr = this; + p->visitEnd(sptr); + } + else guidotag::acceptOut(v); + } + + protected: + ARTag(long id) : guidotag(id) {} + virtual ~ARTag() {} +}; + +/*! @} */ + +} // namespace + +#endif diff --git a/guidoar-dev/src/guido/abstract/ARTypes.h b/guidoar-dev/src/guido/abstract/ARTypes.h new file mode 100644 index 000000000..615c4450f --- /dev/null +++ b/guidoar-dev/src/guido/abstract/ARTypes.h @@ -0,0 +1,165 @@ +/* + GUIDO Library + Copyright (C) 2006 Grame + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + + Grame Research Laboratory, 9 rue du Garet, 69001 Lyon - France + research@grame.fr + +*/ + +#ifndef __ARTypes__ +#define __ARTypes__ + +#include "gar_smartpointer.h" +#include "guidotags.h" + +namespace guido +{ + +class guidoelement; +class guidoattribute; +class guidotag; + +typedef SMARTP Sguidoattribute; +typedef SMARTP Sguidoelement; +typedef SMARTP Sguidotag; + +class ARNote; +class ARMusic; +class ARChord; +class ARVoice; +template class ARTag; + +typedef SMARTP SARNote; +typedef SMARTP SARMusic; +typedef SMARTP SARChord; +typedef SMARTP SARVoice; + +typedef SMARTP > SARAcc; +typedef SMARTP > SARAccel; +typedef SMARTP > SARAccelBegin; +typedef SMARTP > SARAccelEnd; +typedef SMARTP > SARAccent; +typedef SMARTP > SARAccol; +typedef SMARTP > SARAlter; +typedef SMARTP > SARAuto; +typedef SMARTP > SARBar; +typedef SMARTP > SARBarFormat; +typedef SMARTP > SARBeam; +typedef SMARTP > SARBeamBegin; +typedef SMARTP > SARBeamEnd; +typedef SMARTP > SARBeamsAuto; +typedef SMARTP > SARBeamsOff; +typedef SMARTP > SARBembel; +typedef SMARTP > SARBreathMark; +typedef SMARTP > SARClef; +typedef SMARTP > SARCoda; +typedef SMARTP > SARColor; +typedef SMARTP > SARComposer; +typedef SMARTP > SARCresc; +typedef SMARTP > SARCrescBegin; +typedef SMARTP > SARCrescEnd; +typedef SMARTP > SARCue; +typedef SMARTP > SARDaCapo; +typedef SMARTP > SARDaCapoAlFine; +typedef SMARTP > SARDaCoda; +typedef SMARTP > SARDalSegno; +typedef SMARTP > SARDalSegnoAlFine; +typedef SMARTP > SARDecresc; +typedef SMARTP > SARDefineTag; +typedef SMARTP > SARDim; +typedef SMARTP > SARDimBegin; +typedef SMARTP > SARDimEnd; +typedef SMARTP > SARDiminuendo; +typedef SMARTP > SARDispDur; +typedef SMARTP > SARDotFormat; +typedef SMARTP > SARDoubleBar; +typedef SMARTP > SAREndBar; +typedef SMARTP > SARFermata; +typedef SMARTP > SARFine; +typedef SMARTP > SARFingering; +typedef SMARTP > SARGrace; +typedef SMARTP > SARHeadsCenter; +typedef SMARTP > SARHeadsLeft; +typedef SMARTP > SARHeadsNormal; +typedef SMARTP > SARHeadsReverse; +typedef SMARTP > SARHeadsRight; +typedef SMARTP > SARInstr; +typedef SMARTP > SARIntens; +typedef SMARTP > SARKey; +typedef SMARTP > SARLabel; +typedef SMARTP > SARLyrics; +typedef SMARTP > SARMarcato; +typedef SMARTP > SARMark; +typedef SMARTP > SARMerge; +typedef SMARTP > SARMeter; +typedef SMARTP > SARMord; +typedef SMARTP > SARNewLine; +typedef SMARTP > SARNewPage; +typedef SMARTP > SARNewSystem; +typedef SMARTP > SARNoteFormat; +typedef SMARTP > SAROct; +typedef SMARTP > SARPageFormat; +typedef SMARTP > SARPort; +typedef SMARTP > SARRepeatBegin; +typedef SMARTP > SARRepeatEnd; +typedef SMARTP > SARRestFormat; +typedef SMARTP > SARRit; +typedef SMARTP > SARRitBegin; +typedef SMARTP > SARRitEnd; +typedef SMARTP > SARSegno; +typedef SMARTP > SARShareLocation; +typedef SMARTP > SARSlur; +typedef SMARTP > SARSlurBegin; +typedef SMARTP > SARSlurEnd; +typedef SMARTP > SARSpace; +typedef SMARTP > SARSpecial; +typedef SMARTP > SARSplitChord; +typedef SMARTP > SARStacc; +typedef SMARTP > SARStaccBegin; +typedef SMARTP > SARStaccEnd; +typedef SMARTP > SARStaff; +typedef SMARTP > SARStaffFormat; +typedef SMARTP > SARStaffOff; +typedef SMARTP > SARStaffOn; +typedef SMARTP > SARStemsAuto; +typedef SMARTP > SARStemsDown; +typedef SMARTP > SARStemsOff; +typedef SMARTP > SARStemsUp; +typedef SMARTP > SARSystemFormat; +typedef SMARTP > SARTempo; +typedef SMARTP > SARTen; +typedef SMARTP > SARText; +typedef SMARTP > SARTie; +typedef SMARTP > SARTieBegin; +typedef SMARTP > SARTieEnd; +typedef SMARTP > SARTitle; +typedef SMARTP > SARTrem; +typedef SMARTP > SARTrill; +typedef SMARTP > SARTuplet; +typedef SMARTP > SARTurn; +typedef SMARTP > SARUnits; +typedef SMARTP > SARVolta; +typedef SMARTP > SARVoltaBegin; +typedef SMARTP > SARVoltaEnd; +typedef SMARTP > SARDrHoos; +typedef SMARTP > SARDrRenz; +typedef SMARTP > SARBackward; + +} // namespace + +#endif diff --git a/guidoar-dev/src/guido/guidoelement.cpp b/guidoar-dev/src/guido/guidoelement.cpp new file mode 100644 index 000000000..3571507e8 --- /dev/null +++ b/guidoar-dev/src/guido/guidoelement.cpp @@ -0,0 +1,240 @@ +/* + GUIDO Library + Copyright (C) 2006 Grame + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + + Grame Research Laboratory, 9 rue du Garet, 69001 Lyon - France + research@grame.fr + +*/ + +#include +#include + +#include +#include +#include "guidoelement.h" +#include "gmnvisitor.h" +#include "gmnvisitor.h" +#include "tree_browser.h" +#include "visitor.h" + +using namespace std; + +namespace guido +{ + +//______________________________________________________________________________ +// guidoattribute +//______________________________________________________________________________ +void guidoattribute::setName (const string& name) { fName = name; } +void guidoattribute::setUnit (const string& unit) { fUnit = unit; } +void guidoattribute::setValue (const string& value, bool quote) { fValue = value; fQuoteVal=quote; } +void guidoattribute::setQuoteVal (bool quote) { fQuoteVal=quote; } + +//______________________________________________________________________________ +void guidoattribute::setValue (long value) +{ + stringstream s; + s << value; + s >> fValue; +} + +//______________________________________________________________________________ +void guidoattribute::setValue (double value) +{ + stringstream s; + s << value; + s >> fValue; +} + +guidoattribute::operator int () const { return atoi(fValue.c_str()); } +guidoattribute::operator long () const { return atol(fValue.c_str()); } +guidoattribute::operator float () const { return (float)atof(fValue.c_str()); } + +//______________________________________________________________________________ +bool guidoattribute::operator ==(const Sguidoattribute& elt) const { + return elt + && (getName() == elt->getName()) + && (getValue() == elt->getValue()) + && (getUnit() == elt->getUnit()) + && (quoteVal() == elt->quoteVal()); +} + +//______________________________________________________________________________ +// guidoelement +//______________________________________________________________________________ +void guidoelement::setName (const string& name) { fName = name; } + +//______________________________________________________________________________ +Sguidoattribute guidoattribute::create() + { guidoattribute * o = new guidoattribute; assert(o!=0); return o; } +Sguidoelement guidoelement::create() + { guidoelement * o = new guidoelement; assert(o!=0); return o; } + +//______________________________________________________________________________ +// attributes access by name +//______________________________________________________________________________ +const Sguidoattribute guidoelement::getAttribute (const std::string& attrname) const +{ + Sguidoattributes::const_iterator it; + for (it = attributes().begin(); it != attributes().end(); it++) { + if ((*it)->getName() == attrname) + return *it; + } + return 0; +} + +void guidoelement::delAttribute (const std::string& attrname) +{ + Sguidoattributes::iterator it; + for (it = attributes().begin(); it != attributes().end(); it++) { + if ((*it)->getName() == attrname) { + attributes().erase(it); + break; + } + } +} + +const std::string guidoelement::getAttributeValue (const std::string& attrname) const +{ + Sguidoattribute attribute = getAttribute(attrname); + return attribute ? attribute->getValue() : ""; +} + +long guidoelement::getAttributeLongValue (const std::string& attrname, long defaultvalue) const +{ + Sguidoattribute attribute = getAttribute(attrname); + return attribute ? long(*attribute) : defaultvalue; +} + +int guidoelement::getAttributeIntValue (const std::string& attrname, int defaultvalue) const +{ + Sguidoattribute attribute = getAttribute(attrname); + return attribute ? int(*attribute) : defaultvalue; +} + +float guidoelement::getAttributeFloatValue (const std::string& attrname, float defaultvalue) const +{ + Sguidoattribute attribute = getAttribute(attrname); + return attribute ? float(*attribute) : defaultvalue; +} + +//______________________________________________________________________________ +// attributes access by index +//______________________________________________________________________________ +const Sguidoattribute guidoelement::getAttribute (unsigned int index) const +{ + Sguidoattributes attrs = attributes(); + return (index < attrs.size()) ? attrs[index] : 0; +} + +const std::string guidoelement::getAttributeValue (unsigned int index) const +{ + Sguidoattribute attribute = getAttribute(index); + return attribute ? attribute->getValue() : ""; +} + +long guidoelement::getAttributeLongValue (unsigned int index, long defaultvalue) const +{ + Sguidoattribute attribute = getAttribute(index); + return attribute ? long(*attribute) : defaultvalue; +} + +int guidoelement::getAttributeIntValue (unsigned int index, int defaultvalue) const +{ + Sguidoattribute attribute = getAttribute(index); + return attribute ? int(*attribute) : defaultvalue; +} + +float guidoelement::getAttributeFloatValue (unsigned int index, float defaultvalue) const +{ + Sguidoattribute attribute = getAttribute(index); + return attribute ? float(*attribute) : defaultvalue; +} + +//______________________________________________________________________________ +long guidoelement::add (const Sguidoattribute& attr) +{ + long n = fAttributes.size(); + fAttributes.push_back(attr); + return n; +} + +//______________________________________________________________________________ +long guidoelement::add (const Sguidoattributes& attr) +{ + long n = fAttributes.size(); + for (Sguidoattributes::const_iterator i = attr.begin(); i != attr.end(); i++) + fAttributes.push_back(*i); + return n; +} + +//______________________________________________________________________________ +void guidoelement::acceptIn(basevisitor& v) { + if (visitor* p = dynamic_cast*>(&v)) { + Sguidoelement ge = this; + p->visitStart (ge); + } +} + +//______________________________________________________________________________ +void guidoelement::acceptOut(basevisitor& v) { + if (visitor* p = dynamic_cast*>(&v)) { + Sguidoelement ge = this; + p->visitEnd (ge); + } +} + +//______________________________________________________________________________ +bool guidoelement::operator ==(const Sguidoattributes& attlist) const +{ + for (Sguidoattributes::const_iterator i = attributes().begin(); i != attributes().end(); i++) { + // position attributes are ignored for comparison + string name = (*i)->getName(); + if ((name.find ("dx", 0) != 0) && (name.find ("dy", 0) != 0) && (name != "h")) { + Sguidoattribute first = *i; + Sguidoattributes::const_iterator j = attlist.begin(); + for (; j != attlist.end(); j++) { + Sguidoattribute second = *j; + if (*first == second) break; + } + // check if we found any matching attribute + if (j == attlist.end()) return false; + } + } + return true; +} + +//______________________________________________________________________________ +bool guidoelement::operator ==(const Sguidoelement& elt) const { + return elt && (getName() == elt->getName()) && (*this) == elt->attributes(); +} + +//______________________________________________________________________________ +void guidoelement::print(ostream& os) { + gmnvisitor gv(os); + tree_browser browser(&gv); + browser.browse(*this); +} + +//______________________________________________________________________________ +ostream& operator << (ostream& os, const Sguidoelement& elt) { + elt->print(os); + return os; +} + +} // namespace diff --git a/guidoar-dev/src/guido/guidoelement.h b/guidoar-dev/src/guido/guidoelement.h new file mode 100644 index 000000000..8bb5222ae --- /dev/null +++ b/guidoar-dev/src/guido/guidoelement.h @@ -0,0 +1,154 @@ +/* + GUIDO Library + Copyright (C) 2006-2008 Grame + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + + Grame Research Laboratory, 9 rue du Garet, 69001 Lyon - France + research@grame.fr + +*/ + +#ifndef __guidoelement__ +#define __guidoelement__ + +#include +#include + +#include "arexport.h" +#include "visitable.h" +#include "ctree.h" +#include "gar_smartpointer.h" + +namespace guido +{ + +class guidoelement; +class guidoattribute; + +typedef SMARTP Sguidoattribute; +typedef SMARTP Sguidoelement; + +/*! +\brief A generic guido attribute representation. + + An attribute is represented by its name and its value. + Attributes are mainly used with tags. Names are often omitted. +*/ +class gar_export guidoattribute : public smartable { + //! the attribute name + std::string fName; + //! the attribute value + std::string fValue; + //! the optional attribute unit + std::string fUnit; + //! force quotes for string values + bool fQuoteVal; + + protected: + guidoattribute() : fQuoteVal(false) {} + virtual ~guidoattribute() {} + public: + static Sguidoattribute create(); + Sguidoattribute clone() const; + + void setName (const std::string& name); + void setValue (const std::string& value, bool quote=false); + void setUnit (const std::string& unit); + void setValue (long value); + void setValue (double value); + void setQuoteVal (bool); + + const std::string& getName () const { return fName; } + const std::string& getValue () const { return fValue; } + const std::string& getUnit () const { return fUnit; } + bool quoteVal () const { return fQuoteVal; } + + //! returns the attribute value as a int + operator int () const; + //! returns the attribute value as a long + operator long () const; + //! returns the attribute value as a float + operator float () const; + + //________________________________________________________________________ + virtual bool operator ==(const Sguidoattribute& i) const; + virtual bool operator !=(const Sguidoattribute& i) const { return !(*this == i); } +}; + +typedef std::vector Sguidoattributes; +/*! +\brief A generic guido element representation. + + An element is represented by its name and + the lists of its attributes. + Attributes and elements must be added in the required order. +*/ +class gar_export guidoelement : public ctree, public visitable +{ + //! the element name + std::string fName; + //! list of the element attributes + Sguidoattributes fAttributes; + //! list of the element attributes + bool fAuto; + + protected: + guidoelement() : fAuto(false) {} + virtual ~guidoelement() {} + // check if 2 elements have the same attributes + virtual bool operator ==(const Sguidoattributes& attributes) const; + + public: + static Sguidoelement create(); + + virtual void acceptIn(basevisitor& visitor); + virtual void acceptOut(basevisitor& visitor); + virtual void print(std::ostream& os); + + void setName (const std::string& name); + const std::string& getName () const { return fName; } + void setAuto(bool v) { fAuto = v; } + bool getAuto() const { return fAuto; } + + long add (const Sguidoattribute& attr); + long add (const Sguidoattributes& attr); + const Sguidoattributes& attributes() const { return fAttributes; } + Sguidoattributes& attributes() { return fAttributes; } + + void delAttribute (const std::string& attrname); + + const Sguidoattribute getAttribute (const std::string& attrname) const; + const std::string getAttributeValue (const std::string& attrname) const; + long getAttributeLongValue (const std::string& attrname, long defaultvalue) const; + int getAttributeIntValue (const std::string& attrname, int defaultvalue) const; + float getAttributeFloatValue (const std::string& attrname, float defaultvalue) const; + + const Sguidoattribute getAttribute (unsigned int index) const; + const std::string getAttributeValue (unsigned int index) const; + long getAttributeLongValue (unsigned int index, long defaultvalue) const; + int getAttributeIntValue (unsigned int index, int defaultvalue) const; + float getAttributeFloatValue (unsigned int index, float defaultvalue) const; + + //________________________________________________________________________ + virtual bool operator ==(const Sguidoelement& i) const; + virtual bool operator !=(const Sguidoelement& i) const { return !(*this == i); } +}; + +gar_export std::ostream& operator << (std::ostream& os, const Sguidoelement& elt); + +} // namespace + +#endif diff --git a/guidoar-dev/src/guido/guidotags.h b/guidoar-dev/src/guido/guidotags.h new file mode 100644 index 000000000..415cecaa1 --- /dev/null +++ b/guidoar-dev/src/guido/guidotags.h @@ -0,0 +1,156 @@ +/* + GUIDO Library + Copyright (C) 2006 Grame + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + + Grame Research Laboratory, 9 rue du Garet, 69001 Lyon - France + research@grame.fr + +*/ + +#ifndef __guidotags__ +#define __guidotags__ + +namespace guido +{ + +enum { + kTMusic=1, + kTVoice, + kTChord, + kTNote, + + kTagStart=10, + kTAcc = kTagStart, + kTAccel, + kTAccelBegin, + kTAccelEnd, + kTAccent, + kTAccol, + kTAlter, + kTAuto, + kTAutoBreak, + kTBar, + kTBarFormat, + kTBeam, + kTBeamBegin, + kTBeamEnd, + kTBeamsAuto, + kTBeamsOff, + kTBembel, + kTBreathMark, + kTClef, + kTCoda, + kTColor, + kTComposer, + kTCresc, + kTCrescBegin, + kTCrescEnd, + kTCue, + kTDaCapo, + kTDaCapoAlFine, + kTDaCoda, + kTDalSegno, + kTDalSegnoAlFine, + kTDecresc, + kTDefineTag, + kTDim, + kTDimBegin, + kTDimEnd, + kTDiminuendo, + kTDispDur, + kTDotFormat, + kTDoubleBar, + kTEndBar, + kTFermata, + kTFine, + kTFingering, + kTGrace, + kTHeadsCenter, + kTHeadsLeft, + kTHeadsNormal, + kTHeadsReverse, + kTHeadsRight, + kTInstr, + kTIntens, + kTKey, + kTLabel, + kTLyrics, + kTMarcato, + kTMark, + kTMerge, + kTMeter, + kTMord, + kTNewLine, + kTNewPage, + kTNewSystem, + kTNoteFormat, + kTOct, + kTPageFormat, + kTPort, + kTRepeatBegin, + kTRepeatEnd, + kTRestFormat, + kTRit, + kTRitBegin, + kTRitEnd, + kTSegno, + kTShareLocation, + kTSlur, + kTSlurBegin, + kTSlurEnd, + kTSpace, + kTSpecial, + kTSplitChord, + kTStacc, + kTStaccBegin, + kTStaccEnd, + kTStaff, + kTStaffFormat, + kTStaffOff, + kTStaffOn, + kTStemsAuto, + kTStemsDown, + kTStemsOff, + kTStemsUp, + kTSystemFormat, + kTTempo, + kTTen, + kTText, + kTTie, + kTTieBegin, + kTTieEnd, + kTTitle, + kTTrem, + kTTrill, + kTTuplet, + kTTurn, + kTUnits, + kTVolta, + kTVoltaBegin, + kTVoltaEnd, + kTDrHoos, + kTDrRenz, + kTBackward, // a tag specific to the normal form of a chord + // new tags Guido v.1.38 + kTHarmonic, + kTPizz, + kTagEnd +}; + +} //namespace + +#endif diff --git a/guidoar-dev/src/interface/arexport.h b/guidoar-dev/src/interface/arexport.h new file mode 100644 index 000000000..a163283ad --- /dev/null +++ b/guidoar-dev/src/interface/arexport.h @@ -0,0 +1,45 @@ +#ifndef __export__ +#define __export__ + +/* + GuidoAR Library + Copyright (C) 2003 - 2012 Grame + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + + */ + +#ifdef WIN32 + +# ifdef GUIDOAR_EXPORTS +# define gar_export _declspec (dllexport) +# else +# define gar_export _declspec (dllimport) +# endif + +# pragma warning ( disable : 4275 4251 ) + +#else + +# ifdef GUIDOAR_EXPORTS +# define gar_export __attribute__ ((visibility("default"))) +# else +# define gar_export +# endif + +#endif + + +#endif diff --git a/guidoar-dev/src/interface/guidorational.h b/guidoar-dev/src/interface/guidorational.h new file mode 100644 index 000000000..ddd3dd42c --- /dev/null +++ b/guidoar-dev/src/interface/guidorational.h @@ -0,0 +1,118 @@ +/* + Copyright � Grame 2003 + + This library is free software; you can redistribute it and modify it under + the terms of the GNU Library General Public License as published by the + Free Software Foundation version 2 of the License, or any later version. + + This library is distributed in the hope that it will be useful, but + WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY + or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Library General Public License + for more details. + + You should have received a copy of the GNU Library General Public License + along with this library; if not, write to the Free Software + Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + + Grame Research Laboratory, 9, rue du Garet 69001 Lyon - France + research@grame.fr + +*/ + +#ifndef __guidorational__ +#define __guidorational__ + +#include +#include + +#include "arexport.h" + +/*! +\brief Rational number representation. +*/ + +namespace guido +{ + +class gar_export rational { + + private: +#ifndef EMCC + long int fNumerator; + long int fDenominator; +#endif + // Used by rationalise() + long int gcd(long int a, long int b); + + public: +#ifdef EMCC + long int fNumerator; // fields must be public for emcc + long int fDenominator; +#endif + rational(long int num = 0, long int denom = 1); + rational(const rational& d); + rational(const std::string &str); + + long int getNumerator() const { return fNumerator; } + long int getDenominator() const { return fDenominator; } + void setNumerator(long int d) { fNumerator = d; } + void setDenominator(long int d) { fDenominator = d; } + void set(long int n, long int d) { fNumerator = n; fDenominator = d; } + + rational operator +(const rational &dur) const; + rational operator -(const rational &dur) const; + //! Useful for notes with dots. + rational operator *(const rational &dur) const; + rational operator /(const rational &dur) const; + // (i.e. dur * 3/2 or dur * 7/4) + + rational operator *(int num) const; + rational operator /(int num) const; + + rational& operator +=(const rational &dur); + rational& operator -=(const rational &dur); + //! Useful for notes with dots. + rational& operator *=(const rational &dur); + rational& operator /=(const rational &dur); + // (i.e. dur * 3/2 or dur * 7/4) + + rational& operator *=(long int num) { fNumerator *= num; return *this; } + rational& operator /=(long int num) { fDenominator *= num; return *this; } + + rational& operator =(const rational& dur); + + bool operator >(const rational &dur) const; + bool operator >=(const rational &dur) const {return !(*this < dur);} + bool operator <(const rational &dur) const; + bool operator <=(const rational &dur) const {return !(*this > dur);} + + bool operator ==(const rational &dur) const; + bool operator !=(const rational &dur) const {return !(*this == dur);} + + bool operator > (double num) const; + bool operator >=(double num) const; + bool operator < (double num) const; + bool operator <=(double num) const; + bool operator ==(double) const; + + // Used to "rationalise" rational. + rational& rationalise(); + + operator std::string () const; + operator double () const; + operator float () const; + operator int () const; + + std::string toString() const; + double toDouble() const; + float toFloat() const; + int toInt() const; +}; + +typedef std::vector rationals; +gar_export std::ostream& operator << (std::ostream& os, rational); +gar_export std::ostream& operator << (std::ostream& os, rationals); + +} + +#endif diff --git a/guidoar-dev/src/interface/libguidoar.cpp b/guidoar-dev/src/interface/libguidoar.cpp new file mode 100644 index 000000000..0cb22b60c --- /dev/null +++ b/guidoar-dev/src/interface/libguidoar.cpp @@ -0,0 +1,274 @@ +/* + + guidoar Library + Copyright (C) 2008-2012 Grame + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + + Grame Research Laboratory, 9 rue du Garet, 69001 Lyon - France + research@grame.fr + +*/ + +#include +#include + +#include "libguidoar.h" + +#include "AROthers.h" +#include "bottomOperation.h" +#include "clonevisitor.h" +#include "durationOperation.h" +#include "eheadOperation.h" +#include "etailOperation.h" +#include "event2timevisitor.h" +#include "guidoelement.h" +#include "guidoparser.h" +#include "headOperation.h" +#ifdef MIDIEXPORT +#include "midiconverter.h" +#endif +#include "mirrorOperation.h" +#include "parOperation.h" +#include "seqOperation.h" +#include "tailOperation.h" +#include "topOperation.h" +#include "transposeOperation.h" +#include "ringvector.h" +#include "rythmApplyOperation.h" +#include "pitchApplyOperation.h" +#include "unrolled_guido_browser.h" + +using namespace std; +namespace guido +{ + +//---------------------------------------------------------------------------- +gar_export float guidoarVersion() { return 1.00; } +gar_export const char* guidoarVersionStr() { return "1.00"; } + +//---------------------------------------------------------------------------- +static SARMusic read (const char* buff) +{ + if (!buff) return 0; + guidoparser r; + return r.parseString(buff); +} + +//---------------------------------------------------------------------------- +gar_export garErr guido2unrolled(const char* gmn, std::ostream& out) +{ + garErr err = kNoErr; + Sguidoelement score = read(gmn); + if (!score) return kInvalidArgument; + + clonevisitor cv; + unrolled_guido_browser ugb(&cv); + ugb.browse (score); + score = cv.result(); + if (score) out << score << endl; + else err = kOperationFailed; + return err; +} + +//---------------------------------------------------------------------------- +gar_export rational guidoEv2Time(const char* gmn, unsigned int index, unsigned int voice) +{ + Sguidoelement score = read(gmn); + if (!score) return kInvalidArgument; + event2timevisitor convert; + return convert.event2time (score, index, voice); +} + +//---------------------------------------------------------------------------- +gar_export int guidoTime2Ev(const char* gmn, const rational& date, unsigned int voice) +{ + Sguidoelement score = read(gmn); + if (!score) return kInvalidArgument; + event2timevisitor convert; + return convert.time2event (score, date, voice); +} + + +//---------------------------------------------------------------------------- +// wrappers for score operations +//---------------------------------------------------------------------------- +template garErr opWrapper(const char* gmn, ARG param, std::ostream& out) +{ + Sguidoelement score = read(gmn); + if (!score) return kInvalidArgument; + + OP op; + score = op(score, param); + if (score) out << score << endl; + else return kOperationFailed; + return kNoErr; +} + +//---------------------------------------------------------------------------- +template garErr opgmnWrapper(const char* gmn, const char* gmnSpec, std::ostream& out) +{ + SARMusic score = read(gmn); + SARMusic dscore = read(gmnSpec); + if (!score || !dscore) return kInvalidArgument; + + OP op; + score = op(score, dscore); + if (score) out << Sguidoelement(score) << endl; + else return kOperationFailed; + return kNoErr; +} + +//---------------------------------------------------------------------------- +// score operations +//---------------------------------------------------------------------------- +gar_export garErr guidoGBottom(const char* gmn, const char* gmnSpec, std::ostream& out) + { return opgmnWrapper(gmn, gmnSpec, out); } +gar_export garErr guidoVBottom(const char* gmn, int nvoices, std::ostream& out) + { return opWrapper(gmn, nvoices, out); } + +//---------------------------------------------------------------------------- +gar_export garErr guidoGTop(const char* gmn, const char* gmnSpec, std::ostream& out) + { return opgmnWrapper(gmn, gmnSpec, out); } +gar_export garErr guidoVTop(const char* gmn, int nvoices, std::ostream& out) + { return opWrapper(gmn, nvoices, out); } + +//---------------------------------------------------------------------------- +gar_export garErr guidoGSetDuration(const char* gmn, const char* gmnSpec, std::ostream& out) + { return opgmnWrapper(gmn, gmnSpec, out); } +gar_export garErr guidoVSetDuration(const char* gmn, rational duration, std::ostream& out) + { return opWrapper(gmn, duration, out); } +gar_export garErr guidoVMultDuration(const char* gmn, float duration, std::ostream& out) + { return opWrapper(gmn, duration, out); } + +//---------------------------------------------------------------------------- +gar_export garErr guidoApplyRythm(const char* gmn, const char* gmnSpec, TApplyMode mode, std::ostream& out) +{ + switch (mode) { + case kApplyOnce: + return opgmnWrapper > >(gmn, gmnSpec, out); + case kApplyForwardLoop: + return opgmnWrapper > >(gmn, gmnSpec, out); + case kApplyForwardBackwardLoop: ; + return opgmnWrapper > >(gmn, gmnSpec, out); + } + return kInvalidArgument; +} + +//---------------------------------------------------------------------------- +gar_export garErr guidoApplyPitch(const char* gmn, const char* gmnSpec, TApplyMode mode, chordPitchMode pmode, std::ostream& out) +{ + switch (pmode) { + case kUseLowest: + switch (mode) { + case kApplyOnce: + return opgmnWrapper > >(gmn, gmnSpec, out); + case kApplyForwardLoop: + return opgmnWrapper > >(gmn, gmnSpec, out); + case kApplyForwardBackwardLoop: ; + return opgmnWrapper > >(gmn, gmnSpec, out); + } + break; + case kUseHighest: + switch (mode) { + case kApplyOnce: + return opgmnWrapper > >(gmn, gmnSpec, out); + case kApplyForwardLoop: + return opgmnWrapper > >(gmn, gmnSpec, out); + case kApplyForwardBackwardLoop: ; + return opgmnWrapper > >(gmn, gmnSpec, out); + } + break; + } + return kInvalidArgument; +} + +//---------------------------------------------------------------------------- +gar_export garErr guidoVTranpose(const char* gmn, int interval, std::ostream& out) + { return opWrapper(gmn, interval, out); } +gar_export garErr guidoGTranpose(const char* gmn, const char* gmnSpec, std::ostream& out) + { return opgmnWrapper(gmn, gmnSpec, out); } + +//---------------------------------------------------------------------------- +gar_export garErr guidoVHead(const char* gmn, rational duration, std::ostream& out) + { return opWrapper(gmn, duration, out); } +gar_export garErr guidoGHead(const char* gmn, const char* gmnSpec, std::ostream& out) + { return opgmnWrapper(gmn, gmnSpec, out); } + +//---------------------------------------------------------------------------- +gar_export garErr guidoVEHead(const char* gmn, int duration, std::ostream& out) + { return opWrapper(gmn, duration, out); } +gar_export garErr guidoGEHead(const char* gmn, const char* gmnSpec, std::ostream& out) + { return opgmnWrapper(gmn, gmnSpec, out); } + +//---------------------------------------------------------------------------- +gar_export garErr guidoVTail(const char* gmn, rational duration, std::ostream& out) + { return opWrapper(gmn, duration, out); } +gar_export garErr guidoGTail(const char* gmn, const char* gmnSpec, std::ostream& out) + { return opgmnWrapper(gmn, gmnSpec, out); } + +//---------------------------------------------------------------------------- +gar_export garErr guidoVETail(const char* gmn, int duration, std::ostream& out) + { return opWrapper(gmn, duration, out); } +gar_export garErr guidoGETail(const char* gmn, const char* gmnSpec, std::ostream& out) + { return opgmnWrapper(gmn, gmnSpec, out); } + +//---------------------------------------------------------------------------- +gar_export garErr guidoGSeq(const char* gmn1, const char* gmn2, std::ostream& out) + { return opgmnWrapper(gmn1, gmn2, out); } +gar_export garErr guidoGPar(const char* gmn1, const char* gmn2, std::ostream& out) + { return opgmnWrapper(gmn1, gmn2, out); } +gar_export garErr guidoGRPar(const char* gmn1, const char* gmn2, std::ostream& out) + { return opgmnWrapper(gmn1, gmn2, out); } + +//---------------------------------------------------------------------------- +gar_export garErr guidoGMirror(const char* gmn1, const char* gmn2, std::ostream& out) + { return opgmnWrapper(gmn1, gmn2, out); } + +//---------------------------------------------------------------------------- +gar_export rational guidoDuration(const char* gmn) +{ + rational duration (-1,1); + Sguidoelement score = read(gmn); + if (score) { + durationvisitor dv; + duration = dv.duration (score); + } + return duration; +} + +//---------------------------------------------------------------------------- +gar_export garErr guido2midifile(const char* gmn, const char* file) +{ +#ifdef MIDIEXPORT + Sguidoelement score = read(gmn); + if (!score) return kInvalidArgument; + + midiconverter mc; + return mc.score2midifile(score, file) ? kNoErr : kOperationFailed; +#else + cerr << "guido2midifile: no support for midifile conversion embedded in the guidoar library" << endl; + return kOperationFailed; +#endif +} + +//---------------------------------------------------------------------------- +gar_export bool guidocheck(const char* gmn) +{ + Sguidoelement score = read(gmn); + return score ? true : false; +} + +} diff --git a/guidoar-dev/src/interface/libguidoar.h b/guidoar-dev/src/interface/libguidoar.h new file mode 100644 index 000000000..413532e1e --- /dev/null +++ b/guidoar-dev/src/interface/libguidoar.h @@ -0,0 +1,382 @@ +/* + + guidoar Library + Copyright (C) 2008-2009 Grame + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + + Grame Research Laboratory, 9 rue du Garet, 69001 Lyon - France + research@grame.fr + +*/ +#ifndef __libguidoar__ +#define __libguidoar__ + +#ifdef WIN32 +# pragma warning (disable : 4786 4190) +#endif + +#include +#include +#include +#include "guidorational.h" +#include "arexport.h" + +namespace guido +{ + +/*! +\addtogroup interface C Interface +@{ +*/ + +enum garErr { kNoErr, kInvalidFile, kInvalidArgument, kOperationFailed }; + + +#ifdef __cplusplus +extern "C" { +#endif + +/// \brief gives the library version number as a float number +gar_export float guidoarVersion(); +/// \brief gives the library version string +gar_export const char* guidoarVersionStr(); + +//-------------------------------------------------------------------------------- +// operations on scores +//-------------------------------------------------------------------------------- +/*! \brief creates an unrolled version of a score + + An unrolled score is a score where repeats, jumps to coda, dal segno etc... are removed by producing + an explicit score where the structure is absent but explicitily written. + \param gmn a string containing the gmn code + \param out a stream to output the unrolled version + \return an error code +*/ +gar_export garErr guido2unrolled(const char* gmn, std::ostream& out); + +/*! \brief transpose a score + + Transposition of a score affects notes but also key signature when present. Between similar enharmonic + key signatures, the simplest one is choosen. + \param gmn a string containing the gmn code + \param interval the transposing interval + \param out the output stream + \return an error code +*/ +gar_export garErr guidoVTranpose(const char* gmn, int interval, std::ostream& out); + +/*! \brief transpose a score using another score + + The transposing interval is computed as the difference between the 2 score's pitches: + the pitch of a score is the pitch of the first note of the first voice. In case the first voice + starts with a chord, the lowest pitch is taken. More intuitively, the operation forces the pitch of + the first score to the pitch of the second one. + \param gmn a string containing the gmn code + \param gmnSpec a string containing a gmn score where the transposing interval is taken + \param out the output stream + \return an error code +*/ +gar_export garErr guidoGTranpose(const char* gmn, const char* gmnSpec, std::ostream& out); + +/*! \brief cut voices of a score + + The \c top operation preserves \c n voices of the score, starting from the first voice and drops + the remaining voices. + \param gmn a string containing the gmn code + \param nvoices the number of voices to preserve + \param out the output stream + \return an error code +*/ +gar_export garErr guidoVTop(const char* gmn, int nvoices, std::ostream& out); + +/*! \brief cut voices of a score using another score + + The number of voices to preserve is taken from the second score voices number. + \param gmn a string containing the gmn code + \param gmnSpec a string containing a gmn score where the number of voices is taken + \param out the output stream + \return an error code +*/ +gar_export garErr guidoGTop(const char* gmn, const char* gmnSpec, std::ostream& out); + + +/*! \brief cut voices of a score + + The \c bottom operation drops \c n voices of the score, starting the first voice and preserves + the remaining voices. + \param gmn a string containing the gmn code + \param nvoices the number of voices to drop + \param out the output stream + \return an error code +*/ +gar_export garErr guidoVBottom(const char* gmn, int nvoices, std::ostream& out); + +/*! \brief cut voices of a score using another score + + The number of voices to drop is taken from the second score voices number. + \param gmn a string containing the gmn code + \param gmnSpec a string containing a gmn score where the number of voices is taken + \param out the output stream + \return an error code +*/ +gar_export garErr guidoGBottom(const char* gmn, const char* gmnSpec, std::ostream& out); + + +/*! \brief takes the head of a score + + The \c head operation preserves a duration \c d of the score, starting from the beginning and drops + the remaining parts. + \param gmn a string containing the gmn code + \param duration a duration expressed as a rational, where 1/1 is a whole note. + \param out the output stream + \return an error code +*/ +gar_export garErr guidoVHead(const char* gmn, rational duration, std::ostream& out); + +/*! \brief takes the head of a score using another score + + The duration to preserve is taken from the second score duration. + \param gmn a string containing the gmn code + \param gmnSpec a string containing a gmn score where the duration is taken + \param out the output stream + \return an error code +*/ +gar_export garErr guidoGHead(const char* gmn, const char* gmnSpec, std::ostream& out); + +/*! \brief takes the head of a score on an event basis + + The \c ehead operation preserves \c n events of the score, starting from the beginning and drops + the remaining events. + \param gmn a string containing the gmn code + \param n the number of events to preserve. + \param out the output stream + \return an error code +*/ +gar_export garErr guidoVEHead(const char* gmn, int n, std::ostream& out); + +/*! \brief takes the head of a score on an event basis using another score + + The number of events to preserve is taken from the second score events count. + \param gmn a string containing the gmn code + \param gmnSpec a string containing a gmn score where the number of events is taken + \param out the output stream + \return an error code +*/ +gar_export garErr guidoGEHead(const char* gmn, const char* gmnSpec, std::ostream& out); + + +/*! \brief takes the tail of a score + + The \c tail operation drops a duration \c d of the score, starting from the beginning and preserves + the remaining parts. + \param gmn a string containing the gmn code + \param duration a duration expressed as a rational, where 1/1 is a whole note. + \param out the output stream + \return an error code +*/ +gar_export garErr guidoVTail(const char* gmn, rational duration, std::ostream& out); + +/*! \brief takes the tail of a score using another score + + The duration to drop is taken from the second score duration. + \param gmn a string containing the gmn code + \param gmnSpec a string containing a gmn score where the duration is taken + \param out the output stream + \return an error code +*/ +gar_export garErr guidoGTail(const char* gmn, const char* gmnSpec, std::ostream& out); + +/*! \brief takes the tail of a score on an event basis + + The \c etail operation drops \c n events of the score, starting from the beginning and preserves + the remaining events. + \param gmn a string containing the gmn code + \param n the number of events to preserve. + \param out the output stream + \return an error code +*/ +gar_export garErr guidoVETail(const char* gmn, int n, std::ostream& out); + +/*! \brief takes the tail of a score on an event basis using another score + + The number of events to drop is taken from the second score events count. + \param gmn a string containing the gmn code + \param gmnSpec a string containing a gmn score where the number of events is taken + \param out the output stream + \return an error code +*/ +gar_export garErr guidoGETail(const char* gmn, const char* gmnSpec, std::ostream& out); + +/*! \brief takes the tail of a score on an event basis + + The \c etail operation drops \c n events of the score, starting from the beginning and preserves + the remaining events. + \param gmn a string containing the gmn code + \param n the number of events to preserve. + \param out the output stream + \return an error code +*/ +gar_export garErr guidoVETail(const char* gmn, int n, std::ostream& out); + +/*! \brief takes the tail of a score on an event basis using another score + + The number of events to preserve is taken from the second score events count. + \param gmn a string containing the gmn code + \param gmnSpec a string containing a gmn score where the number of events is taken + \param out the output stream + \return an error code +*/ +gar_export garErr guidoGETail(const char* gmn, const char* gmnSpec, std::ostream& out); + + +/*! \brief put 2 scores in sequence + + The new score is the sequence of the \c gmn1 and \c gmn2 scores. + \param gmn1 a string containing gmn code + \param gmn2 a string containing gmn code + \param out the output stream + \return an error code +*/ +gar_export garErr guidoGSeq(const char* gmn1, const char* gmn2, std::ostream& out); + +/*! \brief put 2 scores in parallel + + The new score is composed of the \c gmn1 voices followed by the \c gmn2 voices. + \param gmn1 a string containing gmn code + \param gmn2 a string containing gmn code + \param out the output stream + \return an error code +*/ +gar_export garErr guidoGPar (const char* gmn1, const char* gmn2, std::ostream& out); + +/*! \brief put 2 scores in parallel with right justification + + Right justification means that rest may be inserted at the beginning of a voice, + so that the longest voices of each score end a the same time. + \param gmn1 a string containing gmn code + \param gmn2 a string containing gmn code + \param out the output stream + \return an error code +*/ +gar_export garErr guidoGRPar(const char* gmn1, const char* gmn2, std::ostream& out); + +/*! \brief mirror a score using a second score as fixed pitch point + + \param gmn1 a string containing gmn code + \param gmn2 a string containing gmn code which first note of first voice is used as fixed pitch + \param out the output stream + \return an error code +*/ +gar_export garErr guidoGMirror(const char* gmn1, const char* gmn2, std::ostream& out); + + +/*! \brief set the duration of one score to the duration of the second one + \param gmn a string containing gmn code + \param gmnSpec a string containing gmn code + \param out the output stream + \return an error code +*/ +gar_export garErr guidoGSetDuration(const char* gmn, const char* gmnSpec, std::ostream& out); + +enum TApplyMode { kApplyOnce, kApplyForwardLoop, kApplyForwardBackwardLoop}; +enum chordPitchMode { kUseLowest, kUseHighest }; + +/*! \brief applies the rythmic structure of a score to another score + \param gmn a string containing gmn code + \param gmnSpec a string containing gmn code where rythmic structure is extracted + \param mode specifies how the rythmic structure should be applied + \param out the output stream + \return an error code + The rythmic structure is extracted from the first voice of the second score. It is applied to the first + score without realignment at the beginning of each voice. +*/ +gar_export garErr guidoApplyRythm(const char* gmn, const char* gmnSpec, TApplyMode mode, std::ostream& out); + +/*! \brief applies the pitch structure of a score to another score + \param gmn a string containing gmn code + \param gmnSpec a string containing gmn code where pitch structure is extracted + \param mode specifies how the pitch structure should be applied + \param pmode specifies how a chord pitch is computed + \param out the output stream + \return an error code + The pitch structure is extracted from the first voice of the second score. It is applied to the first + score without realignment at the beginning of each voice. +*/ +gar_export garErr guidoApplyPitch(const char* gmn, const char* gmnSpec, TApplyMode mode, chordPitchMode pmode, std::ostream& out); + +/*! \brief set the duration of a score to a given duration + \param gmn a string containing gmn code + \param duration the target duration + \param out the output stream + \return an error code +*/ +gar_export garErr guidoVSetDuration(const char* gmn, rational duration, std::ostream& out); + +/*! \brief multiply the duration of a score + \param gmn a string containing gmn code + \param mult the multiplication factor + \param out the output stream + \return an error code +*/ +gar_export garErr guidoVMultDuration(const char* gmn, float mult, std::ostream& out); + +/*! \brief gives an event index at a given date + \param gmn a string containing gmn code + \param date a date expressed as a rational (1 is a whole note) + \param voice the target voice index + \return an event index +*/ +gar_export int guidoTime2Ev(const char* gmn, const rational& date, unsigned int voice); + +/*! \brief export to midifile + \param gmn a string containing gmn code + \param file the midi file name + \return an error code +*/ +gar_export garErr guido2midifile(const char* gmn, const char* file); + +/*! \brief check gmn code correctness + \return a boolean value +*/ +gar_export bool guidocheck(const char* gmn); + + +#ifdef __cplusplus +} +#endif + + +/*! \brief gives a score duration + \param gmn a string containing gmn code + \return a rational value (1 is a whole note), negative in case of error +*/ +gar_export rational guidoDuration(const char* gmn); + +/*! \brief gives an event date + \param gmn a string containing gmn code + \param index the target event index + \param voice the target voice index + \return a date in musical time expressed as a rational +*/ +gar_export rational guidoEv2Time(const char* gmn, unsigned int index, unsigned int voice); + + +/*! @} */ + + +} + +#endif diff --git a/guidoar-dev/src/lang/exceptions.cpp b/guidoar-dev/src/lang/exceptions.cpp new file mode 100644 index 000000000..af717df5e --- /dev/null +++ b/guidoar-dev/src/lang/exceptions.cpp @@ -0,0 +1,38 @@ +/* + GuidoAR Library + Copyright (C) 2008 Grame + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + + Grame Research Laboratory, 9 rue du Garet, 69001 Lyon - France + research@grame.fr + +*/ + +#include "exceptions.h" + +/* + warning ! messages declaration should be kept in ExceptionNum enum order +*/ +const char* kExceptionMsg[] = { + "no exception", + "undefined composition operation", + "unexpected null value", + "unexpected null environment", + "unexpected null ident", + "unexpected null body", + "missing expression argument" +}; + diff --git a/guidoar-dev/src/lang/exceptions.h b/guidoar-dev/src/lang/exceptions.h new file mode 100644 index 000000000..8baa6e118 --- /dev/null +++ b/guidoar-dev/src/lang/exceptions.h @@ -0,0 +1,59 @@ +/* + GuidoAR Library + Copyright (C) 2008 Grame + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + + Grame Research Laboratory, 9 rue du Garet, 69001 Lyon - France + research@grame.fr + +*/ + +#ifndef __exceptions__ +#define __exceptions__ + +//______________________________________________________________________________ +typedef struct TException { + + TException(int n, const char* s, const char* f, int ln) + : num(n), msg(s), file(f), line(ln) {} + + const int num; // the exception number + const char* msg; // the message associated to the exception + const char* file; // the file where the exception occured + const int line; // the line number within the file +}TException; + +//______________________________________________________________________________ +// a macro to automatically catch the file name and line number +#define eMsg(n) kExceptionMsg[n] +#define newMsgException(n,msg) TException(n,msg,__FILE__,__LINE__) +#define newException(n) TException(n,eMsg(n),__FILE__,__LINE__) + +//______________________________________________________________________________ +// exceptions definitions +enum ExceptionNum { + kNoException, // no exception - shouldn't be triggered + kUndefinedCompOperation, // undefined composition operator called + kNullValue, // got an unexpected null value + kNullEnvironment, // got a null environment + kNullIdent, // got a null identificator within a lambda abstraction + kNullBody, // got a null body within a lambda abstraction + kMissingArgument // an expression argument is missing +}; + +extern const char* kExceptionMsg[]; // and the associates messages + +#endif diff --git a/guidoar-dev/src/lang/expressions/guidoExpFactory.cpp b/guidoar-dev/src/lang/expressions/guidoExpFactory.cpp new file mode 100644 index 000000000..2cd160420 --- /dev/null +++ b/guidoar-dev/src/lang/expressions/guidoExpFactory.cpp @@ -0,0 +1,138 @@ +/* + GUIDO Library + Copyright (C) 2006 Grame + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + + Grame Research Laboratory, 9 rue du Garet, 69001 Lyon - France + research@grame.fr + +*/ + +#ifdef WIN32 +# pragma warning (disable : 4786) +#endif + +#include + +#include "guidoExpFactory.h" + +#include "guidoexpression.h" +#include "guidoScoreExpr.h" +#include "guidoNamedExpr.h" + +using namespace std; +using namespace guido; + +namespace guidolang +{ + +//______________________________________________________________________________ +template +class newNodeFunctor : public rfunctor { + public: + Sguidoexpression operator ()() { return guidonode::create(); } +}; + +//______________________________________________________________________________ +guidoExpFactory::guidoExpFactory() +{ + fMap["."] = new newNodeFunctor; + fMap["@"] = new newNodeFunctor; + fMap[":"] = new newNodeFunctor; + fMap["/"] = new newNodeFunctor; + fMap["-|"] = new newNodeFunctor; + fMap["|-"] = new newNodeFunctor; + fMap["-/"] = new newNodeFunctor; + fMap["/-"] = new newNodeFunctor; + fMap["transp"] = new newNodeFunctor; + fMap["stretch"] = new newNodeFunctor; + fMap["ident"] = new newNodeFunctor; + fMap["group"] = new newNodeFunctor; +} + +//______________________________________________________________________________ +Sguidoexpression guidoExpFactory::create(const string& name) const +{ + map::const_iterator i = fMap.find( name ); + if (i != fMap.end()) { + NewNodeFunctor* f= i->second; + if (f) { + Sguidoexpression elt = (*f)(); + if (elt) elt->setName(name); + return elt; + } + } + cerr << "Sguidoelement factory::create called with unknown element \"" << name << "\"" << endl; + return 0; +} + +//______________________________________________________________________________ +Sguidoexpression guidoExpFactory::create(guido::Sguidoelement& score) const +{ + SguidoScoreExpr exp = guidoScoreExpr::create (score); + if (exp) exp->setName("gmn"); + return exp; +} + +//______________________________________________________________________________ +Sguidoexpression guidoExpFactory::create(const std::string& name, Sguidoexpression& e) const +{ + Sguidoexpression exp = create (name); + if (exp) exp->push(e); + return exp; +} + +//______________________________________________________________________________ +Sguidoexpression guidoExpFactory::createNamed(const std::string& name, Sguidoexpression& e) const +{ + Sguidoexpression exp = guidoNamedExpr::create(); + if (exp) { + if (exp) exp->setName(name); + exp->push(e); + } + return exp; +} + +//______________________________________________________________________________ +Sguidoexpression guidoExpFactory::create(const std::string& name, Sguidoexpression& e1, Sguidoexpression& e2) const +{ + Sguidoexpression exp = create (name); + if (exp) { + exp->push(e1); + exp->push(e2); + } + return exp; +} + +//______________________________________________________________________________ +Sguidoexpression guidoExpFactory::createAbstract(const std::string& name, Sguidoexpression& e1, Sguidoexpression& e2) const +{ + Sguidoexpression exp = create (name); + Sguidoexpression ident = create("ident", e1); + Sguidoexpression e = e2->replace(e1,ident); + if (exp && ident && e) { +#if 0 + exp->push(e1); + exp->push(e2); +#else + exp->push(ident); + exp->push(e); +#endif + } + return exp; +} + +} // namespace diff --git a/guidoar-dev/src/lang/expressions/guidoExpFactory.h b/guidoar-dev/src/lang/expressions/guidoExpFactory.h new file mode 100644 index 000000000..ff17b1ab9 --- /dev/null +++ b/guidoar-dev/src/lang/expressions/guidoExpFactory.h @@ -0,0 +1,62 @@ +/* + GUIDO Library + Copyright (C) 2006-2008 Grame + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + + Grame Research Laboratory, 9 rue du Garet, 69001 Lyon - France + research@grame.fr + +*/ + +#ifndef __guidoExpFactory__ +#define __guidoExpFactory__ + +#include +#include + +#include "functor.h" +#include "guidoExprTypes.h" +#include "guidoelement.h" +#include "singleton.h" + +namespace guidolang +{ + +typedef guido::rfunctor NewNodeFunctor; + +/*! +\brief A guido language expressions factory. +*/ +class export guidoExpFactory : public singleton +{ + private: + std::map fMap; + + public: + guidoExpFactory(); + virtual ~guidoExpFactory() {} + + Sguidoexpression create(const std::string& name) const; + Sguidoexpression create(guido::Sguidoelement& score) const; + Sguidoexpression create(const std::string& name, Sguidoexpression& e) const; + Sguidoexpression createNamed(const std::string& name, Sguidoexpression& e) const; + Sguidoexpression create(const std::string& name, Sguidoexpression& e1, Sguidoexpression& e2) const; + Sguidoexpression createAbstract(const std::string& name, Sguidoexpression& e1, Sguidoexpression& e2) const; +}; + +} // namespace + +#endif diff --git a/guidoar-dev/src/lang/expressions/guidoExprEnum.h b/guidoar-dev/src/lang/expressions/guidoExprEnum.h new file mode 100644 index 000000000..04865a4b0 --- /dev/null +++ b/guidoar-dev/src/lang/expressions/guidoExprEnum.h @@ -0,0 +1,49 @@ +/* + GUIDO Library + Copyright (C) 2006-2008 Grame + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + + Grame Research Laboratory, 9 rue du Garet, 69001 Lyon - France + research@grame.fr + +*/ + +#ifndef __guidoExpEnum__ +#define __guidoExpEnum__ + +namespace guidolang +{ + +enum { + kAbstract, + kApply, + kTransp, + kStretch, + kSeqOp, + kParOp, + kHeadOp, + kTailOp, + kTopOp, + kBottomOp, + kIdent, + kNamed, + kGrouped, + kScore +}; + +} // namespace + +#endif diff --git a/guidoar-dev/src/lang/expressions/guidoExprTypes.h b/guidoar-dev/src/lang/expressions/guidoExprTypes.h new file mode 100644 index 000000000..1275a2615 --- /dev/null +++ b/guidoar-dev/src/lang/expressions/guidoExprTypes.h @@ -0,0 +1,63 @@ +/* + GUIDO Library + Copyright (C) 2006-2008 Grame + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + + Grame Research Laboratory, 9 rue du Garet, 69001 Lyon - France + research@grame.fr + +*/ + +#ifndef __guidoExpTypes__ +#define __guidoExpTypes__ + +#include "guidoExprEnum.h" +#include "gar_smartpointer.h" + +namespace guidolang +{ + +class guidoexpression; +class guidoScoreExpr; +class guidoNamedExpr; +template class guidonode; + +typedef guido::SMARTP Sguidoexpression; +typedef guido::SMARTP > SguidoAbstractExpr; +typedef guido::SMARTP > SguidoApplyExpr; +typedef guido::SMARTP > SguidoTranspExpr; +typedef guido::SMARTP > SguidoStretchExpr; +typedef guido::SMARTP > SguidoSeqExpr; +typedef guido::SMARTP > SguidoParExpr; +typedef guido::SMARTP > SguidoHeadExpr; +typedef guido::SMARTP > SguidoTailExpr; +typedef guido::SMARTP > SguidoTopExpr; +typedef guido::SMARTP > SguidoBottomExpr; +typedef guido::SMARTP > SguidoIdentExpr; +typedef guido::SMARTP > SguidoGroupedExpr; + +typedef guido::SMARTP SguidoScoreExpr; +typedef guido::SMARTP SguidoNamedExpr; + +class guidoEnv; +typedef guido::SMARTP SguidoEnv; +class guidovalue; +typedef guido::SMARTP Sguidovalue; + + +} // namespace + +#endif diff --git a/guidoar-dev/src/lang/expressions/guidoNamedExpr.cpp b/guidoar-dev/src/lang/expressions/guidoNamedExpr.cpp new file mode 100644 index 000000000..07c177126 --- /dev/null +++ b/guidoar-dev/src/lang/expressions/guidoNamedExpr.cpp @@ -0,0 +1,64 @@ +/* + GUIDO Library + Copyright (C) 2006 Grame + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + + Grame Research Laboratory, 9 rue du Garet, 69001 Lyon - France + research@grame.fr + +*/ + +#include + +#include "guidoNamedExpr.h" +#include "visitor.h" + +using namespace std; +using namespace guido; + +namespace guidolang +{ + +//______________________________________________________________________________ +// guidoNamedExpr +//______________________________________________________________________________ +void guidoNamedExpr::acceptIn(basevisitor& v) { + if (visitor* p = dynamic_cast*>(&v)) { + SguidoNamedExpr ge = this; + p->visitStart (ge); + } + else guidoexpression::acceptIn(v); +} + +//______________________________________________________________________________ +void guidoNamedExpr::acceptOut(basevisitor& v) { + if (visitor* p = dynamic_cast*>(&v)) { + SguidoNamedExpr ge = this; + p->visitEnd (ge); + } + else guidoexpression::acceptOut(v); +} + +//______________________________________________________________________________ +bool guidoNamedExpr::operator ==(const Sguidoexpression& elt) const +{ + SguidoNamedExpr e = dynamic_cast((guidoexpression*)elt); + Sguidoexpression named = getArg(0); + Sguidoexpression compareTo = e ? elt->getArg(0) : elt; + return *named == compareTo; +} + +} // namespace diff --git a/guidoar-dev/src/lang/expressions/guidoNamedExpr.h b/guidoar-dev/src/lang/expressions/guidoNamedExpr.h new file mode 100644 index 000000000..bb1fb2774 --- /dev/null +++ b/guidoar-dev/src/lang/expressions/guidoNamedExpr.h @@ -0,0 +1,57 @@ +/* + GUIDO Library + Copyright (C) 2006-2008 Grame + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + + Grame Research Laboratory, 9 rue du Garet, 69001 Lyon - France + research@grame.fr + +*/ + +#ifndef __guidoNamedExpr__ +#define __guidoNamedExpr__ + +#include "guidoexpression.h" +#include "guidoExprEnum.h" + +namespace guidolang +{ + +class guidoNamedExpr; +typedef guido::SMARTP SguidoNamedExpr; + +/*! +\brief abstraction expression. +*/ +class export guidoNamedExpr : public guidonode +{ + public: + static guido::SMARTP create() + { guidoNamedExpr* o = new guidoNamedExpr(); assert(o!=0); return o; } + + virtual void acceptIn(guido::basevisitor& visitor); + virtual void acceptOut(guido::basevisitor& visitor); + + virtual bool operator ==(const Sguidoexpression& i) const; + + protected: + guidoNamedExpr() : guidonode(kNamed) {} + virtual ~guidoNamedExpr() {} +}; + +} // namespace + +#endif diff --git a/guidoar-dev/src/lang/expressions/guidoScoreExpr.cpp b/guidoar-dev/src/lang/expressions/guidoScoreExpr.cpp new file mode 100644 index 000000000..1ce4c8a1d --- /dev/null +++ b/guidoar-dev/src/lang/expressions/guidoScoreExpr.cpp @@ -0,0 +1,82 @@ +/* + GUIDO Library + Copyright (C) 2006 Grame + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + + Grame Research Laboratory, 9 rue du Garet, 69001 Lyon - France + research@grame.fr + +*/ + +#include +#include + +#include "guidoNamedExpr.h" +#include "guidoScoreExpr.h" +#include "guidoScoreValue.h" +#include "normalizeOperation.h" +#include "visitor.h" + +using namespace std; +using namespace guido; + +namespace guidolang +{ + +//______________________________________________________________________________ +// guidoScoreExpr +//______________________________________________________________________________ +void guidoScoreExpr::acceptIn(basevisitor& v) { + if (visitor* p = dynamic_cast*>(&v)) { + SguidoScoreExpr ge = this; + p->visitStart (ge); + } + else guidoexpression::acceptIn(v); +} + +//______________________________________________________________________________ +void guidoScoreExpr::acceptOut(basevisitor& v) { + if (visitor* p = dynamic_cast*>(&v)) { + SguidoScoreExpr ge = this; + p->visitEnd (ge); + } + else guidoexpression::acceptOut(v); +} + +//______________________________________________________________________________ +void guidoScoreExpr::print(ostream& os) { + Sguidoelement score = getScore(); + if (score) os << getScore(); + else cerr << "warning: guidoScoreExpr with null score" << endl; +} + +//______________________________________________________________________________ +bool guidoScoreExpr::operator ==(const Sguidoexpression& elt) const +{ + SguidoNamedExpr e = dynamic_cast((guidoexpression*)elt); + if (e) return *this == e->getArg(0); + + SguidoScoreExpr score = dynamic_cast((guidoexpression*)elt); + if (!score) return false; + + // matching is made on normalized score and by comparing the resulting gmn strings + normalizeOperation norm; + stringstream scoreStr; scoreStr << norm( getScore() ); + stringstream eltStr; eltStr << norm( score->getScore() ); + return scoreStr.str() == eltStr.str(); +} + +} // namespace diff --git a/guidoar-dev/src/lang/expressions/guidoScoreExpr.h b/guidoar-dev/src/lang/expressions/guidoScoreExpr.h new file mode 100644 index 000000000..c73304b5e --- /dev/null +++ b/guidoar-dev/src/lang/expressions/guidoScoreExpr.h @@ -0,0 +1,64 @@ +/* + GUIDO Library + Copyright (C) 2006-2008 Grame + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + + Grame Research Laboratory, 9 rue du Garet, 69001 Lyon - France + research@grame.fr + +*/ + +#ifndef __guidoScoreExpr__ +#define __guidoScoreExpr__ + +#include "guidoexpression.h" +#include "guidoExprEnum.h" +#include "guidoelement.h" + +namespace guidolang +{ + +class guidoScoreExpr; +typedef guido::SMARTP SguidoScoreExpr; + +/*! +\brief abstraction expression. +*/ +class export guidoScoreExpr : public guidonode +{ + protected: + guido::Sguidoelement fScore; + + public: + static guido::SMARTP create(const guido::Sguidoelement& score) + { guidoScoreExpr* o = new guidoScoreExpr(score); assert(o!=0); return o; } + + const guido::Sguidoelement& getScore() const { return fScore; } + + virtual void acceptIn(guido::basevisitor& visitor); + virtual void acceptOut(guido::basevisitor& visitor); + virtual void print(std::ostream& os); + + virtual bool operator ==(const Sguidoexpression& i) const; + + protected: + guidoScoreExpr(const guido::Sguidoelement& score) : guidonode(kScore), fScore(score) {} + virtual ~guidoScoreExpr() {} +}; + +} // namespace + +#endif diff --git a/guidoar-dev/src/lang/expressions/guidoexpression.cpp b/guidoar-dev/src/lang/expressions/guidoexpression.cpp new file mode 100644 index 000000000..2d035fbc4 --- /dev/null +++ b/guidoar-dev/src/lang/expressions/guidoexpression.cpp @@ -0,0 +1,138 @@ +/* + GUIDO Library + Copyright (C) 2006 Grame + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + + Grame Research Laboratory, 9 rue du Garet, 69001 Lyon - France + research@grame.fr + +*/ + +#include + +#include "guidoexpression.h" +#include "guidoEnv.h" +#include "guidoEval.h" +#include "guidoExpPrinter.h" +#include "replaceVisitor.h" +#include "tree_browser.h" +#include "visitor.h" + +using namespace std; +using namespace guido; + +namespace guidolang +{ + +//______________________________________________________________________________ +// guidoexpression +//______________________________________________________________________________ +void guidoexpression::acceptIn(basevisitor& v) { + if (visitor* p = dynamic_cast*>(&v)) { + Sguidoexpression ge = this; + p->visitStart (ge); + } +} + +//______________________________________________________________________________ +Sguidoexpression guidoexpression::replace(const Sguidoexpression& exp, const Sguidoexpression& with) +{ + replaceVisitor rv; + Sguidoexpression e = rv.replace(this, exp, with); + return e; +} + +//______________________________________________________________________________ +Sguidovalue guidoexpression::eval(SguidoEnv env) +{ + guidoEval ev; + return ev.eval (this, env); +} + +/* +//______________________________________________________________________________ +Sguidovalue guidoexpression::suspend(SguidoEnv env) +{ + return guidoEvalSusp::create (this, env); +} +*/ + +//______________________________________________________________________________ +void guidoexpression::acceptOut(basevisitor& v) { + if (visitor* p = dynamic_cast*>(&v)) { + Sguidoexpression ge = this; + p->visitEnd (ge); + } +} + +//______________________________________________________________________________ +Sguidoexpression guidoexpression::getArg(unsigned int n) const { + ctree::const_literator i = lbegin(); + do { + if (i == lend()) break; + if (n == 0) return *i; + i++; + n--; + } while (n >= 0); + return 0; +} + +//______________________________________________________________________________ +void guidoexpression::basicprint(ostream& os) +{ + Sguidoexpression arg1 = getArg(0); + Sguidoexpression arg2 = getArg(1); + if (arg1) { + os << arg1; + if (arg2) + os << getName() << arg2; + } +} + +//______________________________________________________________________________ +void guidoexpression::print(ostream& os) +{ + switch (getType()) { + case kGrouped: + os << "(" << getArg(0) << ")"; + break; + case kAbstract: + os << "#"; + basicprint(os); + break; + case kNamed: + os << getName(); + break; + case kIdent: + os << getArg(0); + break; + default: + basicprint (os); + } +/* + guidoExpPrinter gev(os); + tree_browser browser(&gev); + browser.browse(*this); +*/ +} + +//______________________________________________________________________________ +ostream& operator << (ostream& os, const Sguidoexpression& elt) { + elt->print(os); + return os; +} + +} // namespace diff --git a/guidoar-dev/src/lang/expressions/guidoexpression.h b/guidoar-dev/src/lang/expressions/guidoexpression.h new file mode 100644 index 000000000..da5a00eb5 --- /dev/null +++ b/guidoar-dev/src/lang/expressions/guidoexpression.h @@ -0,0 +1,133 @@ +/* + GUIDO Library + Copyright (C) 2006-2008 Grame + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + + Grame Research Laboratory, 9 rue du Garet, 69001 Lyon - France + research@grame.fr + +*/ + +#ifndef __guidoexpression__ +#define __guidoexpression__ + +#include + +#include "export.h" +#include "ctree.h" +#include "functor.h" +#include "guidoExprEnum.h" +#include "gar_smartpointer.h" +#include "visitable.h" +#include "visitor.h" + +namespace guidolang +{ + +class guidoexpression; +class guidovalue; +class guidoEnv; + +typedef guido::SMARTP Sguidoexpression; +typedef guido::SMARTP Sguidovalue; +typedef guido::SMARTP SguidoEnv; + +//______________________________________________________________________________ +/*! +\brief The base class for guido language expressions. +*/ +class export guidoexpression : public guido::ctree, public guido::visitable +{ + protected: + std::string fName; + int fType; + + guidoexpression(int type) : fType(type) {} + virtual ~guidoexpression() {} + virtual void basicprint(std::ostream& os); + + public: + virtual const std::string& getName() const { return fName; } + virtual int getType() const { return fType; } + + virtual void acceptIn(guido::basevisitor& visitor); + virtual void acceptOut(guido::basevisitor& visitor); + virtual void print(std::ostream& os); + + virtual Sguidoexpression replace (const Sguidoexpression& exp, const Sguidoexpression& with); +// virtual Sguidovalue suspend(SguidoEnv env); + virtual Sguidovalue eval(SguidoEnv env); + + //________________________________________________________________________ + virtual Sguidoexpression getArg(unsigned int n) const; + virtual bool operator ==(const Sguidoexpression& i) const { return false; } + virtual bool operator !=(const Sguidoexpression& i) const { return !(*this == i); } + + void setName(const std::string& name) { fName = name; } +}; + +export std::ostream& operator << (std::ostream& os, const Sguidoexpression& elt); + +//______________________________________________________________________________ +/* +\brief A template class to type all guido expressions with integers. +*/ +template class guidonode : public guidoexpression +{ + public: + static guido::SMARTP > create() + { guidonode* o = new guidonode(elt); assert(o!=0); return o; } + + virtual void acceptIn(guido::basevisitor& v) { + if (guido::visitor > >* p = dynamic_cast > >*>(&v)) { + guido::SMARTP > sptr = this; + p->visitStart(sptr); + } + else guidoexpression::acceptIn(v); + } + virtual void acceptOut(guido::basevisitor& v) { + if (guido::visitor > >* p = dynamic_cast > >*>(&v)) { + guido::SMARTP > sptr = this; + p->visitEnd(sptr); + } + else guidoexpression::acceptOut(v); + } + + virtual bool operator ==(const Sguidoexpression& e) const { + if (e->getType() == kNamed) + return *this == e->getArg(0); + + if (dynamic_cast*>((guidoexpression*)(e))) { + for (int i=0; i < size(); i++) { + Sguidoexpression argi = getArg(i); + Sguidoexpression eargi = e->getArg(i); + if (!argi || !eargi || (argi != eargi)) + return false; + } + return true; + } + return false; + } + + protected: + guidonode(int type) : guidoexpression(type) {} + virtual ~guidonode() {} + +}; + +} // namespace + +#endif diff --git a/guidoar-dev/src/lang/guidoEnv.h b/guidoar-dev/src/lang/guidoEnv.h new file mode 100644 index 000000000..96dd9c763 --- /dev/null +++ b/guidoar-dev/src/lang/guidoEnv.h @@ -0,0 +1,85 @@ +/* + GUIDO Library + Copyright (C) 2006-2008 Grame + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + + Grame Research Laboratory, 9 rue du Garet, 69001 Lyon - France + research@grame.fr + +*/ + +#ifndef __guidoEnv__ +#define __guidoEnv__ + +#include + +#include "guidoexpression.h" +#include "guidovalue.h" +#include "gar_smartpointer.h" + +namespace guidolang +{ +/* +class guidoexpression; +typedef guido::SMARTP Sguidoexpression; +*/ +class guidoEnv; +typedef guido::SMARTP SguidoEnv; + +/*! +\brief The guido language environment definition. +*/ +class guidoEnv : public guido::smartable +{ + private: + typedef std::map Associations; + std::map fAssociations; + + protected: + guidoEnv() {} + guidoEnv(Sguidoexpression& e, Sguidovalue& v) { bind(e, v); } + virtual ~guidoEnv() {} + + public: + static SguidoEnv create() { guidoEnv * o = new guidoEnv(); assert(o!=0); return o; } + static SguidoEnv create(Sguidoexpression& e, Sguidovalue& v) + { guidoEnv * o = new guidoEnv(e, v); assert(o!=0); return o; } + + SguidoEnv bind (Sguidoexpression& e, Sguidovalue& v) { fAssociations[e] = v; return this; } + void clear() { fAssociations.clear(); } + int size() const { return fAssociations.size(); } + + Sguidovalue value(Sguidoexpression& e) { + std::pair i = fAssociations.equal_range(e); + if (i.first != i.second) return (*i.first).second; + return 0; + } + + void print(std::ostream& os) const { + os << "env size:" << size() << " : "; + Associations::const_iterator i = fAssociations.begin(); + while (i != fAssociations.end()) { + os << i->first << "(" << (void*)i->first << "):" << (void*)(i->second) << " "; + i++; + } + } +}; + +inline std::ostream& operator << (std::ostream& os, const SguidoEnv& env) { env->print(os); return os; } + +} // namespace + +#endif diff --git a/guidoar-dev/src/lang/parser/glang.l b/guidoar-dev/src/lang/parser/glang.l new file mode 100644 index 000000000..2253cb42b --- /dev/null +++ b/guidoar-dev/src/lang/parser/glang.l @@ -0,0 +1,62 @@ +%{ + +#include + +#define YY_NO_UNISTD_H + +static int nested; +static int chord; + +%} + +%option yylineno +%option never-interactive + +%x CMNTLN +%x COMMENT +%S SCORE + +DIGIT [0-9] +ID [a-z_A-Z][a-z_A-Z0-9]* +LETTER [a-zA-Z] +SPACE [ \t\x0a\x0d] +EOL [\x0a\x0d] +SCCHAR [^{}] + +%% + +"%" BEGIN CMNTLN; +"//" BEGIN CMNTLN; +.* +{EOL}+ BEGIN INITIAL; + +.|{EOL}* +"/*" nested++; +"*/" if (nested==0) { BEGIN INITIAL; } else { nested--; } +"/*" nested=0; BEGIN COMMENT; + +"(" return GROUPSTART; +")" return GROUPEND; +":" return SEQ; +"/" return PAR; +"-|" return HEAD; +"|-" return TAIL; +"-/" return TOP; +"/-" return BOTTOM; + +"@" return APPLY; +"#" return ABSTRACT; +"." return ASEP; +"=" return EQ; + +"{" chord++; yymore(); +"}" if (chord==0) { BEGIN INITIAL; return GMN; } else { chord--; yymore(); } +{EOL}* yymore(); +{SCCHAR}* yymore(); +"{" chord=0; yymore(); BEGIN SCORE; + +{ID} return IDENT; + +{SPACE}+ /* eat up space */ +. /* printf("glang extra text is : %s\n", yytext); */ + diff --git a/guidoar-dev/src/lang/parser/glang.y b/guidoar-dev/src/lang/parser/glang.y new file mode 100644 index 000000000..94f7f84ca --- /dev/null +++ b/guidoar-dev/src/lang/parser/glang.y @@ -0,0 +1,99 @@ +%{ + +#include +#include +#include "glangreader.h" + +#include "glangparse.hpp" +#include "glanglex.cpp" + +int glangerror(const char*s); + +//#define parseDebug +#ifdef parseDebug +#define debug(msg) std::cout << msg << " -" << glangtext << "-" << std::endl; +#else +#define debug(msg) +#endif + +#define clean(a,b,c) delete a; delete b; delete c + +extern guidolang::glangreader* gGLReader; +using namespace guidolang; + +%} + +//%pure_parser /* reentrancy support (but generates incorrect code) */ + +%start program + +%union { + SGLExpr* exprPtr; + std::string * strPtr; +} + +%type expr group +%type name op asep + +/*------------------------- tokens and precedence -----------------------*/ +%token GMN +%token GROUPSTART +%token GROUPEND +%token ASEP +%token EQ IDENT + +%left BOTTOM +%left TOP +%left TAIL +%left HEAD +%left PAR +%left SEQ +%left APPLY +%right ABSTRACT + +/* + there are actually 7 shift/reduce +*/ +%expect 7 + +%% + +//__________________________________________________________________________ +program : deflist { } + +deflist : name EQ expr { debug("ident expr"); gGLReader->newIDExpr($1->c_str(), $3); delete $1; delete $3; } + | deflist name EQ expr { debug("deflist..."); gGLReader->newIDExpr($2->c_str(), $4); delete $2; delete $4; } + + +expr : GMN { debug("score expr"); $$ = gGLReader->newScoreExpr(glangtext); + if (!$$) { glangerror("Error while parsing gmn code"); YYERROR; } } + | expr op expr { debug("op expr"); $$ = gGLReader->newBinaryExpr($2->c_str(),$1,$3); clean($1,$2,$3); } + | ABSTRACT expr asep expr { debug("abstract expr"); $$ = gGLReader->newAbstractExpr($3->c_str(),$2,$4); clean($2,$3,$4); } + | name { debug("named expr"); $$ = gGLReader->newNamedExpr($1->c_str()); delete $1; + if (!$$) { glangerror("Undefined named expression used"); YYERROR; } } + | group { debug("group expr"); $$ = gGLReader->newGroupExpr($1); delete $1; } + ; + +group : GROUPSTART expr GROUPEND { debug("group expr"); $$ = $2; } + +op : SEQ { debug("seq"); $$ = new std::string (glangtext); } + | PAR { debug("par"); $$ = new std::string (glangtext); } + | HEAD { debug("head"); $$ = new std::string (glangtext); } + | TAIL { debug("tail"); $$ = new std::string (glangtext); } + | TOP { debug("top"); $$ = new std::string (glangtext); } + | BOTTOM { debug("bottom"); $$ = new std::string (glangtext); } + | APPLY { debug("apply"); $$ = new std::string (glangtext); } + +asep : ASEP { debug("asep"); $$ = new std::string (glangtext); } +name : IDENT { debug("name"); $$ = new std::string (glangtext); } + +%% + +int glangwrap() { return(1); } + +int glangerror(const char* s) { + YY_FLUSH_BUFFER; + return gGLReader->error(s, glanglineno); + return 0; +} + diff --git a/guidoar-dev/src/lang/parser/glanglex.cpp b/guidoar-dev/src/lang/parser/glanglex.cpp new file mode 100644 index 000000000..fe950a726 --- /dev/null +++ b/guidoar-dev/src/lang/parser/glanglex.cpp @@ -0,0 +1,1939 @@ +#line 2 "glanglex.cpp" + +#line 4 "glanglex.cpp" + +#define YY_INT_ALIGNED short int + +/* A lexical scanner generated by flex */ + +#define FLEX_SCANNER +#define YY_FLEX_MAJOR_VERSION 2 +#define YY_FLEX_MINOR_VERSION 5 +#define YY_FLEX_SUBMINOR_VERSION 33 +#if YY_FLEX_SUBMINOR_VERSION > 0 +#define FLEX_BETA +#endif + +/* First, we deal with platform-specific or compiler-specific issues. */ + +/* begin standard C headers. */ +#include +#include +#include +#include + +/* end standard C headers. */ + +/* flex integer type definitions */ + +#ifndef FLEXINT_H +#define FLEXINT_H + +/* C99 systems have . Non-C99 systems may or may not. */ + +#if __STDC_VERSION__ >= 199901L + +/* C99 says to define __STDC_LIMIT_MACROS before including stdint.h, + * if you want the limit (max/min) macros for int types. + */ +#ifndef __STDC_LIMIT_MACROS +#define __STDC_LIMIT_MACROS 1 +#endif + +#include +typedef int8_t flex_int8_t; +typedef uint8_t flex_uint8_t; +typedef int16_t flex_int16_t; +typedef uint16_t flex_uint16_t; +typedef int32_t flex_int32_t; +typedef uint32_t flex_uint32_t; +#else +typedef signed char flex_int8_t; +typedef short int flex_int16_t; +typedef int flex_int32_t; +typedef unsigned char flex_uint8_t; +typedef unsigned short int flex_uint16_t; +typedef unsigned int flex_uint32_t; +#endif /* ! C99 */ + +/* Limits of integral types. */ +#ifndef INT8_MIN +#define INT8_MIN (-128) +#endif +#ifndef INT16_MIN +#define INT16_MIN (-32767-1) +#endif +#ifndef INT32_MIN +#define INT32_MIN (-2147483647-1) +#endif +#ifndef INT8_MAX +#define INT8_MAX (127) +#endif +#ifndef INT16_MAX +#define INT16_MAX (32767) +#endif +#ifndef INT32_MAX +#define INT32_MAX (2147483647) +#endif +#ifndef UINT8_MAX +#define UINT8_MAX (255U) +#endif +#ifndef UINT16_MAX +#define UINT16_MAX (65535U) +#endif +#ifndef UINT32_MAX +#define UINT32_MAX (4294967295U) +#endif + +#endif /* ! FLEXINT_H */ + +#ifdef __cplusplus + +/* The "const" storage-class-modifier is valid. */ +#define YY_USE_CONST + +#else /* ! __cplusplus */ + +#if __STDC__ + +#define YY_USE_CONST + +#endif /* __STDC__ */ +#endif /* ! __cplusplus */ + +#ifdef YY_USE_CONST +#define yyconst const +#else +#define yyconst +#endif + +/* Returned upon end-of-file. */ +#define YY_NULL 0 + +/* Promotes a possibly negative, possibly signed char to an unsigned + * integer for use as an array index. If the signed char is negative, + * we want to instead treat it as an 8-bit unsigned char, hence the + * double cast. + */ +#define YY_SC_TO_UI(c) ((unsigned int) (unsigned char) c) + +/* Enter a start condition. This macro really ought to take a parameter, + * but we do it the disgusting crufty way forced on us by the ()-less + * definition of BEGIN. + */ +#define BEGIN (yy_start) = 1 + 2 * + +/* Translate the current start state into a value that can be later handed + * to BEGIN to return to the state. The YYSTATE alias is for lex + * compatibility. + */ +#define YY_START (((yy_start) - 1) / 2) +#define YYSTATE YY_START + +/* Action number for EOF rule of a given start state. */ +#define YY_STATE_EOF(state) (YY_END_OF_BUFFER + state + 1) + +/* Special action meaning "start processing a new file". */ +#define YY_NEW_FILE glangrestart(glangin ) + +#define YY_END_OF_BUFFER_CHAR 0 + +/* Size of default input buffer. */ +#ifndef YY_BUF_SIZE +#define YY_BUF_SIZE 16384 +#endif + +/* The state buf must be large enough to hold one state per character in the main buffer. + */ +#define YY_STATE_BUF_SIZE ((YY_BUF_SIZE + 2) * sizeof(yy_state_type)) + +#ifndef YY_TYPEDEF_YY_BUFFER_STATE +#define YY_TYPEDEF_YY_BUFFER_STATE +typedef struct yy_buffer_state *YY_BUFFER_STATE; +#endif + +extern int glangleng; + +extern FILE *glangin, *glangout; + +#define EOB_ACT_CONTINUE_SCAN 0 +#define EOB_ACT_END_OF_FILE 1 +#define EOB_ACT_LAST_MATCH 2 + + /* Note: We specifically omit the test for yy_rule_can_match_eol because it requires + * access to the local variable yy_act. Since yyless() is a macro, it would break + * existing scanners that call yyless() from OUTSIDE glanglex. + * One obvious solution it to make yy_act a global. I tried that, and saw + * a 5% performance hit in a non-glanglineno scanner, because yy_act is + * normally declared as a register variable-- so it is not worth it. + */ + #define YY_LESS_LINENO(n) \ + do { \ + int yyl;\ + for ( yyl = n; yyl < glangleng; ++yyl )\ + if ( glangtext[yyl] == '\n' )\ + --glanglineno;\ + }while(0) + +/* Return all but the first "n" matched characters back to the input stream. */ +#define yyless(n) \ + do \ + { \ + /* Undo effects of setting up glangtext. */ \ + int yyless_macro_arg = (n); \ + YY_LESS_LINENO(yyless_macro_arg);\ + *yy_cp = (yy_hold_char); \ + YY_RESTORE_YY_MORE_OFFSET \ + (yy_c_buf_p) = yy_cp = yy_bp + yyless_macro_arg - YY_MORE_ADJ; \ + YY_DO_BEFORE_ACTION; /* set up glangtext again */ \ + } \ + while ( 0 ) + +#define unput(c) yyunput( c, (yytext_ptr) ) + +/* The following is because we cannot portably get our hands on size_t + * (without autoconf's help, which isn't available because we want + * flex-generated scanners to compile on their own). + */ + +#ifndef YY_TYPEDEF_YY_SIZE_T +#define YY_TYPEDEF_YY_SIZE_T +typedef unsigned int yy_size_t; +#endif + +#ifndef YY_STRUCT_YY_BUFFER_STATE +#define YY_STRUCT_YY_BUFFER_STATE +struct yy_buffer_state + { + FILE *yy_input_file; + + char *yy_ch_buf; /* input buffer */ + char *yy_buf_pos; /* current position in input buffer */ + + /* Size of input buffer in bytes, not including room for EOB + * characters. + */ + yy_size_t yy_buf_size; + + /* Number of characters read into yy_ch_buf, not including EOB + * characters. + */ + int yy_n_chars; + + /* Whether we "own" the buffer - i.e., we know we created it, + * and can realloc() it to grow it, and should free() it to + * delete it. + */ + int yy_is_our_buffer; + + /* Whether this is an "interactive" input source; if so, and + * if we're using stdio for input, then we want to use getc() + * instead of fread(), to make sure we stop fetching input after + * each newline. + */ + int yy_is_interactive; + + /* Whether we're considered to be at the beginning of a line. + * If so, '^' rules will be active on the next match, otherwise + * not. + */ + int yy_at_bol; + + int yy_bs_lineno; /**< The line count. */ + int yy_bs_column; /**< The column count. */ + + /* Whether to try to fill the input buffer when we reach the + * end of it. + */ + int yy_fill_buffer; + + int yy_buffer_status; + +#define YY_BUFFER_NEW 0 +#define YY_BUFFER_NORMAL 1 + /* When an EOF's been seen but there's still some text to process + * then we mark the buffer as YY_EOF_PENDING, to indicate that we + * shouldn't try reading from the input source any more. We might + * still have a bunch of tokens to match, though, because of + * possible backing-up. + * + * When we actually see the EOF, we change the status to "new" + * (via glangrestart()), so that the user can continue scanning by + * just pointing glangin at a new input file. + */ +#define YY_BUFFER_EOF_PENDING 2 + + }; +#endif /* !YY_STRUCT_YY_BUFFER_STATE */ + +/* Stack of input buffers. */ +static size_t yy_buffer_stack_top = 0; /**< index of top of stack. */ +static size_t yy_buffer_stack_max = 0; /**< capacity of stack. */ +static YY_BUFFER_STATE * yy_buffer_stack = 0; /**< Stack as an array. */ + +/* We provide macros for accessing buffer states in case in the + * future we want to put the buffer states in a more general + * "scanner state". + * + * Returns the top of the stack, or NULL. + */ +#define YY_CURRENT_BUFFER ( (yy_buffer_stack) \ + ? (yy_buffer_stack)[(yy_buffer_stack_top)] \ + : NULL) + +/* Same as previous macro, but useful when we know that the buffer stack is not + * NULL or when we need an lvalue. For internal use only. + */ +#define YY_CURRENT_BUFFER_LVALUE (yy_buffer_stack)[(yy_buffer_stack_top)] + +/* yy_hold_char holds the character lost when glangtext is formed. */ +static char yy_hold_char; +static int yy_n_chars; /* number of characters read into yy_ch_buf */ +int glangleng; + +/* Points to current character in buffer. */ +static char *yy_c_buf_p = (char *) 0; +static int yy_init = 0; /* whether we need to initialize */ +static int yy_start = 0; /* start state number */ + +/* Flag which is used to allow glangwrap()'s to do buffer switches + * instead of setting up a fresh glangin. A bit of a hack ... + */ +static int yy_did_buffer_switch_on_eof; + +void glangrestart (FILE *input_file ); +void glang_switch_to_buffer (YY_BUFFER_STATE new_buffer ); +YY_BUFFER_STATE glang_create_buffer (FILE *file,int size ); +void glang_delete_buffer (YY_BUFFER_STATE b ); +void glang_flush_buffer (YY_BUFFER_STATE b ); +void glangpush_buffer_state (YY_BUFFER_STATE new_buffer ); +void glangpop_buffer_state (void ); + +static void glangensure_buffer_stack (void ); +static void glang_load_buffer_state (void ); +static void glang_init_buffer (YY_BUFFER_STATE b,FILE *file ); + +#define YY_FLUSH_BUFFER glang_flush_buffer(YY_CURRENT_BUFFER ) + +YY_BUFFER_STATE glang_scan_buffer (char *base,yy_size_t size ); +YY_BUFFER_STATE glang_scan_string (yyconst char *yy_str ); +YY_BUFFER_STATE glang_scan_bytes (yyconst char *bytes,int len ); + +void *glangalloc (yy_size_t ); +void *glangrealloc (void *,yy_size_t ); +void glangfree (void * ); + +#define yy_new_buffer glang_create_buffer + +#define yy_set_interactive(is_interactive) \ + { \ + if ( ! YY_CURRENT_BUFFER ){ \ + glangensure_buffer_stack (); \ + YY_CURRENT_BUFFER_LVALUE = \ + glang_create_buffer(glangin,YY_BUF_SIZE ); \ + } \ + YY_CURRENT_BUFFER_LVALUE->yy_is_interactive = is_interactive; \ + } + +#define yy_set_bol(at_bol) \ + { \ + if ( ! YY_CURRENT_BUFFER ){\ + glangensure_buffer_stack (); \ + YY_CURRENT_BUFFER_LVALUE = \ + glang_create_buffer(glangin,YY_BUF_SIZE ); \ + } \ + YY_CURRENT_BUFFER_LVALUE->yy_at_bol = at_bol; \ + } + +#define YY_AT_BOL() (YY_CURRENT_BUFFER_LVALUE->yy_at_bol) + +typedef unsigned char YY_CHAR; + +FILE *glangin = (FILE *) 0, *glangout = (FILE *) 0; + +typedef int yy_state_type; + +extern int glanglineno; + +int glanglineno = 1; + +extern char *glangtext; +#define yytext_ptr glangtext + +static yy_state_type yy_get_previous_state (void ); +static yy_state_type yy_try_NUL_trans (yy_state_type current_state ); +static int yy_get_next_buffer (void ); +static void yy_fatal_error (yyconst char msg[] ); + +/* Done after the current pattern has been matched and before the + * corresponding action - sets up glangtext. + */ +#define YY_DO_BEFORE_ACTION \ + (yytext_ptr) = yy_bp; \ + (yytext_ptr) -= (yy_more_len); \ + glangleng = (size_t) (yy_cp - (yytext_ptr)); \ + (yy_hold_char) = *yy_cp; \ + *yy_cp = '\0'; \ + (yy_c_buf_p) = yy_cp; + +#define YY_NUM_RULES 29 +#define YY_END_OF_BUFFER 30 +/* This struct is not used in this scanner, + but its presence is necessary. */ +struct yy_trans_info + { + flex_int32_t yy_verify; + flex_int32_t yy_nxt; + }; +static yyconst flex_int16_t yy_accept[76] = + { 0, + 0, 0, 3, 3, 5, 5, 23, 23, 30, 28, + 27, 27, 18, 1, 9, 10, 28, 19, 12, 11, + 20, 17, 26, 25, 28, 3, 4, 3, 5, 5, + 5, 5, 24, 24, 23, 23, 18, 1, 9, 10, + 24, 19, 12, 11, 20, 17, 24, 21, 24, 22, + 27, 15, 13, 8, 16, 2, 26, 14, 3, 4, + 3, 5, 7, 6, 24, 24, 23, 15, 13, 8, + 16, 2, 24, 14, 0 + } ; + +static yyconst flex_int32_t yy_ec[256] = + { 0, + 1, 1, 1, 1, 1, 1, 1, 1, 2, 3, + 1, 1, 4, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 2, 1, 1, 5, 1, 6, 1, 1, 7, + 8, 9, 1, 1, 10, 11, 12, 13, 13, 13, + 13, 13, 13, 13, 13, 13, 13, 14, 1, 1, + 15, 1, 1, 16, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 1, 1, 1, 1, 17, 1, 17, 17, 17, 17, + + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 18, 19, 20, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1 + } ; + +static yyconst flex_int32_t yy_meta[21] = + { 0, + 1, 2, 3, 2, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 4, 1, 4 + } ; + +static yyconst flex_int16_t yy_base[81] = + { 0, + 0, 0, 18, 20, 22, 32, 44, 0, 86, 124, + 0, 0, 124, 124, 124, 124, 18, 124, 30, 124, + 124, 124, 15, 124, 73, 0, 62, 64, 124, 66, + 31, 29, 0, 69, 72, 75, 0, 0, 0, 0, + 68, 0, 72, 0, 0, 0, 16, 124, 17, 124, + 0, 124, 124, 124, 124, 124, 72, 124, 0, 87, + 89, 91, 124, 124, 0, 94, 97, 0, 0, 0, + 0, 0, 89, 0, 124, 106, 110, 113, 116, 120 + } ; + +static yyconst flex_int16_t yy_def[81] = + { 0, + 75, 1, 76, 76, 77, 77, 75, 7, 75, 75, + 78, 78, 75, 75, 75, 75, 75, 75, 75, 75, + 75, 75, 75, 75, 75, 79, 75, 79, 75, 75, + 75, 75, 80, 80, 80, 80, 80, 80, 80, 80, + 80, 80, 80, 80, 80, 80, 80, 75, 80, 75, + 78, 75, 75, 75, 75, 75, 75, 75, 79, 75, + 79, 75, 75, 75, 80, 80, 80, 80, 80, 80, + 80, 80, 80, 80, 0, 75, 75, 75, 75, 75 + } ; + +static yyconst flex_int16_t yy_nxt[145] = + { 0, + 10, 11, 12, 11, 13, 14, 15, 16, 10, 17, + 18, 19, 10, 20, 21, 22, 23, 24, 25, 10, + 27, 28, 27, 28, 30, 30, 74, 57, 73, 52, + 31, 57, 73, 32, 30, 30, 53, 64, 54, 55, + 31, 56, 63, 32, 33, 34, 35, 36, 37, 38, + 39, 40, 33, 41, 42, 43, 33, 44, 45, 46, + 47, 48, 49, 50, 60, 60, 60, 61, 62, 62, + 66, 66, 66, 66, 67, 67, 66, 67, 67, 68, + 70, 71, 58, 72, 57, 75, 69, 75, 57, 60, + 60, 60, 61, 62, 62, 66, 66, 66, 66, 67, + + 67, 73, 75, 75, 75, 73, 26, 26, 26, 26, + 29, 29, 29, 29, 51, 51, 59, 59, 75, 59, + 65, 65, 65, 9, 75, 75, 75, 75, 75, 75, + 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, + 75, 75, 75, 75 + } ; + +static yyconst flex_int16_t yy_chk[145] = + { 0, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 3, 3, 4, 4, 5, 5, 49, 23, 47, 17, + 5, 23, 47, 5, 6, 6, 17, 32, 19, 19, + 6, 19, 31, 6, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 27, 27, 28, 28, 30, 30, + 34, 34, 34, 35, 35, 35, 36, 36, 36, 41, + 43, 43, 25, 43, 57, 9, 41, 0, 57, 60, + 60, 61, 61, 62, 62, 66, 66, 66, 67, 67, + + 67, 73, 0, 0, 0, 73, 76, 76, 76, 76, + 77, 77, 77, 77, 78, 78, 79, 79, 0, 79, + 80, 80, 80, 75, 75, 75, 75, 75, 75, 75, + 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, + 75, 75, 75, 75 + } ; + +/* Table of booleans, true if rule could match eol. */ +static yyconst flex_int32_t yy_rule_can_match_eol[30] = + { 0, +0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 1, 1, 0, 0, 1, 0, 0, }; + +static yy_state_type yy_last_accepting_state; +static char *yy_last_accepting_cpos; + +extern int glang_flex_debug; +int glang_flex_debug = 0; + +/* The intent behind this definition is that it'll catch + * any uses of REJECT which flex missed. + */ +#define REJECT reject_used_but_not_detected +static int yy_more_flag = 0; +static int yy_more_len = 0; +#define yymore() ((yy_more_flag) = 1) +#define YY_MORE_ADJ (yy_more_len) +#define YY_RESTORE_YY_MORE_OFFSET +char *glangtext; +#line 1 "glang.l" +#line 2 "glang.l" + +#include + +#define YY_NO_UNISTD_H + +static int nested; +static int chord; + + + + +#line 538 "glanglex.cpp" + +#define INITIAL 0 +#define CMNTLN 1 +#define COMMENT 2 +#define SCORE 3 + +#ifndef YY_NO_UNISTD_H +/* Special case for "unistd.h", since it is non-ANSI. We include it way + * down here because we want the user's section 1 to have been scanned first. + * The user has a chance to override it with an option. + */ +#include +#endif + +#ifndef YY_EXTRA_TYPE +#define YY_EXTRA_TYPE void * +#endif + +static int yy_init_globals (void ); + +/* Macros after this point can all be overridden by user definitions in + * section 1. + */ + +#ifndef YY_SKIP_YYWRAP +#ifdef __cplusplus +extern "C" int glangwrap (void ); +#else +extern int glangwrap (void ); +#endif +#endif + + static void yyunput (int c,char *buf_ptr ); + +#ifndef yytext_ptr +static void yy_flex_strncpy (char *,yyconst char *,int ); +#endif + +#ifdef YY_NEED_STRLEN +static int yy_flex_strlen (yyconst char * ); +#endif + +#ifndef YY_NO_INPUT + +#ifdef __cplusplus +static int yyinput (void ); +#else +static int input (void ); +#endif + +#endif + +/* Amount of stuff to slurp up with each read. */ +#ifndef YY_READ_BUF_SIZE +#define YY_READ_BUF_SIZE 8192 +#endif + +/* Copy whatever the last rule matched to the standard output. */ +#ifndef ECHO +/* This used to be an fputs(), but since the string might contain NUL's, + * we now use fwrite(). + */ +#define ECHO (void) fwrite( glangtext, glangleng, 1, glangout ) +#endif + +/* Gets input and stuffs it into "buf". number of characters read, or YY_NULL, + * is returned in "result". + */ +#ifndef YY_INPUT +#define YY_INPUT(buf,result,max_size) \ + if ( YY_CURRENT_BUFFER_LVALUE->yy_is_interactive ) \ + { \ + int c = '*'; \ + size_t n; \ + for ( n = 0; n < max_size && \ + (c = getc( glangin )) != EOF && c != '\n'; ++n ) \ + buf[n] = (char) c; \ + if ( c == '\n' ) \ + buf[n++] = (char) c; \ + if ( c == EOF && ferror( glangin ) ) \ + YY_FATAL_ERROR( "input in flex scanner failed" ); \ + result = n; \ + } \ + else \ + { \ + errno=0; \ + while ( (result = fread(buf, 1, max_size, glangin))==0 && ferror(glangin)) \ + { \ + if( errno != EINTR) \ + { \ + YY_FATAL_ERROR( "input in flex scanner failed" ); \ + break; \ + } \ + errno=0; \ + clearerr(glangin); \ + } \ + }\ +\ + +#endif + +/* No semi-colon after return; correct usage is to write "yyterminate();" - + * we don't want an extra ';' after the "return" because that will cause + * some compilers to complain about unreachable statements. + */ +#ifndef yyterminate +#define yyterminate() return YY_NULL +#endif + +/* Number of entries by which start-condition stack grows. */ +#ifndef YY_START_STACK_INCR +#define YY_START_STACK_INCR 25 +#endif + +/* Report a fatal error. */ +#ifndef YY_FATAL_ERROR +#define YY_FATAL_ERROR(msg) yy_fatal_error( msg ) +#endif + +/* end tables serialization structures and prototypes */ + +/* Default declaration of generated scanner - a define so the user can + * easily add parameters. + */ +#ifndef YY_DECL +#define YY_DECL_IS_OURS 1 + +extern int glanglex (void); + +#define YY_DECL int glanglex (void) +#endif /* !YY_DECL */ + +/* Code executed at the beginning of each rule, after glangtext and glangleng + * have been set up. + */ +#ifndef YY_USER_ACTION +#define YY_USER_ACTION +#endif + +/* Code executed at the end of each rule. */ +#ifndef YY_BREAK +#define YY_BREAK break; +#endif + +#define YY_RULE_SETUP \ + YY_USER_ACTION + +/** The main scanner function which does all the work. + */ +YY_DECL +{ + register yy_state_type yy_current_state; + register char *yy_cp, *yy_bp; + register int yy_act; + +#line 26 "glang.l" + + +#line 697 "glanglex.cpp" + + if ( !(yy_init) ) + { + (yy_init) = 1; + +#ifdef YY_USER_INIT + YY_USER_INIT; +#endif + + if ( ! (yy_start) ) + (yy_start) = 1; /* first start state */ + + if ( ! glangin ) + glangin = stdin; + + if ( ! glangout ) + glangout = stdout; + + if ( ! YY_CURRENT_BUFFER ) { + glangensure_buffer_stack (); + YY_CURRENT_BUFFER_LVALUE = + glang_create_buffer(glangin,YY_BUF_SIZE ); + } + + glang_load_buffer_state( ); + } + + while ( 1 ) /* loops until end-of-file is reached */ + { + (yy_more_len) = 0; + if ( (yy_more_flag) ) + { + (yy_more_len) = (yy_c_buf_p) - (yytext_ptr); + (yy_more_flag) = 0; + } + yy_cp = (yy_c_buf_p); + + /* Support of glangtext. */ + *yy_cp = (yy_hold_char); + + /* yy_bp points to the position in yy_ch_buf of the start of + * the current run. + */ + yy_bp = yy_cp; + + yy_current_state = (yy_start); +yy_match: + do + { + register YY_CHAR yy_c = yy_ec[YY_SC_TO_UI(*yy_cp)]; + if ( yy_accept[yy_current_state] ) + { + (yy_last_accepting_state) = yy_current_state; + (yy_last_accepting_cpos) = yy_cp; + } + while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state ) + { + yy_current_state = (int) yy_def[yy_current_state]; + if ( yy_current_state >= 76 ) + yy_c = yy_meta[(unsigned int) yy_c]; + } + yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c]; + ++yy_cp; + } + while ( yy_current_state != 75 ); + yy_cp = (yy_last_accepting_cpos); + yy_current_state = (yy_last_accepting_state); + +yy_find_action: + yy_act = yy_accept[yy_current_state]; + + YY_DO_BEFORE_ACTION; + + if ( yy_act != YY_END_OF_BUFFER && yy_rule_can_match_eol[yy_act] ) + { + int yyl; + for ( yyl = (yy_more_len); yyl < glangleng; ++yyl ) + if ( glangtext[yyl] == '\n' ) + + glanglineno++; +; + } + +do_action: /* This label is used only to access EOF actions. */ + + switch ( yy_act ) + { /* beginning of action switch */ + case 0: /* must back up */ + /* undo the effects of YY_DO_BEFORE_ACTION */ + *yy_cp = (yy_hold_char); + yy_cp = (yy_last_accepting_cpos); + yy_current_state = (yy_last_accepting_state); + goto yy_find_action; + +case 1: +YY_RULE_SETUP +#line 28 "glang.l" +BEGIN CMNTLN; + YY_BREAK +case 2: +YY_RULE_SETUP +#line 29 "glang.l" +BEGIN CMNTLN; + YY_BREAK +case 3: +YY_RULE_SETUP +#line 30 "glang.l" + + YY_BREAK +case 4: +/* rule 4 can match eol */ +YY_RULE_SETUP +#line 31 "glang.l" +BEGIN INITIAL; + YY_BREAK +case 5: +/* rule 5 can match eol */ +YY_RULE_SETUP +#line 33 "glang.l" + + YY_BREAK +case 6: +YY_RULE_SETUP +#line 34 "glang.l" +nested++; + YY_BREAK +case 7: +YY_RULE_SETUP +#line 35 "glang.l" +if (nested==0) { BEGIN INITIAL; } else { nested--; } + YY_BREAK +case 8: +YY_RULE_SETUP +#line 36 "glang.l" +nested=0; BEGIN COMMENT; + YY_BREAK +case 9: +YY_RULE_SETUP +#line 38 "glang.l" +return GROUPSTART; + YY_BREAK +case 10: +YY_RULE_SETUP +#line 39 "glang.l" +return GROUPEND; + YY_BREAK +case 11: +YY_RULE_SETUP +#line 40 "glang.l" +return SEQ; + YY_BREAK +case 12: +YY_RULE_SETUP +#line 41 "glang.l" +return PAR; + YY_BREAK +case 13: +YY_RULE_SETUP +#line 42 "glang.l" +return HEAD; + YY_BREAK +case 14: +YY_RULE_SETUP +#line 43 "glang.l" +return TAIL; + YY_BREAK +case 15: +YY_RULE_SETUP +#line 44 "glang.l" +return TOP; + YY_BREAK +case 16: +YY_RULE_SETUP +#line 45 "glang.l" +return BOTTOM; + YY_BREAK +case 17: +YY_RULE_SETUP +#line 47 "glang.l" +return APPLY; + YY_BREAK +case 18: +YY_RULE_SETUP +#line 48 "glang.l" +return ABSTRACT; + YY_BREAK +case 19: +YY_RULE_SETUP +#line 49 "glang.l" +return ASEP; + YY_BREAK +case 20: +YY_RULE_SETUP +#line 50 "glang.l" +return EQ; + YY_BREAK +case 21: +YY_RULE_SETUP +#line 52 "glang.l" +chord++; yymore(); + YY_BREAK +case 22: +YY_RULE_SETUP +#line 53 "glang.l" +if (chord==0) { BEGIN INITIAL; return GMN; } else { chord--; yymore(); } + YY_BREAK +case 23: +/* rule 23 can match eol */ +YY_RULE_SETUP +#line 54 "glang.l" +yymore(); + YY_BREAK +case 24: +/* rule 24 can match eol */ +YY_RULE_SETUP +#line 55 "glang.l" +yymore(); + YY_BREAK +case 25: +YY_RULE_SETUP +#line 56 "glang.l" +chord=0; yymore(); BEGIN SCORE; + YY_BREAK +case 26: +YY_RULE_SETUP +#line 58 "glang.l" +return IDENT; + YY_BREAK +case 27: +/* rule 27 can match eol */ +YY_RULE_SETUP +#line 60 "glang.l" +/* eat up space */ + YY_BREAK +case 28: +YY_RULE_SETUP +#line 61 "glang.l" +/* printf("glang extra text is : %s\n", glangtext); */ + YY_BREAK +case 29: +YY_RULE_SETUP +#line 63 "glang.l" +ECHO; + YY_BREAK +#line 942 "glanglex.cpp" +case YY_STATE_EOF(INITIAL): +case YY_STATE_EOF(CMNTLN): +case YY_STATE_EOF(COMMENT): +case YY_STATE_EOF(SCORE): + yyterminate(); + + case YY_END_OF_BUFFER: + { + /* Amount of text matched not including the EOB char. */ + int yy_amount_of_matched_text = (int) (yy_cp - (yytext_ptr)) - 1; + + /* Undo the effects of YY_DO_BEFORE_ACTION. */ + *yy_cp = (yy_hold_char); + YY_RESTORE_YY_MORE_OFFSET + + if ( YY_CURRENT_BUFFER_LVALUE->yy_buffer_status == YY_BUFFER_NEW ) + { + /* We're scanning a new file or input source. It's + * possible that this happened because the user + * just pointed glangin at a new source and called + * glanglex(). If so, then we have to assure + * consistency between YY_CURRENT_BUFFER and our + * globals. Here is the right place to do so, because + * this is the first action (other than possibly a + * back-up) that will match for the new input source. + */ + (yy_n_chars) = YY_CURRENT_BUFFER_LVALUE->yy_n_chars; + YY_CURRENT_BUFFER_LVALUE->yy_input_file = glangin; + YY_CURRENT_BUFFER_LVALUE->yy_buffer_status = YY_BUFFER_NORMAL; + } + + /* Note that here we test for yy_c_buf_p "<=" to the position + * of the first EOB in the buffer, since yy_c_buf_p will + * already have been incremented past the NUL character + * (since all states make transitions on EOB to the + * end-of-buffer state). Contrast this with the test + * in input(). + */ + if ( (yy_c_buf_p) <= &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars)] ) + { /* This was really a NUL. */ + yy_state_type yy_next_state; + + (yy_c_buf_p) = (yytext_ptr) + yy_amount_of_matched_text; + + yy_current_state = yy_get_previous_state( ); + + /* Okay, we're now positioned to make the NUL + * transition. We couldn't have + * yy_get_previous_state() go ahead and do it + * for us because it doesn't know how to deal + * with the possibility of jamming (and we don't + * want to build jamming into it because then it + * will run more slowly). + */ + + yy_next_state = yy_try_NUL_trans( yy_current_state ); + + yy_bp = (yytext_ptr) + YY_MORE_ADJ; + + if ( yy_next_state ) + { + /* Consume the NUL. */ + yy_cp = ++(yy_c_buf_p); + yy_current_state = yy_next_state; + goto yy_match; + } + + else + { + yy_cp = (yy_last_accepting_cpos); + yy_current_state = (yy_last_accepting_state); + goto yy_find_action; + } + } + + else switch ( yy_get_next_buffer( ) ) + { + case EOB_ACT_END_OF_FILE: + { + (yy_did_buffer_switch_on_eof) = 0; + + if ( glangwrap( ) ) + { + /* Note: because we've taken care in + * yy_get_next_buffer() to have set up + * glangtext, we can now set up + * yy_c_buf_p so that if some total + * hoser (like flex itself) wants to + * call the scanner after we return the + * YY_NULL, it'll still work - another + * YY_NULL will get returned. + */ + (yy_c_buf_p) = (yytext_ptr) + YY_MORE_ADJ; + + yy_act = YY_STATE_EOF(YY_START); + goto do_action; + } + + else + { + if ( ! (yy_did_buffer_switch_on_eof) ) + YY_NEW_FILE; + } + break; + } + + case EOB_ACT_CONTINUE_SCAN: + (yy_c_buf_p) = + (yytext_ptr) + yy_amount_of_matched_text; + + yy_current_state = yy_get_previous_state( ); + + yy_cp = (yy_c_buf_p); + yy_bp = (yytext_ptr) + YY_MORE_ADJ; + goto yy_match; + + case EOB_ACT_LAST_MATCH: + (yy_c_buf_p) = + &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars)]; + + yy_current_state = yy_get_previous_state( ); + + yy_cp = (yy_c_buf_p); + yy_bp = (yytext_ptr) + YY_MORE_ADJ; + goto yy_find_action; + } + break; + } + + default: + YY_FATAL_ERROR( + "fatal flex scanner internal error--no action found" ); + } /* end of action switch */ + } /* end of scanning one token */ +} /* end of glanglex */ + +/* yy_get_next_buffer - try to read in a new buffer + * + * Returns a code representing an action: + * EOB_ACT_LAST_MATCH - + * EOB_ACT_CONTINUE_SCAN - continue scanning from current position + * EOB_ACT_END_OF_FILE - end of file + */ +static int yy_get_next_buffer (void) +{ + register char *dest = YY_CURRENT_BUFFER_LVALUE->yy_ch_buf; + register char *source = (yytext_ptr); + register int number_to_move, i; + int ret_val; + + if ( (yy_c_buf_p) > &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars) + 1] ) + YY_FATAL_ERROR( + "fatal flex scanner internal error--end of buffer missed" ); + + if ( YY_CURRENT_BUFFER_LVALUE->yy_fill_buffer == 0 ) + { /* Don't try to fill the buffer, so this is an EOF. */ + if ( (yy_c_buf_p) - (yytext_ptr) - YY_MORE_ADJ == 1 ) + { + /* We matched a single character, the EOB, so + * treat this as a final EOF. + */ + return EOB_ACT_END_OF_FILE; + } + + else + { + /* We matched some text prior to the EOB, first + * process it. + */ + return EOB_ACT_LAST_MATCH; + } + } + + /* Try to read more data. */ + + /* First move last chars to start of buffer. */ + number_to_move = (int) ((yy_c_buf_p) - (yytext_ptr)) - 1; + + for ( i = 0; i < number_to_move; ++i ) + *(dest++) = *(source++); + + if ( YY_CURRENT_BUFFER_LVALUE->yy_buffer_status == YY_BUFFER_EOF_PENDING ) + /* don't do the read, it's not guaranteed to return an EOF, + * just force an EOF + */ + YY_CURRENT_BUFFER_LVALUE->yy_n_chars = (yy_n_chars) = 0; + + else + { + int num_to_read = + YY_CURRENT_BUFFER_LVALUE->yy_buf_size - number_to_move - 1; + + while ( num_to_read <= 0 ) + { /* Not enough room in the buffer - grow it. */ + + /* just a shorter name for the current buffer */ + YY_BUFFER_STATE b = YY_CURRENT_BUFFER; + + int yy_c_buf_p_offset = + (int) ((yy_c_buf_p) - b->yy_ch_buf); + + if ( b->yy_is_our_buffer ) + { + int new_size = b->yy_buf_size * 2; + + if ( new_size <= 0 ) + b->yy_buf_size += b->yy_buf_size / 8; + else + b->yy_buf_size *= 2; + + b->yy_ch_buf = (char *) + /* Include room in for 2 EOB chars. */ + glangrealloc((void *) b->yy_ch_buf,b->yy_buf_size + 2 ); + } + else + /* Can't grow it, we don't own it. */ + b->yy_ch_buf = 0; + + if ( ! b->yy_ch_buf ) + YY_FATAL_ERROR( + "fatal error - scanner input buffer overflow" ); + + (yy_c_buf_p) = &b->yy_ch_buf[yy_c_buf_p_offset]; + + num_to_read = YY_CURRENT_BUFFER_LVALUE->yy_buf_size - + number_to_move - 1; + + } + + if ( num_to_read > YY_READ_BUF_SIZE ) + num_to_read = YY_READ_BUF_SIZE; + + /* Read in more data. */ + YY_INPUT( (&YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[number_to_move]), + (yy_n_chars), num_to_read ); + + YY_CURRENT_BUFFER_LVALUE->yy_n_chars = (yy_n_chars); + } + + if ( (yy_n_chars) == 0 ) + { + if ( number_to_move == YY_MORE_ADJ ) + { + ret_val = EOB_ACT_END_OF_FILE; + glangrestart(glangin ); + } + + else + { + ret_val = EOB_ACT_LAST_MATCH; + YY_CURRENT_BUFFER_LVALUE->yy_buffer_status = + YY_BUFFER_EOF_PENDING; + } + } + + else + ret_val = EOB_ACT_CONTINUE_SCAN; + + (yy_n_chars) += number_to_move; + YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars)] = YY_END_OF_BUFFER_CHAR; + YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars) + 1] = YY_END_OF_BUFFER_CHAR; + + (yytext_ptr) = &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[0]; + + return ret_val; +} + +/* yy_get_previous_state - get the state just before the EOB char was reached */ + + static yy_state_type yy_get_previous_state (void) +{ + register yy_state_type yy_current_state; + register char *yy_cp; + + yy_current_state = (yy_start); + + for ( yy_cp = (yytext_ptr) + YY_MORE_ADJ; yy_cp < (yy_c_buf_p); ++yy_cp ) + { + register YY_CHAR yy_c = (*yy_cp ? yy_ec[YY_SC_TO_UI(*yy_cp)] : 1); + if ( yy_accept[yy_current_state] ) + { + (yy_last_accepting_state) = yy_current_state; + (yy_last_accepting_cpos) = yy_cp; + } + while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state ) + { + yy_current_state = (int) yy_def[yy_current_state]; + if ( yy_current_state >= 76 ) + yy_c = yy_meta[(unsigned int) yy_c]; + } + yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c]; + } + + return yy_current_state; +} + +/* yy_try_NUL_trans - try to make a transition on the NUL character + * + * synopsis + * next_state = yy_try_NUL_trans( current_state ); + */ + static yy_state_type yy_try_NUL_trans (yy_state_type yy_current_state ) +{ + register int yy_is_jam; + register char *yy_cp = (yy_c_buf_p); + + register YY_CHAR yy_c = 1; + if ( yy_accept[yy_current_state] ) + { + (yy_last_accepting_state) = yy_current_state; + (yy_last_accepting_cpos) = yy_cp; + } + while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state ) + { + yy_current_state = (int) yy_def[yy_current_state]; + if ( yy_current_state >= 76 ) + yy_c = yy_meta[(unsigned int) yy_c]; + } + yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c]; + yy_is_jam = (yy_current_state == 75); + + return yy_is_jam ? 0 : yy_current_state; +} + + static void yyunput (int c, register char * yy_bp ) +{ + register char *yy_cp; + + yy_cp = (yy_c_buf_p); + + /* undo effects of setting up glangtext */ + *yy_cp = (yy_hold_char); + + if ( yy_cp < YY_CURRENT_BUFFER_LVALUE->yy_ch_buf + 2 ) + { /* need to shift things up to make room */ + /* +2 for EOB chars. */ + register int number_to_move = (yy_n_chars) + 2; + register char *dest = &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[ + YY_CURRENT_BUFFER_LVALUE->yy_buf_size + 2]; + register char *source = + &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[number_to_move]; + + while ( source > YY_CURRENT_BUFFER_LVALUE->yy_ch_buf ) + *--dest = *--source; + + yy_cp += (int) (dest - source); + yy_bp += (int) (dest - source); + YY_CURRENT_BUFFER_LVALUE->yy_n_chars = + (yy_n_chars) = YY_CURRENT_BUFFER_LVALUE->yy_buf_size; + + if ( yy_cp < YY_CURRENT_BUFFER_LVALUE->yy_ch_buf + 2 ) + YY_FATAL_ERROR( "flex scanner push-back overflow" ); + } + + *--yy_cp = (char) c; + + if ( c == '\n' ){ + --glanglineno; + } + + (yytext_ptr) = yy_bp; + (yy_hold_char) = *yy_cp; + (yy_c_buf_p) = yy_cp; +} + +#ifndef YY_NO_INPUT +#ifdef __cplusplus + static int yyinput (void) +#else + static int input (void) +#endif + +{ + int c; + + *(yy_c_buf_p) = (yy_hold_char); + + if ( *(yy_c_buf_p) == YY_END_OF_BUFFER_CHAR ) + { + /* yy_c_buf_p now points to the character we want to return. + * If this occurs *before* the EOB characters, then it's a + * valid NUL; if not, then we've hit the end of the buffer. + */ + if ( (yy_c_buf_p) < &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars)] ) + /* This was really a NUL. */ + *(yy_c_buf_p) = '\0'; + + else + { /* need more input */ + int offset = (yy_c_buf_p) - (yytext_ptr); + ++(yy_c_buf_p); + + switch ( yy_get_next_buffer( ) ) + { + case EOB_ACT_LAST_MATCH: + /* This happens because yy_g_n_b() + * sees that we've accumulated a + * token and flags that we need to + * try matching the token before + * proceeding. But for input(), + * there's no matching to consider. + * So convert the EOB_ACT_LAST_MATCH + * to EOB_ACT_END_OF_FILE. + */ + + /* Reset buffer status. */ + glangrestart(glangin ); + + /*FALLTHROUGH*/ + + case EOB_ACT_END_OF_FILE: + { + if ( glangwrap( ) ) + return 0; + + if ( ! (yy_did_buffer_switch_on_eof) ) + YY_NEW_FILE; +#ifdef __cplusplus + return yyinput(); +#else + return input(); +#endif + } + + case EOB_ACT_CONTINUE_SCAN: + (yy_c_buf_p) = (yytext_ptr) + offset; + break; + } + } + } + + c = *(unsigned char *) (yy_c_buf_p); /* cast for 8-bit char's */ + *(yy_c_buf_p) = '\0'; /* preserve glangtext */ + (yy_hold_char) = *++(yy_c_buf_p); + + if ( c == '\n' ) + + glanglineno++; +; + + return c; +} +#endif /* ifndef YY_NO_INPUT */ + +/** Immediately switch to a different input stream. + * @param input_file A readable stream. + * + * @note This function does not reset the start condition to @c INITIAL . + */ + void glangrestart (FILE * input_file ) +{ + + if ( ! YY_CURRENT_BUFFER ){ + glangensure_buffer_stack (); + YY_CURRENT_BUFFER_LVALUE = + glang_create_buffer(glangin,YY_BUF_SIZE ); + } + + glang_init_buffer(YY_CURRENT_BUFFER,input_file ); + glang_load_buffer_state( ); +} + +/** Switch to a different input buffer. + * @param new_buffer The new input buffer. + * + */ + void glang_switch_to_buffer (YY_BUFFER_STATE new_buffer ) +{ + + /* TODO. We should be able to replace this entire function body + * with + * glangpop_buffer_state(); + * glangpush_buffer_state(new_buffer); + */ + glangensure_buffer_stack (); + if ( YY_CURRENT_BUFFER == new_buffer ) + return; + + if ( YY_CURRENT_BUFFER ) + { + /* Flush out information for old buffer. */ + *(yy_c_buf_p) = (yy_hold_char); + YY_CURRENT_BUFFER_LVALUE->yy_buf_pos = (yy_c_buf_p); + YY_CURRENT_BUFFER_LVALUE->yy_n_chars = (yy_n_chars); + } + + YY_CURRENT_BUFFER_LVALUE = new_buffer; + glang_load_buffer_state( ); + + /* We don't actually know whether we did this switch during + * EOF (glangwrap()) processing, but the only time this flag + * is looked at is after glangwrap() is called, so it's safe + * to go ahead and always set it. + */ + (yy_did_buffer_switch_on_eof) = 1; +} + +static void glang_load_buffer_state (void) +{ + (yy_n_chars) = YY_CURRENT_BUFFER_LVALUE->yy_n_chars; + (yytext_ptr) = (yy_c_buf_p) = YY_CURRENT_BUFFER_LVALUE->yy_buf_pos; + glangin = YY_CURRENT_BUFFER_LVALUE->yy_input_file; + (yy_hold_char) = *(yy_c_buf_p); +} + +/** Allocate and initialize an input buffer state. + * @param file A readable stream. + * @param size The character buffer size in bytes. When in doubt, use @c YY_BUF_SIZE. + * + * @return the allocated buffer state. + */ + YY_BUFFER_STATE glang_create_buffer (FILE * file, int size ) +{ + YY_BUFFER_STATE b; + + b = (YY_BUFFER_STATE) glangalloc(sizeof( struct yy_buffer_state ) ); + if ( ! b ) + YY_FATAL_ERROR( "out of dynamic memory in glang_create_buffer()" ); + + b->yy_buf_size = size; + + /* yy_ch_buf has to be 2 characters longer than the size given because + * we need to put in 2 end-of-buffer characters. + */ + b->yy_ch_buf = (char *) glangalloc(b->yy_buf_size + 2 ); + if ( ! b->yy_ch_buf ) + YY_FATAL_ERROR( "out of dynamic memory in glang_create_buffer()" ); + + b->yy_is_our_buffer = 1; + + glang_init_buffer(b,file ); + + return b; +} + +/** Destroy the buffer. + * @param b a buffer created with glang_create_buffer() + * + */ + void glang_delete_buffer (YY_BUFFER_STATE b ) +{ + + if ( ! b ) + return; + + if ( b == YY_CURRENT_BUFFER ) /* Not sure if we should pop here. */ + YY_CURRENT_BUFFER_LVALUE = (YY_BUFFER_STATE) 0; + + if ( b->yy_is_our_buffer ) + glangfree((void *) b->yy_ch_buf ); + + glangfree((void *) b ); +} + +/* Initializes or reinitializes a buffer. + * This function is sometimes called more than once on the same buffer, + * such as during a glangrestart() or at EOF. + */ + static void glang_init_buffer (YY_BUFFER_STATE b, FILE * file ) + +{ + int oerrno = errno; + + glang_flush_buffer(b ); + + b->yy_input_file = file; + b->yy_fill_buffer = 1; + + /* If b is the current buffer, then glang_init_buffer was _probably_ + * called from glangrestart() or through yy_get_next_buffer. + * In that case, we don't want to reset the lineno or column. + */ + if (b != YY_CURRENT_BUFFER){ + b->yy_bs_lineno = 1; + b->yy_bs_column = 0; + } + + b->yy_is_interactive = 0; + + errno = oerrno; +} + +/** Discard all buffered characters. On the next scan, YY_INPUT will be called. + * @param b the buffer state to be flushed, usually @c YY_CURRENT_BUFFER. + * + */ + void glang_flush_buffer (YY_BUFFER_STATE b ) +{ + if ( ! b ) + return; + + b->yy_n_chars = 0; + + /* We always need two end-of-buffer characters. The first causes + * a transition to the end-of-buffer state. The second causes + * a jam in that state. + */ + b->yy_ch_buf[0] = YY_END_OF_BUFFER_CHAR; + b->yy_ch_buf[1] = YY_END_OF_BUFFER_CHAR; + + b->yy_buf_pos = &b->yy_ch_buf[0]; + + b->yy_at_bol = 1; + b->yy_buffer_status = YY_BUFFER_NEW; + + if ( b == YY_CURRENT_BUFFER ) + glang_load_buffer_state( ); +} + +/** Pushes the new state onto the stack. The new state becomes + * the current state. This function will allocate the stack + * if necessary. + * @param new_buffer The new state. + * + */ +void glangpush_buffer_state (YY_BUFFER_STATE new_buffer ) +{ + if (new_buffer == NULL) + return; + + glangensure_buffer_stack(); + + /* This block is copied from glang_switch_to_buffer. */ + if ( YY_CURRENT_BUFFER ) + { + /* Flush out information for old buffer. */ + *(yy_c_buf_p) = (yy_hold_char); + YY_CURRENT_BUFFER_LVALUE->yy_buf_pos = (yy_c_buf_p); + YY_CURRENT_BUFFER_LVALUE->yy_n_chars = (yy_n_chars); + } + + /* Only push if top exists. Otherwise, replace top. */ + if (YY_CURRENT_BUFFER) + (yy_buffer_stack_top)++; + YY_CURRENT_BUFFER_LVALUE = new_buffer; + + /* copied from glang_switch_to_buffer. */ + glang_load_buffer_state( ); + (yy_did_buffer_switch_on_eof) = 1; +} + +/** Removes and deletes the top of the stack, if present. + * The next element becomes the new top. + * + */ +void glangpop_buffer_state (void) +{ + if (!YY_CURRENT_BUFFER) + return; + + glang_delete_buffer(YY_CURRENT_BUFFER ); + YY_CURRENT_BUFFER_LVALUE = NULL; + if ((yy_buffer_stack_top) > 0) + --(yy_buffer_stack_top); + + if (YY_CURRENT_BUFFER) { + glang_load_buffer_state( ); + (yy_did_buffer_switch_on_eof) = 1; + } +} + +/* Allocates the stack if it does not exist. + * Guarantees space for at least one push. + */ +static void glangensure_buffer_stack (void) +{ + int num_to_alloc; + + if (!(yy_buffer_stack)) { + + /* First allocation is just for 2 elements, since we don't know if this + * scanner will even need a stack. We use 2 instead of 1 to avoid an + * immediate realloc on the next call. + */ + num_to_alloc = 1; + (yy_buffer_stack) = (struct yy_buffer_state**)glangalloc + (num_to_alloc * sizeof(struct yy_buffer_state*) + ); + + memset((yy_buffer_stack), 0, num_to_alloc * sizeof(struct yy_buffer_state*)); + + (yy_buffer_stack_max) = num_to_alloc; + (yy_buffer_stack_top) = 0; + return; + } + + if ((yy_buffer_stack_top) >= ((yy_buffer_stack_max)) - 1){ + + /* Increase the buffer to prepare for a possible push. */ + int grow_size = 8 /* arbitrary grow size */; + + num_to_alloc = (yy_buffer_stack_max) + grow_size; + (yy_buffer_stack) = (struct yy_buffer_state**)glangrealloc + ((yy_buffer_stack), + num_to_alloc * sizeof(struct yy_buffer_state*) + ); + + /* zero only the new slots.*/ + memset((yy_buffer_stack) + (yy_buffer_stack_max), 0, grow_size * sizeof(struct yy_buffer_state*)); + (yy_buffer_stack_max) = num_to_alloc; + } +} + +/** Setup the input buffer state to scan directly from a user-specified character buffer. + * @param base the character buffer + * @param size the size in bytes of the character buffer + * + * @return the newly allocated buffer state object. + */ +YY_BUFFER_STATE glang_scan_buffer (char * base, yy_size_t size ) +{ + YY_BUFFER_STATE b; + + if ( size < 2 || + base[size-2] != YY_END_OF_BUFFER_CHAR || + base[size-1] != YY_END_OF_BUFFER_CHAR ) + /* They forgot to leave room for the EOB's. */ + return 0; + + b = (YY_BUFFER_STATE) glangalloc(sizeof( struct yy_buffer_state ) ); + if ( ! b ) + YY_FATAL_ERROR( "out of dynamic memory in glang_scan_buffer()" ); + + b->yy_buf_size = size - 2; /* "- 2" to take care of EOB's */ + b->yy_buf_pos = b->yy_ch_buf = base; + b->yy_is_our_buffer = 0; + b->yy_input_file = 0; + b->yy_n_chars = b->yy_buf_size; + b->yy_is_interactive = 0; + b->yy_at_bol = 1; + b->yy_fill_buffer = 0; + b->yy_buffer_status = YY_BUFFER_NEW; + + glang_switch_to_buffer(b ); + + return b; +} + +/** Setup the input buffer state to scan a string. The next call to glanglex() will + * scan from a @e copy of @a str. + * @param str a NUL-terminated string to scan + * + * @return the newly allocated buffer state object. + * @note If you want to scan bytes that may contain NUL values, then use + * glang_scan_bytes() instead. + */ +YY_BUFFER_STATE glang_scan_string (yyconst char * yystr ) +{ + + return glang_scan_bytes(yystr,strlen(yystr) ); +} + +/** Setup the input buffer state to scan the given bytes. The next call to glanglex() will + * scan from a @e copy of @a bytes. + * @param bytes the byte buffer to scan + * @param len the number of bytes in the buffer pointed to by @a bytes. + * + * @return the newly allocated buffer state object. + */ +YY_BUFFER_STATE glang_scan_bytes (yyconst char * yybytes, int _yybytes_len ) +{ + YY_BUFFER_STATE b; + char *buf; + yy_size_t n; + int i; + + /* Get memory for full buffer, including space for trailing EOB's. */ + n = _yybytes_len + 2; + buf = (char *) glangalloc(n ); + if ( ! buf ) + YY_FATAL_ERROR( "out of dynamic memory in glang_scan_bytes()" ); + + for ( i = 0; i < _yybytes_len; ++i ) + buf[i] = yybytes[i]; + + buf[_yybytes_len] = buf[_yybytes_len+1] = YY_END_OF_BUFFER_CHAR; + + b = glang_scan_buffer(buf,n ); + if ( ! b ) + YY_FATAL_ERROR( "bad buffer in glang_scan_bytes()" ); + + /* It's okay to grow etc. this buffer, and we should throw it + * away when we're done. + */ + b->yy_is_our_buffer = 1; + + return b; +} + +#ifndef YY_EXIT_FAILURE +#define YY_EXIT_FAILURE 2 +#endif + +static void yy_fatal_error (yyconst char* msg ) +{ + (void) fprintf( stderr, "%s\n", msg ); + exit( YY_EXIT_FAILURE ); +} + +/* Redefine yyless() so it works in section 3 code. */ + +#undef yyless +#define yyless(n) \ + do \ + { \ + /* Undo effects of setting up glangtext. */ \ + int yyless_macro_arg = (n); \ + YY_LESS_LINENO(yyless_macro_arg);\ + glangtext[glangleng] = (yy_hold_char); \ + (yy_c_buf_p) = glangtext + yyless_macro_arg; \ + (yy_hold_char) = *(yy_c_buf_p); \ + *(yy_c_buf_p) = '\0'; \ + glangleng = yyless_macro_arg; \ + } \ + while ( 0 ) + +/* Accessor methods (get/set functions) to struct members. */ + +/** Get the current line number. + * + */ +int glangget_lineno (void) +{ + + return glanglineno; +} + +/** Get the input stream. + * + */ +FILE *glangget_in (void) +{ + return glangin; +} + +/** Get the output stream. + * + */ +FILE *glangget_out (void) +{ + return glangout; +} + +/** Get the length of the current token. + * + */ +int glangget_leng (void) +{ + return glangleng; +} + +/** Get the current token. + * + */ + +char *glangget_text (void) +{ + return glangtext; +} + +/** Set the current line number. + * @param line_number + * + */ +void glangset_lineno (int line_number ) +{ + + glanglineno = line_number; +} + +/** Set the input stream. This does not discard the current + * input buffer. + * @param in_str A readable stream. + * + * @see glang_switch_to_buffer + */ +void glangset_in (FILE * in_str ) +{ + glangin = in_str ; +} + +void glangset_out (FILE * out_str ) +{ + glangout = out_str ; +} + +int glangget_debug (void) +{ + return glang_flex_debug; +} + +void glangset_debug (int bdebug ) +{ + glang_flex_debug = bdebug ; +} + +static int yy_init_globals (void) +{ + /* Initialization is the same as for the non-reentrant scanner. + * This function is called from glanglex_destroy(), so don't allocate here. + */ + + /* We do not touch glanglineno unless the option is enabled. */ + glanglineno = 1; + + (yy_buffer_stack) = 0; + (yy_buffer_stack_top) = 0; + (yy_buffer_stack_max) = 0; + (yy_c_buf_p) = (char *) 0; + (yy_init) = 0; + (yy_start) = 0; + +/* Defined in main.c */ +#ifdef YY_STDINIT + glangin = stdin; + glangout = stdout; +#else + glangin = (FILE *) 0; + glangout = (FILE *) 0; +#endif + + /* For future reference: Set errno on error, since we are called by + * glanglex_init() + */ + return 0; +} + +/* glanglex_destroy is for both reentrant and non-reentrant scanners. */ +int glanglex_destroy (void) +{ + + /* Pop the buffer stack, destroying each element. */ + while(YY_CURRENT_BUFFER){ + glang_delete_buffer(YY_CURRENT_BUFFER ); + YY_CURRENT_BUFFER_LVALUE = NULL; + glangpop_buffer_state(); + } + + /* Destroy the stack itself. */ + glangfree((yy_buffer_stack) ); + (yy_buffer_stack) = NULL; + + /* Reset the globals. This is important in a non-reentrant scanner so the next time + * glanglex() is called, initialization will occur. */ + yy_init_globals( ); + + return 0; +} + +/* + * Internal utility routines. + */ + +#ifndef yytext_ptr +static void yy_flex_strncpy (char* s1, yyconst char * s2, int n ) +{ + register int i; + for ( i = 0; i < n; ++i ) + s1[i] = s2[i]; +} +#endif + +#ifdef YY_NEED_STRLEN +static int yy_flex_strlen (yyconst char * s ) +{ + register int n; + for ( n = 0; s[n]; ++n ) + ; + + return n; +} +#endif + +void *glangalloc (yy_size_t size ) +{ + return (void *) malloc( size ); +} + +void *glangrealloc (void * ptr, yy_size_t size ) +{ + /* The cast to (char *) in the following accommodates both + * implementations that use char* generic pointers, and those + * that use void* generic pointers. It works with the latter + * because both ANSI C and C++ allow castless assignment from + * any pointer type to void*, and deal with argument conversions + * as though doing an assignment. + */ + return (void *) realloc( (char *) ptr, size ); +} + +void glangfree (void * ptr ) +{ + free( (char *) ptr ); /* see glangrealloc() for (char *) cast */ +} + +#define YYTABLES_NAME "yytables" + +#line 63 "glang.l" diff --git a/guidoar-dev/src/lang/parser/glangparse.cpp b/guidoar-dev/src/lang/parser/glangparse.cpp new file mode 100644 index 000000000..fa907531d --- /dev/null +++ b/guidoar-dev/src/lang/parser/glangparse.cpp @@ -0,0 +1,1705 @@ +/* A Bison parser, made by GNU Bison 2.3. */ + +/* Skeleton implementation for Bison's Yacc-like parsers in C + + Copyright (C) 1984, 1989, 1990, 2000, 2001, 2002, 2003, 2004, 2005, 2006 + Free Software Foundation, Inc. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2, or (at your option) + any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin Street, Fifth Floor, + Boston, MA 02110-1301, USA. */ + +/* As a special exception, you may create a larger work that contains + part or all of the Bison parser skeleton and distribute that work + under terms of your choice, so long as that work isn't itself a + parser generator using the skeleton or a modified version thereof + as a parser skeleton. Alternatively, if you modify or redistribute + the parser skeleton itself, you may (at your option) remove this + special exception, which will cause the skeleton and the resulting + Bison output files to be licensed under the GNU General Public + License without this special exception. + + This special exception was added by the Free Software Foundation in + version 2.2 of Bison. */ + +/* C LALR(1) parser skeleton written by Richard Stallman, by + simplifying the original so-called "semantic" parser. */ + +/* All symbols defined below should begin with yy or YY, to avoid + infringing on user name space. This should be done even for local + variables, as they might otherwise be expanded by user macros. + There are some unavoidable exceptions within include files to + define necessary library symbols; they are noted "INFRINGES ON + USER NAME SPACE" below. */ + +/* Identify Bison output. */ +#define YYBISON 1 + +/* Bison version. */ +#define YYBISON_VERSION "2.3" + +/* Skeleton name. */ +#define YYSKELETON_NAME "yacc.c" + +/* Pure parsers. */ +#define YYPURE 0 + +/* Using locations. */ +#define YYLSP_NEEDED 0 + +/* Substitute the variable and function names. */ +#define yyparse glangparse +#define yylex glanglex +#define yyerror glangerror +#define yylval glanglval +#define yychar glangchar +#define yydebug glangdebug +#define yynerrs glangnerrs + + +/* Tokens. */ +#ifndef YYTOKENTYPE +# define YYTOKENTYPE + /* Put the tokens into the symbol table, so that GDB and other debuggers + know about them. */ + enum yytokentype { + GMN = 258, + GROUPSTART = 259, + GROUPEND = 260, + ASEP = 261, + EQ = 262, + IDENT = 263, + BOTTOM = 264, + TOP = 265, + TAIL = 266, + HEAD = 267, + PAR = 268, + SEQ = 269, + APPLY = 270, + ABSTRACT = 271 + }; +#endif +/* Tokens. */ +#define GMN 258 +#define GROUPSTART 259 +#define GROUPEND 260 +#define ASEP 261 +#define EQ 262 +#define IDENT 263 +#define BOTTOM 264 +#define TOP 265 +#define TAIL 266 +#define HEAD 267 +#define PAR 268 +#define SEQ 269 +#define APPLY 270 +#define ABSTRACT 271 + + + + +/* Copy the first part of user declarations. */ +#line 1 "glang.y" + + +#include +#include +#include "glangreader.h" + +#include "glangparse.hpp" +#include "glanglex.cpp" + +int glangerror(const char*s); + +//#define parseDebug +#ifdef parseDebug +#define debug(msg) std::cout << msg << " -" << glangtext << "-" << std::endl; +#else +#define debug(msg) +#endif + +#define clean(a,b,c) delete a; delete b; delete c + +extern guidolang::glangreader* gGLReader; +using namespace guidolang; + + + +/* Enabling traces. */ +#ifndef YYDEBUG +# define YYDEBUG 0 +#endif + +/* Enabling verbose error messages. */ +#ifdef YYERROR_VERBOSE +# undef YYERROR_VERBOSE +# define YYERROR_VERBOSE 1 +#else +# define YYERROR_VERBOSE 0 +#endif + +/* Enabling the token table. */ +#ifndef YYTOKEN_TABLE +# define YYTOKEN_TABLE 0 +#endif + +#if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED +typedef union YYSTYPE +#line 30 "glang.y" +{ + SGLExpr* exprPtr; + std::string * strPtr; +} +/* Line 193 of yacc.c. */ +#line 166 "glangparse.cpp" + YYSTYPE; +# define yystype YYSTYPE /* obsolescent; will be withdrawn */ +# define YYSTYPE_IS_DECLARED 1 +# define YYSTYPE_IS_TRIVIAL 1 +#endif + + + +/* Copy the second part of user declarations. */ + + +/* Line 216 of yacc.c. */ +#line 179 "glangparse.cpp" + +#ifdef short +# undef short +#endif + +#ifdef YYTYPE_UINT8 +typedef YYTYPE_UINT8 yytype_uint8; +#else +typedef unsigned char yytype_uint8; +#endif + +#ifdef YYTYPE_INT8 +typedef YYTYPE_INT8 yytype_int8; +#elif (defined __STDC__ || defined __C99__FUNC__ \ + || defined __cplusplus || defined _MSC_VER) +typedef signed char yytype_int8; +#else +typedef short int yytype_int8; +#endif + +#ifdef YYTYPE_UINT16 +typedef YYTYPE_UINT16 yytype_uint16; +#else +typedef unsigned short int yytype_uint16; +#endif + +#ifdef YYTYPE_INT16 +typedef YYTYPE_INT16 yytype_int16; +#else +typedef short int yytype_int16; +#endif + +#ifndef YYSIZE_T +# ifdef __SIZE_TYPE__ +# define YYSIZE_T __SIZE_TYPE__ +# elif defined size_t +# define YYSIZE_T size_t +# elif ! defined YYSIZE_T && (defined __STDC__ || defined __C99__FUNC__ \ + || defined __cplusplus || defined _MSC_VER) +# include /* INFRINGES ON USER NAME SPACE */ +# define YYSIZE_T size_t +# else +# define YYSIZE_T unsigned int +# endif +#endif + +#define YYSIZE_MAXIMUM ((YYSIZE_T) -1) + +#ifndef YY_ +# if defined YYENABLE_NLS && YYENABLE_NLS +# if ENABLE_NLS +# include /* INFRINGES ON USER NAME SPACE */ +# define YY_(msgid) dgettext ("bison-runtime", msgid) +# endif +# endif +# ifndef YY_ +# define YY_(msgid) msgid +# endif +#endif + +/* Suppress unused-variable warnings by "using" E. */ +#if ! defined lint || defined __GNUC__ +# define YYUSE(e) ((void) (e)) +#else +# define YYUSE(e) /* empty */ +#endif + +/* Identity function, used to suppress warnings about constant conditions. */ +#ifndef lint +# define YYID(n) (n) +#else +#if (defined __STDC__ || defined __C99__FUNC__ \ + || defined __cplusplus || defined _MSC_VER) +static int +YYID (int i) +#else +static int +YYID (i) + int i; +#endif +{ + return i; +} +#endif + +#if ! defined yyoverflow || YYERROR_VERBOSE + +/* The parser invokes alloca or malloc; define the necessary symbols. */ + +# ifdef YYSTACK_USE_ALLOCA +# if YYSTACK_USE_ALLOCA +# ifdef __GNUC__ +# define YYSTACK_ALLOC __builtin_alloca +# elif defined __BUILTIN_VA_ARG_INCR +# include /* INFRINGES ON USER NAME SPACE */ +# elif defined _AIX +# define YYSTACK_ALLOC __alloca +# elif defined _MSC_VER +# include /* INFRINGES ON USER NAME SPACE */ +# define alloca _alloca +# else +# define YYSTACK_ALLOC alloca +# if ! defined _ALLOCA_H && ! defined _STDLIB_H && (defined __STDC__ || defined __C99__FUNC__ \ + || defined __cplusplus || defined _MSC_VER) +# include /* INFRINGES ON USER NAME SPACE */ +# ifndef _STDLIB_H +# define _STDLIB_H 1 +# endif +# endif +# endif +# endif +# endif + +# ifdef YYSTACK_ALLOC + /* Pacify GCC's `empty if-body' warning. */ +# define YYSTACK_FREE(Ptr) do { /* empty */; } while (YYID (0)) +# ifndef YYSTACK_ALLOC_MAXIMUM + /* The OS might guarantee only one guard page at the bottom of the stack, + and a page size can be as small as 4096 bytes. So we cannot safely + invoke alloca (N) if N exceeds 4096. Use a slightly smaller number + to allow for a few compiler-allocated temporary stack slots. */ +# define YYSTACK_ALLOC_MAXIMUM 4032 /* reasonable circa 2006 */ +# endif +# else +# define YYSTACK_ALLOC YYMALLOC +# define YYSTACK_FREE YYFREE +# ifndef YYSTACK_ALLOC_MAXIMUM +# define YYSTACK_ALLOC_MAXIMUM YYSIZE_MAXIMUM +# endif +# if (defined __cplusplus && ! defined _STDLIB_H \ + && ! ((defined YYMALLOC || defined malloc) \ + && (defined YYFREE || defined free))) +# include /* INFRINGES ON USER NAME SPACE */ +# ifndef _STDLIB_H +# define _STDLIB_H 1 +# endif +# endif +# ifndef YYMALLOC +# define YYMALLOC malloc +# if ! defined malloc && ! defined _STDLIB_H && (defined __STDC__ || defined __C99__FUNC__ \ + || defined __cplusplus || defined _MSC_VER) +void *malloc (YYSIZE_T); /* INFRINGES ON USER NAME SPACE */ +# endif +# endif +# ifndef YYFREE +# define YYFREE free +# if ! defined free && ! defined _STDLIB_H && (defined __STDC__ || defined __C99__FUNC__ \ + || defined __cplusplus || defined _MSC_VER) +void free (void *); /* INFRINGES ON USER NAME SPACE */ +# endif +# endif +# endif +#endif /* ! defined yyoverflow || YYERROR_VERBOSE */ + + +#if (! defined yyoverflow \ + && (! defined __cplusplus \ + || (defined YYSTYPE_IS_TRIVIAL && YYSTYPE_IS_TRIVIAL))) + +/* A type that is properly aligned for any stack member. */ +union yyalloc +{ + yytype_int16 yyss; + YYSTYPE yyvs; + }; + +/* The size of the maximum gap between one aligned stack and the next. */ +# define YYSTACK_GAP_MAXIMUM (sizeof (union yyalloc) - 1) + +/* The size of an array large to enough to hold all stacks, each with + N elements. */ +# define YYSTACK_BYTES(N) \ + ((N) * (sizeof (yytype_int16) + sizeof (YYSTYPE)) \ + + YYSTACK_GAP_MAXIMUM) + +/* Copy COUNT objects from FROM to TO. The source and destination do + not overlap. */ +# ifndef YYCOPY +# if defined __GNUC__ && 1 < __GNUC__ +# define YYCOPY(To, From, Count) \ + __builtin_memcpy (To, From, (Count) * sizeof (*(From))) +# else +# define YYCOPY(To, From, Count) \ + do \ + { \ + YYSIZE_T yyi; \ + for (yyi = 0; yyi < (Count); yyi++) \ + (To)[yyi] = (From)[yyi]; \ + } \ + while (YYID (0)) +# endif +# endif + +/* Relocate STACK from its old location to the new one. The + local variables YYSIZE and YYSTACKSIZE give the old and new number of + elements in the stack, and YYPTR gives the new location of the + stack. Advance YYPTR to a properly aligned location for the next + stack. */ +# define YYSTACK_RELOCATE(Stack) \ + do \ + { \ + YYSIZE_T yynewbytes; \ + YYCOPY (&yyptr->Stack, Stack, yysize); \ + Stack = &yyptr->Stack; \ + yynewbytes = yystacksize * sizeof (*Stack) + YYSTACK_GAP_MAXIMUM; \ + yyptr += yynewbytes / sizeof (*yyptr); \ + } \ + while (YYID (0)) + +#endif + +/* YYFINAL -- State number of the termination state. */ +#define YYFINAL 5 +/* YYLAST -- Last index in YYTABLE. */ +#define YYLAST 46 + +/* YYNTOKENS -- Number of terminals. */ +#define YYNTOKENS 17 +/* YYNNTS -- Number of nonterminals. */ +#define YYNNTS 8 +/* YYNRULES -- Number of rules. */ +#define YYNRULES 19 +/* YYNRULES -- Number of states. */ +#define YYNSTATES 31 + +/* YYTRANSLATE(YYLEX) -- Bison symbol number corresponding to YYLEX. */ +#define YYUNDEFTOK 2 +#define YYMAXUTOK 271 + +#define YYTRANSLATE(YYX) \ + ((unsigned int) (YYX) <= YYMAXUTOK ? yytranslate[YYX] : YYUNDEFTOK) + +/* YYTRANSLATE[YYLEX] -- Bison symbol number corresponding to YYLEX. */ +static const yytype_uint8 yytranslate[] = +{ + 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 1, 2, 3, 4, + 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, + 15, 16 +}; + +#if YYDEBUG +/* YYPRHS[YYN] -- Index of the first RHS symbol of rule number YYN in + YYRHS. */ +static const yytype_uint8 yyprhs[] = +{ + 0, 0, 3, 5, 9, 14, 16, 20, 25, 27, + 29, 33, 35, 37, 39, 41, 43, 45, 47, 49 +}; + +/* YYRHS -- A `-1'-separated list of the rules' RHS. */ +static const yytype_int8 yyrhs[] = +{ + 18, 0, -1, 19, -1, 24, 7, 20, -1, 19, + 24, 7, 20, -1, 3, -1, 20, 22, 20, -1, + 16, 20, 23, 20, -1, 24, -1, 21, -1, 4, + 20, 5, -1, 14, -1, 13, -1, 12, -1, 11, + -1, 10, -1, 9, -1, 15, -1, 6, -1, 8, + -1 +}; + +/* YYRLINE[YYN] -- source line where rule number YYN was defined. */ +static const yytype_uint8 yyrline[] = +{ + 0, 62, 62, 64, 65, 68, 70, 71, 72, 74, + 77, 79, 80, 81, 82, 83, 84, 85, 87, 88 +}; +#endif + +#if YYDEBUG || YYERROR_VERBOSE || YYTOKEN_TABLE +/* YYTNAME[SYMBOL-NUM] -- String name of the symbol SYMBOL-NUM. + First, the terminals, then, starting at YYNTOKENS, nonterminals. */ +static const char *const yytname[] = +{ + "$end", "error", "$undefined", "GMN", "GROUPSTART", "GROUPEND", "ASEP", + "EQ", "IDENT", "BOTTOM", "TOP", "TAIL", "HEAD", "PAR", "SEQ", "APPLY", + "ABSTRACT", "$accept", "program", "deflist", "expr", "group", "op", + "asep", "name", 0 +}; +#endif + +# ifdef YYPRINT +/* YYTOKNUM[YYLEX-NUM] -- Internal token number corresponding to + token YYLEX-NUM. */ +static const yytype_uint16 yytoknum[] = +{ + 0, 256, 257, 258, 259, 260, 261, 262, 263, 264, + 265, 266, 267, 268, 269, 270, 271 +}; +# endif + +/* YYR1[YYN] -- Symbol number of symbol that rule YYN derives. */ +static const yytype_uint8 yyr1[] = +{ + 0, 17, 18, 19, 19, 20, 20, 20, 20, 20, + 21, 22, 22, 22, 22, 22, 22, 22, 23, 24 +}; + +/* YYR2[YYN] -- Number of symbols composing right hand side of rule YYN. */ +static const yytype_uint8 yyr2[] = +{ + 0, 2, 1, 3, 4, 1, 3, 4, 1, 1, + 3, 1, 1, 1, 1, 1, 1, 1, 1, 1 +}; + +/* YYDEFACT[STATE-NAME] -- Default rule to reduce with in state + STATE-NUM when YYTABLE doesn't specify something else to do. Zero + means the default is an error. */ +static const yytype_uint8 yydefact[] = +{ + 0, 19, 0, 2, 0, 1, 0, 0, 0, 5, + 0, 0, 3, 9, 8, 4, 0, 0, 16, 15, + 14, 13, 12, 11, 17, 0, 10, 18, 0, 6, + 7 +}; + +/* YYDEFGOTO[NTERM-NUM]. */ +static const yytype_int8 yydefgoto[] = +{ + -1, 2, 3, 12, 13, 25, 28, 14 +}; + +/* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing + STATE-NUM. */ +#define YYPACT_NINF -9 +static const yytype_int8 yypact[] = +{ + -1, -9, 8, -1, 4, -9, 5, 2, 2, -9, + 2, 2, 31, -9, -9, 31, 14, 24, -9, -9, + -9, -9, -9, -9, -9, 2, -9, -9, 2, 31, + -9 +}; + +/* YYPGOTO[NTERM-NUM]. */ +static const yytype_int8 yypgoto[] = +{ + -9, -9, -9, -8, -9, -9, -9, 1 +}; + +/* YYTABLE[YYPACT[STATE-NUM]]. What to do in state STATE-NUM. If + positive, shift that token. If negative, reduce the rule which + number is the opposite. If zero, do what YYDEFACT says. + If YYTABLE_NINF, syntax error. */ +#define YYTABLE_NINF -1 +static const yytype_uint8 yytable[] = +{ + 15, 4, 16, 17, 6, 9, 10, 1, 5, 0, + 1, 7, 8, 0, 0, 0, 0, 29, 11, 26, + 30, 0, 0, 18, 19, 20, 21, 22, 23, 24, + 27, 0, 0, 18, 19, 20, 21, 22, 23, 24, + 18, 19, 20, 21, 22, 23, 24 +}; + +static const yytype_int8 yycheck[] = +{ + 8, 0, 10, 11, 3, 3, 4, 8, 0, -1, + 8, 7, 7, -1, -1, -1, -1, 25, 16, 5, + 28, -1, -1, 9, 10, 11, 12, 13, 14, 15, + 6, -1, -1, 9, 10, 11, 12, 13, 14, 15, + 9, 10, 11, 12, 13, 14, 15 +}; + +/* YYSTOS[STATE-NUM] -- The (internal number of the) accessing + symbol of state STATE-NUM. */ +static const yytype_uint8 yystos[] = +{ + 0, 8, 18, 19, 24, 0, 24, 7, 7, 3, + 4, 16, 20, 21, 24, 20, 20, 20, 9, 10, + 11, 12, 13, 14, 15, 22, 5, 6, 23, 20, + 20 +}; + +#define yyerrok (yyerrstatus = 0) +#define yyclearin (yychar = YYEMPTY) +#define YYEMPTY (-2) +#define YYEOF 0 + +#define YYACCEPT goto yyacceptlab +#define YYABORT goto yyabortlab +#define YYERROR goto yyerrorlab + + +/* Like YYERROR except do call yyerror. This remains here temporarily + to ease the transition to the new meaning of YYERROR, for GCC. + Once GCC version 2 has supplanted version 1, this can go. */ + +#define YYFAIL goto yyerrlab + +#define YYRECOVERING() (!!yyerrstatus) + +#define YYBACKUP(Token, Value) \ +do \ + if (yychar == YYEMPTY && yylen == 1) \ + { \ + yychar = (Token); \ + yylval = (Value); \ + yytoken = YYTRANSLATE (yychar); \ + YYPOPSTACK (1); \ + goto yybackup; \ + } \ + else \ + { \ + yyerror (YY_("syntax error: cannot back up")); \ + YYERROR; \ + } \ +while (YYID (0)) + + +#define YYTERROR 1 +#define YYERRCODE 256 + + +/* YYLLOC_DEFAULT -- Set CURRENT to span from RHS[1] to RHS[N]. + If N is 0, then set CURRENT to the empty location which ends + the previous symbol: RHS[0] (always defined). */ + +#define YYRHSLOC(Rhs, K) ((Rhs)[K]) +#ifndef YYLLOC_DEFAULT +# define YYLLOC_DEFAULT(Current, Rhs, N) \ + do \ + if (YYID (N)) \ + { \ + (Current).first_line = YYRHSLOC (Rhs, 1).first_line; \ + (Current).first_column = YYRHSLOC (Rhs, 1).first_column; \ + (Current).last_line = YYRHSLOC (Rhs, N).last_line; \ + (Current).last_column = YYRHSLOC (Rhs, N).last_column; \ + } \ + else \ + { \ + (Current).first_line = (Current).last_line = \ + YYRHSLOC (Rhs, 0).last_line; \ + (Current).first_column = (Current).last_column = \ + YYRHSLOC (Rhs, 0).last_column; \ + } \ + while (YYID (0)) +#endif + + +/* YY_LOCATION_PRINT -- Print the location on the stream. + This macro was not mandated originally: define only if we know + we won't break user code: when these are the locations we know. */ + +#ifndef YY_LOCATION_PRINT +# if defined YYLTYPE_IS_TRIVIAL && YYLTYPE_IS_TRIVIAL +# define YY_LOCATION_PRINT(File, Loc) \ + fprintf (File, "%d.%d-%d.%d", \ + (Loc).first_line, (Loc).first_column, \ + (Loc).last_line, (Loc).last_column) +# else +# define YY_LOCATION_PRINT(File, Loc) ((void) 0) +# endif +#endif + + +/* YYLEX -- calling `yylex' with the right arguments. */ + +#ifdef YYLEX_PARAM +# define YYLEX yylex (YYLEX_PARAM) +#else +# define YYLEX yylex () +#endif + +/* Enable debugging if requested. */ +#if YYDEBUG + +# ifndef YYFPRINTF +# include /* INFRINGES ON USER NAME SPACE */ +# define YYFPRINTF fprintf +# endif + +# define YYDPRINTF(Args) \ +do { \ + if (yydebug) \ + YYFPRINTF Args; \ +} while (YYID (0)) + +# define YY_SYMBOL_PRINT(Title, Type, Value, Location) \ +do { \ + if (yydebug) \ + { \ + YYFPRINTF (stderr, "%s ", Title); \ + yy_symbol_print (stderr, \ + Type, Value); \ + YYFPRINTF (stderr, "\n"); \ + } \ +} while (YYID (0)) + + +/*--------------------------------. +| Print this symbol on YYOUTPUT. | +`--------------------------------*/ + +/*ARGSUSED*/ +#if (defined __STDC__ || defined __C99__FUNC__ \ + || defined __cplusplus || defined _MSC_VER) +static void +yy_symbol_value_print (FILE *yyoutput, int yytype, YYSTYPE const * const yyvaluep) +#else +static void +yy_symbol_value_print (yyoutput, yytype, yyvaluep) + FILE *yyoutput; + int yytype; + YYSTYPE const * const yyvaluep; +#endif +{ + if (!yyvaluep) + return; +# ifdef YYPRINT + if (yytype < YYNTOKENS) + YYPRINT (yyoutput, yytoknum[yytype], *yyvaluep); +# else + YYUSE (yyoutput); +# endif + switch (yytype) + { + default: + break; + } +} + + +/*--------------------------------. +| Print this symbol on YYOUTPUT. | +`--------------------------------*/ + +#if (defined __STDC__ || defined __C99__FUNC__ \ + || defined __cplusplus || defined _MSC_VER) +static void +yy_symbol_print (FILE *yyoutput, int yytype, YYSTYPE const * const yyvaluep) +#else +static void +yy_symbol_print (yyoutput, yytype, yyvaluep) + FILE *yyoutput; + int yytype; + YYSTYPE const * const yyvaluep; +#endif +{ + if (yytype < YYNTOKENS) + YYFPRINTF (yyoutput, "token %s (", yytname[yytype]); + else + YYFPRINTF (yyoutput, "nterm %s (", yytname[yytype]); + + yy_symbol_value_print (yyoutput, yytype, yyvaluep); + YYFPRINTF (yyoutput, ")"); +} + +/*------------------------------------------------------------------. +| yy_stack_print -- Print the state stack from its BOTTOM up to its | +| TOP (included). | +`------------------------------------------------------------------*/ + +#if (defined __STDC__ || defined __C99__FUNC__ \ + || defined __cplusplus || defined _MSC_VER) +static void +yy_stack_print (yytype_int16 *bottom, yytype_int16 *top) +#else +static void +yy_stack_print (bottom, top) + yytype_int16 *bottom; + yytype_int16 *top; +#endif +{ + YYFPRINTF (stderr, "Stack now"); + for (; bottom <= top; ++bottom) + YYFPRINTF (stderr, " %d", *bottom); + YYFPRINTF (stderr, "\n"); +} + +# define YY_STACK_PRINT(Bottom, Top) \ +do { \ + if (yydebug) \ + yy_stack_print ((Bottom), (Top)); \ +} while (YYID (0)) + + +/*------------------------------------------------. +| Report that the YYRULE is going to be reduced. | +`------------------------------------------------*/ + +#if (defined __STDC__ || defined __C99__FUNC__ \ + || defined __cplusplus || defined _MSC_VER) +static void +yy_reduce_print (YYSTYPE *yyvsp, int yyrule) +#else +static void +yy_reduce_print (yyvsp, yyrule) + YYSTYPE *yyvsp; + int yyrule; +#endif +{ + int yynrhs = yyr2[yyrule]; + int yyi; + unsigned long int yylno = yyrline[yyrule]; + YYFPRINTF (stderr, "Reducing stack by rule %d (line %lu):\n", + yyrule - 1, yylno); + /* The symbols being reduced. */ + for (yyi = 0; yyi < yynrhs; yyi++) + { + fprintf (stderr, " $%d = ", yyi + 1); + yy_symbol_print (stderr, yyrhs[yyprhs[yyrule] + yyi], + &(yyvsp[(yyi + 1) - (yynrhs)]) + ); + fprintf (stderr, "\n"); + } +} + +# define YY_REDUCE_PRINT(Rule) \ +do { \ + if (yydebug) \ + yy_reduce_print (yyvsp, Rule); \ +} while (YYID (0)) + +/* Nonzero means print parse trace. It is left uninitialized so that + multiple parsers can coexist. */ +int yydebug; +#else /* !YYDEBUG */ +# define YYDPRINTF(Args) +# define YY_SYMBOL_PRINT(Title, Type, Value, Location) +# define YY_STACK_PRINT(Bottom, Top) +# define YY_REDUCE_PRINT(Rule) +#endif /* !YYDEBUG */ + + +/* YYINITDEPTH -- initial size of the parser's stacks. */ +#ifndef YYINITDEPTH +# define YYINITDEPTH 200 +#endif + +/* YYMAXDEPTH -- maximum size the stacks can grow to (effective only + if the built-in stack extension method is used). + + Do not make this value too large; the results are undefined if + YYSTACK_ALLOC_MAXIMUM < YYSTACK_BYTES (YYMAXDEPTH) + evaluated with infinite-precision integer arithmetic. */ + +#ifndef YYMAXDEPTH +# define YYMAXDEPTH 10000 +#endif + + + +#if YYERROR_VERBOSE + +# ifndef yystrlen +# if defined __GLIBC__ && defined _STRING_H +# define yystrlen strlen +# else +/* Return the length of YYSTR. */ +#if (defined __STDC__ || defined __C99__FUNC__ \ + || defined __cplusplus || defined _MSC_VER) +static YYSIZE_T +yystrlen (const char *yystr) +#else +static YYSIZE_T +yystrlen (yystr) + const char *yystr; +#endif +{ + YYSIZE_T yylen; + for (yylen = 0; yystr[yylen]; yylen++) + continue; + return yylen; +} +# endif +# endif + +# ifndef yystpcpy +# if defined __GLIBC__ && defined _STRING_H && defined _GNU_SOURCE +# define yystpcpy stpcpy +# else +/* Copy YYSRC to YYDEST, returning the address of the terminating '\0' in + YYDEST. */ +#if (defined __STDC__ || defined __C99__FUNC__ \ + || defined __cplusplus || defined _MSC_VER) +static char * +yystpcpy (char *yydest, const char *yysrc) +#else +static char * +yystpcpy (yydest, yysrc) + char *yydest; + const char *yysrc; +#endif +{ + char *yyd = yydest; + const char *yys = yysrc; + + while ((*yyd++ = *yys++) != '\0') + continue; + + return yyd - 1; +} +# endif +# endif + +# ifndef yytnamerr +/* Copy to YYRES the contents of YYSTR after stripping away unnecessary + quotes and backslashes, so that it's suitable for yyerror. The + heuristic is that double-quoting is unnecessary unless the string + contains an apostrophe, a comma, or backslash (other than + backslash-backslash). YYSTR is taken from yytname. If YYRES is + null, do not copy; instead, return the length of what the result + would have been. */ +static YYSIZE_T +yytnamerr (char *yyres, const char *yystr) +{ + if (*yystr == '"') + { + YYSIZE_T yyn = 0; + char const *yyp = yystr; + + for (;;) + switch (*++yyp) + { + case '\'': + case ',': + goto do_not_strip_quotes; + + case '\\': + if (*++yyp != '\\') + goto do_not_strip_quotes; + /* Fall through. */ + default: + if (yyres) + yyres[yyn] = *yyp; + yyn++; + break; + + case '"': + if (yyres) + yyres[yyn] = '\0'; + return yyn; + } + do_not_strip_quotes: ; + } + + if (! yyres) + return yystrlen (yystr); + + return yystpcpy (yyres, yystr) - yyres; +} +# endif + +/* Copy into YYRESULT an error message about the unexpected token + YYCHAR while in state YYSTATE. Return the number of bytes copied, + including the terminating null byte. If YYRESULT is null, do not + copy anything; just return the number of bytes that would be + copied. As a special case, return 0 if an ordinary "syntax error" + message will do. Return YYSIZE_MAXIMUM if overflow occurs during + size calculation. */ +static YYSIZE_T +yysyntax_error (char *yyresult, int yystate, int yychar) +{ + int yyn = yypact[yystate]; + + if (! (YYPACT_NINF < yyn && yyn <= YYLAST)) + return 0; + else + { + int yytype = YYTRANSLATE (yychar); + YYSIZE_T yysize0 = yytnamerr (0, yytname[yytype]); + YYSIZE_T yysize = yysize0; + YYSIZE_T yysize1; + int yysize_overflow = 0; + enum { YYERROR_VERBOSE_ARGS_MAXIMUM = 5 }; + char const *yyarg[YYERROR_VERBOSE_ARGS_MAXIMUM]; + int yyx; + +# if 0 + /* This is so xgettext sees the translatable formats that are + constructed on the fly. */ + YY_("syntax error, unexpected %s"); + YY_("syntax error, unexpected %s, expecting %s"); + YY_("syntax error, unexpected %s, expecting %s or %s"); + YY_("syntax error, unexpected %s, expecting %s or %s or %s"); + YY_("syntax error, unexpected %s, expecting %s or %s or %s or %s"); +# endif + char *yyfmt; + char const *yyf; + static char const yyunexpected[] = "syntax error, unexpected %s"; + static char const yyexpecting[] = ", expecting %s"; + static char const yyor[] = " or %s"; + char yyformat[sizeof yyunexpected + + sizeof yyexpecting - 1 + + ((YYERROR_VERBOSE_ARGS_MAXIMUM - 2) + * (sizeof yyor - 1))]; + char const *yyprefix = yyexpecting; + + /* Start YYX at -YYN if negative to avoid negative indexes in + YYCHECK. */ + int yyxbegin = yyn < 0 ? -yyn : 0; + + /* Stay within bounds of both yycheck and yytname. */ + int yychecklim = YYLAST - yyn + 1; + int yyxend = yychecklim < YYNTOKENS ? yychecklim : YYNTOKENS; + int yycount = 1; + + yyarg[0] = yytname[yytype]; + yyfmt = yystpcpy (yyformat, yyunexpected); + + for (yyx = yyxbegin; yyx < yyxend; ++yyx) + if (yycheck[yyx + yyn] == yyx && yyx != YYTERROR) + { + if (yycount == YYERROR_VERBOSE_ARGS_MAXIMUM) + { + yycount = 1; + yysize = yysize0; + yyformat[sizeof yyunexpected - 1] = '\0'; + break; + } + yyarg[yycount++] = yytname[yyx]; + yysize1 = yysize + yytnamerr (0, yytname[yyx]); + yysize_overflow |= (yysize1 < yysize); + yysize = yysize1; + yyfmt = yystpcpy (yyfmt, yyprefix); + yyprefix = yyor; + } + + yyf = YY_(yyformat); + yysize1 = yysize + yystrlen (yyf); + yysize_overflow |= (yysize1 < yysize); + yysize = yysize1; + + if (yysize_overflow) + return YYSIZE_MAXIMUM; + + if (yyresult) + { + /* Avoid sprintf, as that infringes on the user's name space. + Don't have undefined behavior even if the translation + produced a string with the wrong number of "%s"s. */ + char *yyp = yyresult; + int yyi = 0; + while ((*yyp = *yyf) != '\0') + { + if (*yyp == '%' && yyf[1] == 's' && yyi < yycount) + { + yyp += yytnamerr (yyp, yyarg[yyi++]); + yyf += 2; + } + else + { + yyp++; + yyf++; + } + } + } + return yysize; + } +} +#endif /* YYERROR_VERBOSE */ + + +/*-----------------------------------------------. +| Release the memory associated to this symbol. | +`-----------------------------------------------*/ + +/*ARGSUSED*/ +#if (defined __STDC__ || defined __C99__FUNC__ \ + || defined __cplusplus || defined _MSC_VER) +static void +yydestruct (const char *yymsg, int yytype, YYSTYPE *yyvaluep) +#else +static void +yydestruct (yymsg, yytype, yyvaluep) + const char *yymsg; + int yytype; + YYSTYPE *yyvaluep; +#endif +{ + YYUSE (yyvaluep); + + if (!yymsg) + yymsg = "Deleting"; + YY_SYMBOL_PRINT (yymsg, yytype, yyvaluep, yylocationp); + + switch (yytype) + { + + default: + break; + } +} + + +/* Prevent warnings from -Wmissing-prototypes. */ + +#ifdef YYPARSE_PARAM +#if defined __STDC__ || defined __cplusplus +int yyparse (void *YYPARSE_PARAM); +#else +int yyparse (); +#endif +#else /* ! YYPARSE_PARAM */ +#if defined __STDC__ || defined __cplusplus +int yyparse (void); +#else +int yyparse (); +#endif +#endif /* ! YYPARSE_PARAM */ + + + +/* The look-ahead symbol. */ +int yychar; + +/* The semantic value of the look-ahead symbol. */ +YYSTYPE yylval; + +/* Number of syntax errors so far. */ +int yynerrs; + + + +/*----------. +| yyparse. | +`----------*/ + +#ifdef YYPARSE_PARAM +#if (defined __STDC__ || defined __C99__FUNC__ \ + || defined __cplusplus || defined _MSC_VER) +int +yyparse (void *YYPARSE_PARAM) +#else +int +yyparse (YYPARSE_PARAM) + void *YYPARSE_PARAM; +#endif +#else /* ! YYPARSE_PARAM */ +#if (defined __STDC__ || defined __C99__FUNC__ \ + || defined __cplusplus || defined _MSC_VER) +int +yyparse (void) +#else +int +yyparse () + +#endif +#endif +{ + + int yystate; + int yyn; + int yyresult; + /* Number of tokens to shift before error messages enabled. */ + int yyerrstatus; + /* Look-ahead token as an internal (translated) token number. */ + int yytoken = 0; +#if YYERROR_VERBOSE + /* Buffer for error messages, and its allocated size. */ + char yymsgbuf[128]; + char *yymsg = yymsgbuf; + YYSIZE_T yymsg_alloc = sizeof yymsgbuf; +#endif + + /* Three stacks and their tools: + `yyss': related to states, + `yyvs': related to semantic values, + `yyls': related to locations. + + Refer to the stacks thru separate pointers, to allow yyoverflow + to reallocate them elsewhere. */ + + /* The state stack. */ + yytype_int16 yyssa[YYINITDEPTH]; + yytype_int16 *yyss = yyssa; + yytype_int16 *yyssp; + + /* The semantic value stack. */ + YYSTYPE yyvsa[YYINITDEPTH]; + YYSTYPE *yyvs = yyvsa; + YYSTYPE *yyvsp; + + + +#define YYPOPSTACK(N) (yyvsp -= (N), yyssp -= (N)) + + YYSIZE_T yystacksize = YYINITDEPTH; + + /* The variables used to return semantic value and location from the + action routines. */ + YYSTYPE yyval; + + + /* The number of symbols on the RHS of the reduced rule. + Keep to zero when no symbol should be popped. */ + int yylen = 0; + + YYDPRINTF ((stderr, "Starting parse\n")); + + yystate = 0; + yyerrstatus = 0; + yynerrs = 0; + yychar = YYEMPTY; /* Cause a token to be read. */ + + /* Initialize stack pointers. + Waste one element of value and location stack + so that they stay on the same level as the state stack. + The wasted elements are never initialized. */ + + yyssp = yyss; + yyvsp = yyvs; + + goto yysetstate; + +/*------------------------------------------------------------. +| yynewstate -- Push a new state, which is found in yystate. | +`------------------------------------------------------------*/ + yynewstate: + /* In all cases, when you get here, the value and location stacks + have just been pushed. So pushing a state here evens the stacks. */ + yyssp++; + + yysetstate: + *yyssp = yystate; + + if (yyss + yystacksize - 1 <= yyssp) + { + /* Get the current used size of the three stacks, in elements. */ + YYSIZE_T yysize = yyssp - yyss + 1; + +#ifdef yyoverflow + { + /* Give user a chance to reallocate the stack. Use copies of + these so that the &'s don't force the real ones into + memory. */ + YYSTYPE *yyvs1 = yyvs; + yytype_int16 *yyss1 = yyss; + + + /* Each stack pointer address is followed by the size of the + data in use in that stack, in bytes. This used to be a + conditional around just the two extra args, but that might + be undefined if yyoverflow is a macro. */ + yyoverflow (YY_("memory exhausted"), + &yyss1, yysize * sizeof (*yyssp), + &yyvs1, yysize * sizeof (*yyvsp), + + &yystacksize); + + yyss = yyss1; + yyvs = yyvs1; + } +#else /* no yyoverflow */ +# ifndef YYSTACK_RELOCATE + goto yyexhaustedlab; +# else + /* Extend the stack our own way. */ + if (YYMAXDEPTH <= yystacksize) + goto yyexhaustedlab; + yystacksize *= 2; + if (YYMAXDEPTH < yystacksize) + yystacksize = YYMAXDEPTH; + + { + yytype_int16 *yyss1 = yyss; + union yyalloc *yyptr = + (union yyalloc *) YYSTACK_ALLOC (YYSTACK_BYTES (yystacksize)); + if (! yyptr) + goto yyexhaustedlab; + YYSTACK_RELOCATE (yyss); + YYSTACK_RELOCATE (yyvs); + +# undef YYSTACK_RELOCATE + if (yyss1 != yyssa) + YYSTACK_FREE (yyss1); + } +# endif +#endif /* no yyoverflow */ + + yyssp = yyss + yysize - 1; + yyvsp = yyvs + yysize - 1; + + + YYDPRINTF ((stderr, "Stack size increased to %lu\n", + (unsigned long int) yystacksize)); + + if (yyss + yystacksize - 1 <= yyssp) + YYABORT; + } + + YYDPRINTF ((stderr, "Entering state %d\n", yystate)); + + goto yybackup; + +/*-----------. +| yybackup. | +`-----------*/ +yybackup: + + /* Do appropriate processing given the current state. Read a + look-ahead token if we need one and don't already have one. */ + + /* First try to decide what to do without reference to look-ahead token. */ + yyn = yypact[yystate]; + if (yyn == YYPACT_NINF) + goto yydefault; + + /* Not known => get a look-ahead token if don't already have one. */ + + /* YYCHAR is either YYEMPTY or YYEOF or a valid look-ahead symbol. */ + if (yychar == YYEMPTY) + { + YYDPRINTF ((stderr, "Reading a token: ")); + yychar = YYLEX; + } + + if (yychar <= YYEOF) + { + yychar = yytoken = YYEOF; + YYDPRINTF ((stderr, "Now at end of input.\n")); + } + else + { + yytoken = YYTRANSLATE (yychar); + YY_SYMBOL_PRINT ("Next token is", yytoken, &yylval, &yylloc); + } + + /* If the proper action on seeing token YYTOKEN is to reduce or to + detect an error, take that action. */ + yyn += yytoken; + if (yyn < 0 || YYLAST < yyn || yycheck[yyn] != yytoken) + goto yydefault; + yyn = yytable[yyn]; + if (yyn <= 0) + { + if (yyn == 0 || yyn == YYTABLE_NINF) + goto yyerrlab; + yyn = -yyn; + goto yyreduce; + } + + if (yyn == YYFINAL) + YYACCEPT; + + /* Count tokens shifted since error; after three, turn off error + status. */ + if (yyerrstatus) + yyerrstatus--; + + /* Shift the look-ahead token. */ + YY_SYMBOL_PRINT ("Shifting", yytoken, &yylval, &yylloc); + + /* Discard the shifted token unless it is eof. */ + if (yychar != YYEOF) + yychar = YYEMPTY; + + yystate = yyn; + *++yyvsp = yylval; + + goto yynewstate; + + +/*-----------------------------------------------------------. +| yydefault -- do the default action for the current state. | +`-----------------------------------------------------------*/ +yydefault: + yyn = yydefact[yystate]; + if (yyn == 0) + goto yyerrlab; + goto yyreduce; + + +/*-----------------------------. +| yyreduce -- Do a reduction. | +`-----------------------------*/ +yyreduce: + /* yyn is the number of a rule to reduce with. */ + yylen = yyr2[yyn]; + + /* If YYLEN is nonzero, implement the default value of the action: + `$$ = $1'. + + Otherwise, the following line sets YYVAL to garbage. + This behavior is undocumented and Bison + users should not rely upon it. Assigning to YYVAL + unconditionally makes the parser a bit smaller, and it avoids a + GCC warning that YYVAL may be used uninitialized. */ + yyval = yyvsp[1-yylen]; + + + YY_REDUCE_PRINT (yyn); + switch (yyn) + { + case 2: +#line 62 "glang.y" + { ;} + break; + + case 3: +#line 64 "glang.y" + { debug("ident expr"); gGLReader->newIDExpr((yyvsp[(1) - (3)].strPtr)->c_str(), (yyvsp[(3) - (3)].exprPtr)); delete (yyvsp[(1) - (3)].strPtr); delete (yyvsp[(3) - (3)].exprPtr); ;} + break; + + case 4: +#line 65 "glang.y" + { debug("deflist..."); gGLReader->newIDExpr((yyvsp[(2) - (4)].strPtr)->c_str(), (yyvsp[(4) - (4)].exprPtr)); delete (yyvsp[(2) - (4)].strPtr); delete (yyvsp[(4) - (4)].exprPtr); ;} + break; + + case 5: +#line 68 "glang.y" + { debug("score expr"); (yyval.exprPtr) = gGLReader->newScoreExpr(glangtext); + if (!(yyval.exprPtr)) { glangerror("Error while parsing gmn code"); YYERROR; } ;} + break; + + case 6: +#line 70 "glang.y" + { debug("op expr"); (yyval.exprPtr) = gGLReader->newBinaryExpr((yyvsp[(2) - (3)].strPtr)->c_str(),(yyvsp[(1) - (3)].exprPtr),(yyvsp[(3) - (3)].exprPtr)); clean((yyvsp[(1) - (3)].exprPtr),(yyvsp[(2) - (3)].strPtr),(yyvsp[(3) - (3)].exprPtr)); ;} + break; + + case 7: +#line 71 "glang.y" + { debug("abstract expr"); (yyval.exprPtr) = gGLReader->newAbstractExpr((yyvsp[(3) - (4)].strPtr)->c_str(),(yyvsp[(2) - (4)].exprPtr),(yyvsp[(4) - (4)].exprPtr)); clean((yyvsp[(2) - (4)].exprPtr),(yyvsp[(3) - (4)].strPtr),(yyvsp[(4) - (4)].exprPtr)); ;} + break; + + case 8: +#line 72 "glang.y" + { debug("named expr"); (yyval.exprPtr) = gGLReader->newNamedExpr((yyvsp[(1) - (1)].strPtr)->c_str()); delete (yyvsp[(1) - (1)].strPtr); + if (!(yyval.exprPtr)) { glangerror("Undefined named expression used"); YYERROR; } ;} + break; + + case 9: +#line 74 "glang.y" + { debug("group expr"); (yyval.exprPtr) = gGLReader->newGroupExpr((yyvsp[(1) - (1)].exprPtr)); delete (yyvsp[(1) - (1)].exprPtr); ;} + break; + + case 10: +#line 77 "glang.y" + { debug("group expr"); (yyval.exprPtr) = (yyvsp[(2) - (3)].exprPtr); ;} + break; + + case 11: +#line 79 "glang.y" + { debug("seq"); (yyval.strPtr) = new std::string (glangtext); ;} + break; + + case 12: +#line 80 "glang.y" + { debug("par"); (yyval.strPtr) = new std::string (glangtext); ;} + break; + + case 13: +#line 81 "glang.y" + { debug("head"); (yyval.strPtr) = new std::string (glangtext); ;} + break; + + case 14: +#line 82 "glang.y" + { debug("tail"); (yyval.strPtr) = new std::string (glangtext); ;} + break; + + case 15: +#line 83 "glang.y" + { debug("top"); (yyval.strPtr) = new std::string (glangtext); ;} + break; + + case 16: +#line 84 "glang.y" + { debug("bottom"); (yyval.strPtr) = new std::string (glangtext); ;} + break; + + case 17: +#line 85 "glang.y" + { debug("apply"); (yyval.strPtr) = new std::string (glangtext); ;} + break; + + case 18: +#line 87 "glang.y" + { debug("asep"); (yyval.strPtr) = new std::string (glangtext); ;} + break; + + case 19: +#line 88 "glang.y" + { debug("name"); (yyval.strPtr) = new std::string (glangtext); ;} + break; + + +/* Line 1267 of yacc.c. */ +#line 1481 "glangparse.cpp" + default: break; + } + YY_SYMBOL_PRINT ("-> $$ =", yyr1[yyn], &yyval, &yyloc); + + YYPOPSTACK (yylen); + yylen = 0; + YY_STACK_PRINT (yyss, yyssp); + + *++yyvsp = yyval; + + + /* Now `shift' the result of the reduction. Determine what state + that goes to, based on the state we popped back to and the rule + number reduced by. */ + + yyn = yyr1[yyn]; + + yystate = yypgoto[yyn - YYNTOKENS] + *yyssp; + if (0 <= yystate && yystate <= YYLAST && yycheck[yystate] == *yyssp) + yystate = yytable[yystate]; + else + yystate = yydefgoto[yyn - YYNTOKENS]; + + goto yynewstate; + + +/*------------------------------------. +| yyerrlab -- here on detecting error | +`------------------------------------*/ +yyerrlab: + /* If not already recovering from an error, report this error. */ + if (!yyerrstatus) + { + ++yynerrs; +#if ! YYERROR_VERBOSE + yyerror (YY_("syntax error")); +#else + { + YYSIZE_T yysize = yysyntax_error (0, yystate, yychar); + if (yymsg_alloc < yysize && yymsg_alloc < YYSTACK_ALLOC_MAXIMUM) + { + YYSIZE_T yyalloc = 2 * yysize; + if (! (yysize <= yyalloc && yyalloc <= YYSTACK_ALLOC_MAXIMUM)) + yyalloc = YYSTACK_ALLOC_MAXIMUM; + if (yymsg != yymsgbuf) + YYSTACK_FREE (yymsg); + yymsg = (char *) YYSTACK_ALLOC (yyalloc); + if (yymsg) + yymsg_alloc = yyalloc; + else + { + yymsg = yymsgbuf; + yymsg_alloc = sizeof yymsgbuf; + } + } + + if (0 < yysize && yysize <= yymsg_alloc) + { + (void) yysyntax_error (yymsg, yystate, yychar); + yyerror (yymsg); + } + else + { + yyerror (YY_("syntax error")); + if (yysize != 0) + goto yyexhaustedlab; + } + } +#endif + } + + + + if (yyerrstatus == 3) + { + /* If just tried and failed to reuse look-ahead token after an + error, discard it. */ + + if (yychar <= YYEOF) + { + /* Return failure if at end of input. */ + if (yychar == YYEOF) + YYABORT; + } + else + { + yydestruct ("Error: discarding", + yytoken, &yylval); + yychar = YYEMPTY; + } + } + + /* Else will try to reuse look-ahead token after shifting the error + token. */ + goto yyerrlab1; + + +/*---------------------------------------------------. +| yyerrorlab -- error raised explicitly by YYERROR. | +`---------------------------------------------------*/ +yyerrorlab: + + /* Pacify compilers like GCC when the user code never invokes + YYERROR and the label yyerrorlab therefore never appears in user + code. */ + if (/*CONSTCOND*/ 0) + goto yyerrorlab; + + /* Do not reclaim the symbols of the rule which action triggered + this YYERROR. */ + YYPOPSTACK (yylen); + yylen = 0; + YY_STACK_PRINT (yyss, yyssp); + yystate = *yyssp; + goto yyerrlab1; + + +/*-------------------------------------------------------------. +| yyerrlab1 -- common code for both syntax error and YYERROR. | +`-------------------------------------------------------------*/ +yyerrlab1: + yyerrstatus = 3; /* Each real token shifted decrements this. */ + + for (;;) + { + yyn = yypact[yystate]; + if (yyn != YYPACT_NINF) + { + yyn += YYTERROR; + if (0 <= yyn && yyn <= YYLAST && yycheck[yyn] == YYTERROR) + { + yyn = yytable[yyn]; + if (0 < yyn) + break; + } + } + + /* Pop the current state because it cannot handle the error token. */ + if (yyssp == yyss) + YYABORT; + + + yydestruct ("Error: popping", + yystos[yystate], yyvsp); + YYPOPSTACK (1); + yystate = *yyssp; + YY_STACK_PRINT (yyss, yyssp); + } + + if (yyn == YYFINAL) + YYACCEPT; + + *++yyvsp = yylval; + + + /* Shift the error token. */ + YY_SYMBOL_PRINT ("Shifting", yystos[yyn], yyvsp, yylsp); + + yystate = yyn; + goto yynewstate; + + +/*-------------------------------------. +| yyacceptlab -- YYACCEPT comes here. | +`-------------------------------------*/ +yyacceptlab: + yyresult = 0; + goto yyreturn; + +/*-----------------------------------. +| yyabortlab -- YYABORT comes here. | +`-----------------------------------*/ +yyabortlab: + yyresult = 1; + goto yyreturn; + +#ifndef yyoverflow +/*-------------------------------------------------. +| yyexhaustedlab -- memory exhaustion comes here. | +`-------------------------------------------------*/ +yyexhaustedlab: + yyerror (YY_("memory exhausted")); + yyresult = 2; + /* Fall through. */ +#endif + +yyreturn: + if (yychar != YYEOF && yychar != YYEMPTY) + yydestruct ("Cleanup: discarding lookahead", + yytoken, &yylval); + /* Do not reclaim the symbols of the rule which action triggered + this YYABORT or YYACCEPT. */ + YYPOPSTACK (yylen); + YY_STACK_PRINT (yyss, yyssp); + while (yyssp != yyss) + { + yydestruct ("Cleanup: popping", + yystos[*yyssp], yyvsp); + YYPOPSTACK (1); + } +#ifndef yyoverflow + if (yyss != yyssa) + YYSTACK_FREE (yyss); +#endif +#if YYERROR_VERBOSE + if (yymsg != yymsgbuf) + YYSTACK_FREE (yymsg); +#endif + /* Make sure YYID is used. */ + return YYID (yyresult); +} + + +#line 90 "glang.y" + + +int glangwrap() { return(1); } + +int glangerror(const char* s) { + YY_FLUSH_BUFFER; + return gGLReader->error(s, glanglineno); + return 0; +} + + diff --git a/guidoar-dev/src/lang/parser/glangparse.hpp b/guidoar-dev/src/lang/parser/glangparse.hpp new file mode 100644 index 000000000..5f215ab5e --- /dev/null +++ b/guidoar-dev/src/lang/parser/glangparse.hpp @@ -0,0 +1,93 @@ +/* A Bison parser, made by GNU Bison 2.3. */ + +/* Skeleton interface for Bison's Yacc-like parsers in C + + Copyright (C) 1984, 1989, 1990, 2000, 2001, 2002, 2003, 2004, 2005, 2006 + Free Software Foundation, Inc. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2, or (at your option) + any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin Street, Fifth Floor, + Boston, MA 02110-1301, USA. */ + +/* As a special exception, you may create a larger work that contains + part or all of the Bison parser skeleton and distribute that work + under terms of your choice, so long as that work isn't itself a + parser generator using the skeleton or a modified version thereof + as a parser skeleton. Alternatively, if you modify or redistribute + the parser skeleton itself, you may (at your option) remove this + special exception, which will cause the skeleton and the resulting + Bison output files to be licensed under the GNU General Public + License without this special exception. + + This special exception was added by the Free Software Foundation in + version 2.2 of Bison. */ + +/* Tokens. */ +#ifndef YYTOKENTYPE +# define YYTOKENTYPE + /* Put the tokens into the symbol table, so that GDB and other debuggers + know about them. */ + enum yytokentype { + GMN = 258, + GROUPSTART = 259, + GROUPEND = 260, + ASEP = 261, + EQ = 262, + IDENT = 263, + BOTTOM = 264, + TOP = 265, + TAIL = 266, + HEAD = 267, + PAR = 268, + SEQ = 269, + APPLY = 270, + ABSTRACT = 271 + }; +#endif +/* Tokens. */ +#define GMN 258 +#define GROUPSTART 259 +#define GROUPEND 260 +#define ASEP 261 +#define EQ 262 +#define IDENT 263 +#define BOTTOM 264 +#define TOP 265 +#define TAIL 266 +#define HEAD 267 +#define PAR 268 +#define SEQ 269 +#define APPLY 270 +#define ABSTRACT 271 + + + + +#if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED +typedef union YYSTYPE +#line 30 "glang.y" +{ + SGLExpr* exprPtr; + std::string * strPtr; +} +/* Line 1529 of yacc.c. */ +#line 86 "glangparse.hpp" + YYSTYPE; +# define yystype YYSTYPE /* obsolescent; will be withdrawn */ +# define YYSTYPE_IS_DECLARED 1 +# define YYSTYPE_IS_TRIVIAL 1 +#endif + +extern YYSTYPE glanglval; + diff --git a/guidoar-dev/src/lang/parser/glangreader.h b/guidoar-dev/src/lang/parser/glangreader.h new file mode 100644 index 000000000..6e713a022 --- /dev/null +++ b/guidoar-dev/src/lang/parser/glangreader.h @@ -0,0 +1,59 @@ +/* + GUIDO Library + Copyright (C) 2008 Grame + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + + Grame Research Laboratory, 9 rue du Garet, 69001 Lyon - France + research@grame.fr + +*/ + +#ifndef __glangreader__ +#define __glangreader__ + +#ifdef MAIN +# include + typedef std::string SGLExpr; +#else +# include "guidoexpression.h" + typedef guidolang::Sguidoexpression SGLExpr; +#endif + +namespace guidolang +{ + +//______________________________________________________________________________ +/*! +\brief An abstract class supporting the glang parser interface. +*/ +class glangreader +{ + public: + virtual ~glangreader() {} + + virtual void newIDExpr (const char *, SGLExpr*) = 0; + virtual SGLExpr* newScoreExpr (const char *) = 0; + virtual SGLExpr* newNamedExpr (const char *) = 0; + virtual SGLExpr* newGroupExpr (SGLExpr*) = 0; + virtual SGLExpr* newAbstractExpr (const char *, SGLExpr*, SGLExpr*) = 0; + virtual SGLExpr* newBinaryExpr (const char *, SGLExpr*, SGLExpr*) = 0; + + virtual int error(const char * msg, int lineno) = 0; +}; + +} // namespace + +#endif diff --git a/guidoar-dev/src/lang/parser/glparser.cpp b/guidoar-dev/src/lang/parser/glparser.cpp new file mode 100644 index 000000000..5b9428996 --- /dev/null +++ b/guidoar-dev/src/lang/parser/glparser.cpp @@ -0,0 +1,160 @@ +/* + GUIDO Library + Copyright (C) 2008 Grame + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + + Grame Research Laboratory, 9 rue du Garet, 69001 Lyon - France + research@grame.fr + +*/ + +#ifdef WIN32 +# pragma warning (disable : 4786 4244 4018 4065) +# pragma warning (disable : 4996) +# pragma warning (disable : 4102) +#endif + +//#define GLDEBUG + +#ifdef GLDEBUG +# define YYDEBUG 1 +#endif +#include "glangparse.cpp" + +#include +#include "glparser.h" + +#define yyin glangin +#define yyrestart glangrestart +#define yy_delete_buffer glang_delete_buffer +#define yy_scan_string glang_scan_string + +#ifdef GLDEBUG + extern int yydebug; +# define pdebug yydebug = 1 +#else +# define pdebug +#endif + +guidolang::glangreader * gGLReader; + +namespace guidolang +{ + +int glparser::parse (FILE *fd) +{ + if (!fd) { + gGLReader->error("Invalid file descriptor", 0 ); + return(-1); + } + yyin = fd; + pdebug; + + glanglineno = 0; + int res = yyparse(); + yyrestart(yyin); + BEGIN(INITIAL); + return res; +} + +int glparser::parse (const char *filename) +{ + int res; + if( !filename ) return -1; // parse error + FILE * fd = fopen(filename,"r"); + if (fd == NULL){ + gGLReader->error("Cannot not open file", 0 ); + return(-1); + } + pdebug; + res = parse(fd); + fclose(fd); + return res; +} + +bool glparser::readstring (const char * buffer, glangreader * r) +{ + gGLReader = r; + if (!*buffer) return false; // error for empty buffers + + YY_BUFFER_STATE b; + b = yy_scan_string (buffer); // Copy string into new buffer and Switch buffers + pdebug; + glanglineno = 1; + int ret = yyparse(); // parse the string + yy_delete_buffer(b); // delete the new buffer + BEGIN(INITIAL); // and return to INITIAL state + return ret==0; +} + +bool glparser::readfile (FILE* fd, glangreader * r) +{ + gGLReader = r; + return parse (fd) == 0; +} + +bool glparser::readfile (const char * file, glangreader * r) +{ + gGLReader = r; + return parse (file) == 0; +} + +} // namespace + +#ifdef MAIN + +using namespace std; +using namespace guidolang; + +#define catOp(str,a,b,c) *str+="("; *str+=*a; *str+=b; *str+=*c; *str+=")" + +class testreader : public glangreader +{ + public: + virtual void newIDExpr (const char *id, SGLExpr* e) + { cout << "new identified expression: " << id << " = " << *e << endl; } + + virtual SGLExpr* newNamedExpr (const char *name) + { cout << "newNamedExpr: " << name << endl; return new SGLExpr(name); } + + virtual SGLExpr* newGroupExpr (SGLExpr* e) + { cout << "newGroupedExpr: " << *e << endl; SGLExpr* str = new string; *str+="<"; *str+=*e; *str+=">";return str; } + + virtual SGLExpr* newScoreExpr (const char *gmn) + { return new SGLExpr(gmn); } + + virtual SGLExpr* newBinaryExpr (const char * name, SGLExpr* e1, SGLExpr* e2) + { SGLExpr* str = new string(); catOp(str, e1, name, e2); cout << "newBinaryExpr: " << *str << endl; return str; } + + virtual SGLExpr* newAbstractExpr (const char * name, SGLExpr* e1, SGLExpr* e2) + { SGLExpr* str = new string(); catOp(str, e1, name, e2); cout << "newAbstractExpr: " << *str << endl; return str; } + + int error (const char* msg, int lineno) + { cerr << msg << " on line " << lineno << endl; return 0; } +}; + + +int main (int argc, char * argv[]) +{ + if (argc > 1) { + testreader r; + glparser glp; + return glp.readfile (argv[1], &r) ? 0 : 1; + } + return 0; +} +#endif + diff --git a/guidoar-dev/src/lang/parser/glparser.h b/guidoar-dev/src/lang/parser/glparser.h new file mode 100644 index 000000000..4a2f7392d --- /dev/null +++ b/guidoar-dev/src/lang/parser/glparser.h @@ -0,0 +1,50 @@ +/* + GUIDO Library + Copyright (C) 2008 Grame + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + + Grame Research Laboratory, 9 rue du Garet, 69001 Lyon - France + research@grame.fr + +*/ + +#ifndef __glparser__ +#define __glparser__ + +#include + +namespace guidolang +{ + +class glangreader; + +class glparser +{ + public: + static bool readstring (const char * buffer, glangreader * r); + static bool readfile (FILE* fd, glangreader * r); + static bool readfile (const char * file, glangreader * r); + + private: + static int parse (FILE *fd); + static int parse (const char *filename); + +}; + +} + +#endif + diff --git a/guidoar-dev/src/lang/parser/guidoExpReader.cpp b/guidoar-dev/src/lang/parser/guidoExpReader.cpp new file mode 100644 index 000000000..83b195d1d --- /dev/null +++ b/guidoar-dev/src/lang/parser/guidoExpReader.cpp @@ -0,0 +1,129 @@ +/* + GUIDO Library + Copyright (C) 2008 Grame + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + + Grame Research Laboratory, 9 rue du Garet, 69001 Lyon - France + research@grame.fr + +*/ + +#ifndef __guidoreader__ +#define __guidoreader__ + +#include + +#include "AROthers.h" +#include "guidoExpFactory.h" +#include "guidoExpReader.h" +#include "guidoelement.h" +#include "guidoparser.h" +#include "glparser.h" + +using namespace std; +using namespace guido; + +namespace guidolang +{ + +//______________________________________________________________________________ +int guidoExpReader::version () const { return 91; } +const char* guidoExpReader::versionStr () const +{ + static char versBuff[32]; + int v = version(); + sprintf (versBuff, "%d.%d", v/100, v%100); + return versBuff; +} + +//______________________________________________________________________________ +bool guidoExpReader::parseFile (FILE* fd) { return glparser::readfile (fd, this); } +bool guidoExpReader::parseFile (const char* file) { return glparser::readfile (file, this); } +bool guidoExpReader::parseString (const char* str) { return glparser::readstring (str, this); } + + +//______________________________________________________________________________ +SGLExpr guidoExpReader::getId(const string& id) +{ + pair i = fExprMap.equal_range(id); + if (i.first != i.second) + return (*i.first).second; + return 0; +} + +//______________________________________________________________________________ +void guidoExpReader::newIDExpr (const char * id, SGLExpr* e) +{ + if (e) fExprMap[id] = *e; +} + +SGLExpr* guidoExpReader::newGroupExpr (SGLExpr* e) +{ + if (!e) return 0; + SGLExpr* expr = new SGLExpr; + *expr = guidoExpFactory::instance().create("group", *e); + return expr; +} + +SGLExpr* guidoExpReader::newNamedExpr (const char * name) +{ + SGLExpr e = getId(name); + if (e) { + SGLExpr* expr = new SGLExpr; + *expr = guidoExpFactory::instance().createNamed(name, e); + return expr; + } + return 0; +} + +SGLExpr* guidoExpReader::newScoreExpr (const char * gmnCode) +{ + SGLExpr* expr = new SGLExpr; + guidoparser gp; + Sguidoelement score = gp.parseString (gmnCode); + if (score) { + *expr = guidoExpFactory::instance().create(score); + return expr; + } + return 0; +} + +SGLExpr* guidoExpReader::newBinaryExpr (const char * name, SGLExpr* e1, SGLExpr* e2) +{ + if (!e1 || !e2) return 0; + SGLExpr* expr = new SGLExpr; + *expr = guidoExpFactory::instance().create(name, *e1, *e2); + return expr; +} + +SGLExpr* guidoExpReader::newAbstractExpr (const char * name, SGLExpr* e1, SGLExpr* e2) +{ + if (!e1 || !e2) return 0; + SGLExpr* expr = new SGLExpr; + *expr = guidoExpFactory::instance().createAbstract(name, *e1, *e2); + return expr; +} + +int guidoExpReader::error(const char * msg, int lineno) +{ + cerr << msg << " on line " << lineno << endl; + return 0; +} + + +} // namespace + +#endif diff --git a/guidoar-dev/src/lang/parser/guidoExpReader.h b/guidoar-dev/src/lang/parser/guidoExpReader.h new file mode 100644 index 000000000..04974639b --- /dev/null +++ b/guidoar-dev/src/lang/parser/guidoExpReader.h @@ -0,0 +1,71 @@ +/* + GUIDO Library + Copyright (C) 2008 Grame + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + + Grame Research Laboratory, 9 rue du Garet, 69001 Lyon - France + research@grame.fr + +*/ + +#ifndef __guidoExpReader__ +#define __guidoExpReader__ + +#include +#include + +#include "guidoexpression.h" +#include "glangreader.h" + +namespace guidolang +{ + +//______________________________________________________________________________ +/*! +\brief An concrete class supporting the glang parser interface. +*/ +class guidoExpReader : public glangreader +{ + public: + typedef std::map ExpList; + + int version() const; + const char* versionStr() const; + + bool parseFile (FILE* fd); + bool parseFile (const char* file); + bool parseString(const char* string); + + virtual void newIDExpr (const char *, SGLExpr*); + virtual SGLExpr* newScoreExpr (const char *); + virtual SGLExpr* newBinaryExpr (const char *, SGLExpr*, SGLExpr*); + virtual SGLExpr* newAbstractExpr (const char *, SGLExpr*, SGLExpr*); + virtual SGLExpr* newNamedExpr (const char *); + virtual SGLExpr* newGroupExpr (SGLExpr*); + + virtual int error(const char * msg, int lineno); + + virtual void clear() { return fExprMap.clear(); } + virtual const ExpList& getEnv() { return fExprMap; } + virtual SGLExpr getId(const std::string& id); + + protected: + ExpList fExprMap; +}; + +} // namespace + +#endif diff --git a/guidoar-dev/src/lang/parser/makefile b/guidoar-dev/src/lang/parser/makefile new file mode 100644 index 000000000..1ea54f838 --- /dev/null +++ b/guidoar-dev/src/lang/parser/makefile @@ -0,0 +1,22 @@ + +OUT = glanglex.cpp glangparse.cpp glangparse.hpp +YACC = bison +LEX = flex +PREFIX := glang + +code : $(OUT) + +glangparse.cpp : glang.y glanglex.cpp glangparse.hpp + $(YACC) -d -o glangparse.cpp -p $(PREFIX) glang.y + +glangparse.hpp : glang.y + $(YACC) -d -o glangparse.cpp -p $(PREFIX) glang.y + +glanglex.cpp : glang.l + $(LEX) -oglanglex.cpp -I -P$(PREFIX) glang.l + +testGL : glparser.cpp glangparse.cpp glangparse.hpp glanglex.cpp + gcc glparser.cpp -DMAIN -lstdc++ -o testGL + +clean: + rm -f $(OUT) testGL diff --git a/guidoar-dev/src/lang/suspensions/guidoApplySusp.cpp b/guidoar-dev/src/lang/suspensions/guidoApplySusp.cpp new file mode 100644 index 000000000..e8ba4c898 --- /dev/null +++ b/guidoar-dev/src/lang/suspensions/guidoApplySusp.cpp @@ -0,0 +1,68 @@ +/* + GUIDO Library + Copyright (C) 2006 Grame + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + + Grame Research Laboratory, 9 rue du Garet, 69001 Lyon - France + research@grame.fr + +*/ + +#include + +#include "guidoApplySusp.h" +#include "exceptions.h" +#include "visitor.h" + +using namespace std; +using namespace guido; + +namespace guidolang +{ + +//______________________________________________________________________________ +// guidoApplySusp +//______________________________________________________________________________ +guidoApplySusp::guidoApplySusp(Sguidovalue e, Sguidovalue a) + : fExp(e), fArg(a) {} + +Sguidovalue guidoApplySusp::create(Sguidovalue e, Sguidovalue a) + { suspCreate("guidoApplySusp"); guidoApplySusp * o = new guidoApplySusp(e,a); assert(o!=0); return o; } + +//______________________________________________________________________________ +Sguidovalue guidoApplySusp::force() +{ + suspForce("guidoApplySusp"); + return fExp->apply (fArg); +} + +//______________________________________________________________________________ +void guidoApplySusp::acceptIn(basevisitor& v) { + if (visitor* p = dynamic_cast*>(&v)) { + SguidoApplySusp ge = this; + p->visitStart (ge); + } +} + +//______________________________________________________________________________ +void guidoApplySusp::acceptOut(basevisitor& v) { + if (visitor* p = dynamic_cast*>(&v)) { + SguidoApplySusp ge = this; + p->visitEnd (ge); + } +} + +} // namespace diff --git a/guidoar-dev/src/lang/suspensions/guidoApplySusp.h b/guidoar-dev/src/lang/suspensions/guidoApplySusp.h new file mode 100644 index 000000000..c7d335b91 --- /dev/null +++ b/guidoar-dev/src/lang/suspensions/guidoApplySusp.h @@ -0,0 +1,53 @@ +/* + GUIDO Library + Copyright (C) 2006-2008 Grame + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + + Grame Research Laboratory, 9 rue du Garet, 69001 Lyon - France + research@grame.fr + +*/ + +#ifndef __guidoApplySusp__ +#define __guidoApplySusp__ + +#include "guidosusp.h" + +namespace guidolang +{ + +/*! +\brief A guido apply value suspension +*/ +class export guidoApplySusp : public guidosusp +{ + protected: + Sguidovalue fExp, fArg; + + guidoApplySusp(Sguidovalue e, Sguidovalue a); + virtual ~guidoApplySusp() {} + + public: + static Sguidovalue create(Sguidovalue e, Sguidovalue a); + virtual Sguidovalue force(); + virtual void acceptIn(guido::basevisitor& visitor); + virtual void acceptOut(guido::basevisitor& visitor); +}; +typedef guido::SMARTP SguidoApplySusp; + +} // namespace + +#endif diff --git a/guidoar-dev/src/lang/suspensions/guidoEvalSusp.cpp b/guidoar-dev/src/lang/suspensions/guidoEvalSusp.cpp new file mode 100644 index 000000000..a27d54f1f --- /dev/null +++ b/guidoar-dev/src/lang/suspensions/guidoEvalSusp.cpp @@ -0,0 +1,74 @@ +/* + GUIDO Library + Copyright (C) 2006 Grame + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + + Grame Research Laboratory, 9 rue du Garet, 69001 Lyon - France + research@grame.fr + +*/ + +#include + +#include "guidoEvalSusp.h" +#include "exceptions.h" +#include "visitor.h" + +using namespace std; +using namespace guido; + +namespace guidolang +{ + +//______________________________________________________________________________ +// guidoEvalSusp +//______________________________________________________________________________ +guidoEvalSusp::guidoEvalSusp(Sguidoexpression e, SguidoEnv env) + : fExp(e), fEnv(env) {} + +Sguidovalue guidoEvalSusp::create(Sguidoexpression e, SguidoEnv env) + { suspCreate("guidoEvalSusp"); guidoEvalSusp * o = new guidoEvalSusp(e,env); assert(o!=0); return o; } + +//______________________________________________________________________________ +void guidoEvalSusp::print(ostream& os) +{ + os << "guidoEvalSusp"; +} + +//______________________________________________________________________________ +Sguidovalue guidoEvalSusp::force() +{ + suspForce("guidoEvalSusp"); + return fExp->eval(fEnv); +} + +//______________________________________________________________________________ +void guidoEvalSusp::acceptIn(basevisitor& v) { + if (visitor* p = dynamic_cast*>(&v)) { + SguidoEvalSusp ge = this; + p->visitStart (ge); + } +} + +//______________________________________________________________________________ +void guidoEvalSusp::acceptOut(basevisitor& v) { + if (visitor* p = dynamic_cast*>(&v)) { + SguidoEvalSusp ge = this; + p->visitEnd (ge); + } +} + +} // namespace diff --git a/guidoar-dev/src/lang/suspensions/guidoEvalSusp.h b/guidoar-dev/src/lang/suspensions/guidoEvalSusp.h new file mode 100644 index 000000000..066b4a0b8 --- /dev/null +++ b/guidoar-dev/src/lang/suspensions/guidoEvalSusp.h @@ -0,0 +1,57 @@ +/* + GUIDO Library + Copyright (C) 2006-2008 Grame + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + + Grame Research Laboratory, 9 rue du Garet, 69001 Lyon - France + research@grame.fr + +*/ + +#ifndef __guidoEvalSusp__ +#define __guidoEvalSusp__ + +#include "guidosusp.h" +#include "guidoexpression.h" +#include "guidoEnv.h" + +namespace guidolang +{ + +/*! +\brief A guido eval value suspension +*/ +class export guidoEvalSusp : public guidosusp +{ + protected: + Sguidoexpression fExp; + SguidoEnv fEnv; + + guidoEvalSusp(Sguidoexpression e, SguidoEnv env); + virtual ~guidoEvalSusp() {} + + public: + static Sguidovalue create(Sguidoexpression e, SguidoEnv env); + virtual Sguidovalue force(); + virtual void acceptIn(guido::basevisitor& visitor); + virtual void acceptOut(guido::basevisitor& visitor); + virtual void print(std::ostream& os); +}; +typedef guido::SMARTP SguidoEvalSusp; + +} // namespace + +#endif diff --git a/guidoar-dev/src/lang/suspensions/guidoSuspEnum.h b/guidoar-dev/src/lang/suspensions/guidoSuspEnum.h new file mode 100644 index 000000000..2dfd8e1c9 --- /dev/null +++ b/guidoar-dev/src/lang/suspensions/guidoSuspEnum.h @@ -0,0 +1,39 @@ +/* + GUIDO Library + Copyright (C) 2006-2008 Grame + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + + Grame Research Laboratory, 9 rue du Garet, 69001 Lyon - France + research@grame.fr + +*/ + +#ifndef __guidoSuspEnum__ +#define __guidoSuspEnum__ + +namespace guidolang +{ + +enum { + kApplySusp, + kSeqSusp, + kParSusp, + kClosureSusp +}; + +} // namespace + +#endif diff --git a/guidoar-dev/src/lang/suspensions/guidoSuspTypes.h b/guidoar-dev/src/lang/suspensions/guidoSuspTypes.h new file mode 100644 index 000000000..1bc721486 --- /dev/null +++ b/guidoar-dev/src/lang/suspensions/guidoSuspTypes.h @@ -0,0 +1,49 @@ +/* + GUIDO Library + Copyright (C) 2006-2008 Grame + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + + Grame Research Laboratory, 9 rue du Garet, 69001 Lyon - France + research@grame.fr + +*/ + +#ifndef __guidoSuspTypes__ +#define __guidoSuspTypes__ + +#include "guidoSuspEnum.h" +#include "gar_smartpointer.h" + +namespace guidolang +{ + +class guidoEnv; +typedef guido::SMARTP SguidoEnv; +class guidovalue; +typedef guido::SMARTP Sguidovalue; + +template class guidonodesusp; + +typedef guido::SMARTP Sguidosusp; +typedef guido::SMARTP > SguidoApplySusp; +typedef guido::SMARTP > SguidoClosureSusp; +typedef guido::SMARTP > SguidoSeqSusp; +typedef guido::SMARTP > SguidoParSusp; + + +} // namespace + +#endif diff --git a/guidoar-dev/src/lang/suspensions/guidosusp.cpp b/guidoar-dev/src/lang/suspensions/guidosusp.cpp new file mode 100644 index 000000000..19384a343 --- /dev/null +++ b/guidoar-dev/src/lang/suspensions/guidosusp.cpp @@ -0,0 +1,66 @@ +/* + GUIDO Library + Copyright (C) 2006 Grame + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + + Grame Research Laboratory, 9 rue du Garet, 69001 Lyon - France + research@grame.fr + +*/ + +#include + +#include "guidosusp.h" +#include "exceptions.h" +#include "visitor.h" + +using namespace std; +using namespace guido; + +namespace guidolang +{ + +//______________________________________________________________________________ +// guidosusp +//______________________________________________________________________________ +Sguidovalue guidosusp::getValue() { + if (!fValue) { + Sguidovalue val = force(); + if (!val) throw (newException (kNullValue)); + fValue = val; + } + return fValue; +} + +//______________________________________________________________________________ +void guidosusp::acceptIn(basevisitor& v) { + if (visitor* p = dynamic_cast*>(&v)) { + Sguidosusp ge = this; + p->visitStart (ge); + } + else guidovalue::acceptIn(v); +} + +//______________________________________________________________________________ +void guidosusp::acceptOut(basevisitor& v) { + if (visitor* p = dynamic_cast*>(&v)) { + Sguidosusp ge = this; + p->visitEnd (ge); + } + else guidovalue::acceptOut(v); +} + +} // namespace diff --git a/guidoar-dev/src/lang/suspensions/guidosusp.h b/guidoar-dev/src/lang/suspensions/guidosusp.h new file mode 100644 index 000000000..b3ecb5342 --- /dev/null +++ b/guidoar-dev/src/lang/suspensions/guidosusp.h @@ -0,0 +1,83 @@ +/* + GUIDO Library + Copyright (C) 2006-2008 Grame + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + + Grame Research Laboratory, 9 rue du Garet, 69001 Lyon - France + research@grame.fr + +*/ + +#ifndef __guidosusp__ +#define __guidosusp__ + +#include "guidovalue.h" +#include "visitor.h" + +#ifdef suspDebug +#define suspForce(expr) cout << "Force \"" << expr << "\"" << endl +#define suspCreate(expr) cout << "Create \"" << expr << "\"" << endl +#else +#define suspForce(expr) +#define suspCreate(expr) +#endif + +namespace guidolang +{ + +class guidosusp; +typedef guido::SMARTP Sguidosusp; + +//______________________________________________________________________________ +/*! +\brief a guido value suspension. +*/ +class export guidosusp : public guidovalue +{ + protected: + Sguidovalue fValue; + + guidosusp() {} + virtual ~guidosusp() {} + + public: + virtual Sguidovalue getValue(); + virtual Sguidovalue force() = 0; + + virtual Sguidovalue apply (Sguidovalue& v) { return getValue()->apply(v); } + virtual Sguidovalue head (unsigned int length) { return getValue()->head(length); } + virtual Sguidovalue head (const rational& length){ return getValue()->head(length); } + virtual Sguidovalue tail (unsigned int length) { return getValue()->tail(length); } + virtual Sguidovalue tail (const rational& length){ return getValue()->tail(length); } + virtual Sguidovalue top (unsigned int vnum) { return getValue()->top(vnum); } + virtual Sguidovalue bottom (unsigned int vnum) { return getValue()->bottom(vnum); } + virtual Sguidovalue transpose(int interval) { return getValue()->transpose(interval); } + virtual Sguidovalue stretch (rational ratio) { return getValue()->stretch(ratio); } + virtual Sguidovalue stretch (float ratio) { return getValue()->stretch(ratio); } + + virtual unsigned int length () { return getValue()->length(); } + virtual rational duration() { return getValue()->duration(); } + virtual unsigned int voices () { return getValue()->voices(); } + virtual unsigned int pitch () { return getValue()->pitch(); } + + virtual void acceptIn(guido::basevisitor& visitor); + virtual void acceptOut(guido::basevisitor& visitor); +}; + + +} // namespace + +#endif diff --git a/guidoar-dev/src/lang/values/guidoApplyValue.cpp b/guidoar-dev/src/lang/values/guidoApplyValue.cpp new file mode 100644 index 000000000..94d7e286a --- /dev/null +++ b/guidoar-dev/src/lang/values/guidoApplyValue.cpp @@ -0,0 +1,82 @@ +/* + GUIDO Library + Copyright (C) 2006 Grame + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + + Grame Research Laboratory, 9 rue du Garet, 69001 Lyon - France + research@grame.fr + +*/ + +#include +#include "guidoApplyValue.h" +#include "visitor.h" + +using namespace std; +using namespace guido; + +namespace guidolang +{ + +#define propagate(f,val) create(getArg1()->f(val), getArg2()) + +//______________________________________________________________________________ +// guidoApplyValue +//______________________________________________________________________________ +Sguidovalue guidoApplyValue::create (Sguidovalue v1, Sguidovalue v2) + { valuePrint("guidoApplyValue"); guidoApplyValue * o = new guidoApplyValue(v1, v2); assert(o!=0); return o; } + +//______________________________________________________________________________ +void guidoApplyValue::print(ostream& os) +{ + os << "guidoApplyValue: " << getArg1() << "@" << getArg2() ; +} + +//______________________________________________________________________________ +Sguidovalue guidoApplyValue::apply (Sguidovalue& arg) { return create(this, arg); } +Sguidovalue guidoApplyValue::head (unsigned int length) { return propagate(head, length); } +Sguidovalue guidoApplyValue::head (const rational& length) { return propagate(head, length); } +Sguidovalue guidoApplyValue::tail (unsigned int length) { return propagate(tail, length); } +Sguidovalue guidoApplyValue::tail (const rational& length) { return propagate(tail, length); } +Sguidovalue guidoApplyValue::top (unsigned int vnum) { return propagate (top, vnum); } +Sguidovalue guidoApplyValue::bottom (unsigned int vnum) { return propagate (bottom, vnum); } +Sguidovalue guidoApplyValue::transpose(int interval) { return propagate (transpose, interval); } +Sguidovalue guidoApplyValue::stretch (rational ratio) { return propagate (stretch, ratio); } +Sguidovalue guidoApplyValue::stretch (float ratio) { return propagate (stretch, ratio); } + +//______________________________________________________________________________ +unsigned int guidoApplyValue::length () { return getArg1()->length(); } +rational guidoApplyValue::duration() { return getArg1()->duration(); } +unsigned int guidoApplyValue::voices () { return getArg1()->voices(); } +unsigned int guidoApplyValue::pitch () { return getArg1()->pitch(); } + +//______________________________________________________________________________ +void guidoApplyValue::acceptIn(basevisitor& v) { + if (visitor* p = dynamic_cast*>(&v)) { + SguidoApplyValue ge = this; + p->visitStart (ge); + } +} + +//______________________________________________________________________________ +void guidoApplyValue::acceptOut(basevisitor& v) { + if (visitor* p = dynamic_cast*>(&v)) { + SguidoApplyValue ge = this; + p->visitEnd (ge); + } +} + +} // namespace diff --git a/guidoar-dev/src/lang/values/guidoApplyValue.h b/guidoar-dev/src/lang/values/guidoApplyValue.h new file mode 100644 index 000000000..d2ab3c275 --- /dev/null +++ b/guidoar-dev/src/lang/values/guidoApplyValue.h @@ -0,0 +1,69 @@ +/* + GUIDO Library + Copyright (C) 2006-2008 Grame + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + + Grame Research Laboratory, 9 rue du Garet, 69001 Lyon - France + research@grame.fr + +*/ + +#ifndef __guidoApplyValue__ +#define __guidoApplyValue__ + +#include "guidovalue.h" + +namespace guidolang +{ + +/*! +\brief The base class for guido language expressions. +*/ +class export guidoApplyValue : public guidovalue +{ + protected: + guidoApplyValue(Sguidovalue v1, Sguidovalue v2) : guidovalue(v1, v2) {} + virtual ~guidoApplyValue() {} + + public: + static Sguidovalue create(Sguidovalue v1, Sguidovalue v2); + + virtual Sguidovalue apply (Sguidovalue& v); + virtual Sguidovalue head (unsigned int length); + virtual Sguidovalue head (const rational& length); + virtual Sguidovalue tail (unsigned int length); + virtual Sguidovalue tail (const rational& length); + virtual Sguidovalue top (unsigned int vnum); + virtual Sguidovalue bottom (unsigned int vnum); + virtual Sguidovalue transpose(int interval); + virtual Sguidovalue stretch (rational ratio); + virtual Sguidovalue stretch (float ratio); + + virtual unsigned int length (); + virtual rational duration(); + virtual unsigned int voices (); + virtual unsigned int pitch (); + + virtual void acceptIn(guido::basevisitor& visitor); + virtual void acceptOut(guido::basevisitor& visitor); + virtual void print(std::ostream& os); +}; +typedef guido::SMARTP SguidoApplyValue; + + +} // namespace + +#endif diff --git a/guidoar-dev/src/lang/values/guidoClosureValue.cpp b/guidoar-dev/src/lang/values/guidoClosureValue.cpp new file mode 100644 index 000000000..f4d1bcdb2 --- /dev/null +++ b/guidoar-dev/src/lang/values/guidoClosureValue.cpp @@ -0,0 +1,141 @@ +/* + GUIDO Library + Copyright (C) 2006 Grame + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + + Grame Research Laboratory, 9 rue du Garet, 69001 Lyon - France + research@grame.fr + +*/ + +#include +#include "exceptions.h" +#include "guidoClosureValue.h" +#include "guidoScoreValue.h" +#include "visitor.h" + +using namespace std; +using namespace guido; + +namespace guidolang +{ + +//______________________________________________________________________________ +// guidoClosureValue +//______________________________________________________________________________ +Sguidovalue guidoClosureValue::create (Sguidoexpression& id, Sguidoexpression& body, SguidoEnv& env, + unsigned int length, const rational& dur, unsigned int voices) + { valuePrint("guidoClosureValue"); guidoClosureValue * o = new guidoClosureValue(id, body, env, length, dur, voices); assert(o!=0); return o; } + +//______________________________________________________________________________ +void guidoClosureValue::print(ostream& os) +{ + os << "guidoClosureValue"; +} + +//______________________________________________________________________________ +Sguidovalue guidoClosureValue::apply (Sguidovalue& v) +{ + if (!fIdent) throw(newException (kNullIdent)); + if (!fBody) throw(newException (kNullBody)); + if (!fEnv) throw(newException (kNullEnvironment)); + return fBody->eval(fEnv->bind (fIdent, v)); +} + +//______________________________________________________________________________ +Sguidovalue guidoClosureValue::head (unsigned int length) +{ + return create(fIdent, fBody, fEnv, (length < fLength) ? length : fLength, fDuration, fVoices); +} + +Sguidovalue guidoClosureValue::head (const rational& dur) +{ + return create(fIdent, fBody, fEnv, fLength, (dur < fDuration) ? dur : fDuration, fVoices); +} + +Sguidovalue guidoClosureValue::tail (unsigned int length) +{ + if (length >= fLength) return guidoScoreValue::create(); + return create(fIdent, fBody, fEnv, fLength - length, fDuration, fVoices); +} + +Sguidovalue guidoClosureValue::tail (const rational& dur) +{ + if (dur >= fDuration) return guidoScoreValue::create(); + return create(fIdent, fBody, fEnv, fLength, fDuration - dur, fVoices); +} + +Sguidovalue guidoClosureValue::top (unsigned int vnum) +{ + return create(fIdent, fBody, fEnv, fLength, fDuration, (vnum < fVoices) ? vnum : fVoices); +} + +Sguidovalue guidoClosureValue::bottom (unsigned int vnum) +{ + if (vnum > fVoices) return guidoScoreValue::create(); + return create(fIdent, fBody, fEnv, fLength, fDuration, vnum); +} + + +Sguidovalue guidoClosureValue::transpose(int interval) +{ + + return create(fIdent, fBody, fEnv, fLength, fDuration, fVoices); +} + +Sguidovalue guidoClosureValue::stretch (rational ratio) +{ + rational dur = ratio * fDuration; + return create(fIdent, fBody, fEnv, fLength, dur.rationalise(), fVoices); +} + +Sguidovalue guidoClosureValue::stretch (float ratio) +{ + rational dur = fDuration; + if (ratio >= 0) dur.setNumerator(dur.getNumerator() * ratio); + else dur.setDenominator(dur.getDenominator() * ratio); + return create(fIdent, fBody, fEnv, fLength, dur.rationalise(), fVoices); +} + + +//______________________________________________________________________________ +unsigned int guidoClosureValue::length () { return fLength; } +rational guidoClosureValue::duration() { return fDuration; } +unsigned int guidoClosureValue::voices () { return fVoices; } + +// todo: what's the meaning of pitch for a closure ? +unsigned int guidoClosureValue::pitch () { + cerr << "warning: guidoClosureValue::pitch query !" << endl; + return 60; +} + +//______________________________________________________________________________ +void guidoClosureValue::acceptIn(basevisitor& v) { + if (visitor* p = dynamic_cast*>(&v)) { + SguidoClosureValue ge = this; + p->visitStart (ge); + } +} + +//______________________________________________________________________________ +void guidoClosureValue::acceptOut(basevisitor& v) { + if (visitor* p = dynamic_cast*>(&v)) { + SguidoClosureValue ge = this; + p->visitEnd (ge); + } +} + +} // namespace diff --git a/guidoar-dev/src/lang/values/guidoClosureValue.h b/guidoar-dev/src/lang/values/guidoClosureValue.h new file mode 100644 index 000000000..37370de81 --- /dev/null +++ b/guidoar-dev/src/lang/values/guidoClosureValue.h @@ -0,0 +1,83 @@ +/* + GUIDO Library + Copyright (C) 2006-2008 Grame + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + + Grame Research Laboratory, 9 rue du Garet, 69001 Lyon - France + research@grame.fr + +*/ + +#ifndef __guidoClosureValue__ +#define __guidoClosureValue__ + +#include "guidoexpression.h" +#include "guidovalue.h" +#include "guidoEnv.h" +#include "guidorational.h" + +namespace guidolang +{ + +/*! +\brief The base class for guido language expressions. +*/ +class export guidoClosureValue : public guidovalue +{ + private: + Sguidoexpression fIdent; + Sguidoexpression fBody; + SguidoEnv fEnv ; + unsigned int fLength; + rational fDuration; + unsigned int fVoices; + + protected: + guidoClosureValue(Sguidoexpression& id, Sguidoexpression& body, SguidoEnv& env, + unsigned int length, const rational& dur, unsigned int voices) + : fIdent(id), fBody(body), fEnv(env), fLength(length), fDuration(dur), fVoices(voices) {} + virtual ~guidoClosureValue() {} + + public: + static Sguidovalue create(Sguidoexpression& id, Sguidoexpression& body, SguidoEnv& env, + unsigned int length, const rational& dur, unsigned int voices); + + virtual Sguidovalue apply (Sguidovalue& v); + virtual Sguidovalue head (unsigned int length); + virtual Sguidovalue head (const rational& length); + virtual Sguidovalue tail (unsigned int length); + virtual Sguidovalue tail (const rational& length); + virtual Sguidovalue top (unsigned int vnum); + virtual Sguidovalue bottom (unsigned int vnum); + virtual Sguidovalue transpose(int interval); + virtual Sguidovalue stretch (rational ratio); + virtual Sguidovalue stretch (float ratio); + + virtual unsigned int length (); + virtual rational duration(); + virtual unsigned int voices (); + virtual unsigned int pitch (); + + virtual void acceptIn(guido::basevisitor& visitor); + virtual void acceptOut(guido::basevisitor& visitor); + virtual void print(std::ostream& os); +}; +typedef guido::SMARTP SguidoClosureValue; + + +} // namespace + +#endif diff --git a/guidoar-dev/src/lang/values/guidoErrValue.cpp b/guidoar-dev/src/lang/values/guidoErrValue.cpp new file mode 100644 index 000000000..5b4a12618 --- /dev/null +++ b/guidoar-dev/src/lang/values/guidoErrValue.cpp @@ -0,0 +1,84 @@ +/* + GUIDO Library + Copyright (C) 2006 Grame + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + + Grame Research Laboratory, 9 rue du Garet, 69001 Lyon - France + research@grame.fr + +*/ + +#include +#include "guidoErrValue.h" +#include "visitor.h" + +using namespace std; +using namespace guido; + +namespace guidolang +{ + +#define propagate(f,val) create(getArg1()->f(val), getArg2()->f(val)) + +//______________________________________________________________________________ +// guidoErrValue +//______________________________________________________________________________ +Sguidovalue guidoErrValue::create () + { valuePrint("guidoErrValue"); guidoErrValue * o = new guidoErrValue(); assert(o!=0); return o; } + +//______________________________________________________________________________ +void guidoErrValue::print(ostream& os) +{ + os << "guidoErrValue"; +} + +//______________________________________________________________________________ +Sguidovalue guidoErrValue::apply (Sguidovalue& arg) { return this; } +Sguidovalue guidoErrValue::head (unsigned int length) { return this; } +Sguidovalue guidoErrValue::head (const rational& length) { return this; } +Sguidovalue guidoErrValue::tail (unsigned int length) { return this; } +Sguidovalue guidoErrValue::tail (const rational& length) { return this; } + +//______________________________________________________________________________ +Sguidovalue guidoErrValue::top (unsigned int vnum) { return this; } +Sguidovalue guidoErrValue::bottom (unsigned int vnum) { return this; } +Sguidovalue guidoErrValue::transpose(int interval) { return this; } +Sguidovalue guidoErrValue::stretch (rational ratio) { return this; } +Sguidovalue guidoErrValue::stretch (float ratio) { return this; } + +//______________________________________________________________________________ +unsigned int guidoErrValue::length () { return 0; } +rational guidoErrValue::duration() { return rational(0,1); } +unsigned int guidoErrValue::voices () { return 0; } +unsigned int guidoErrValue::pitch () { return 60; } + +//______________________________________________________________________________ +void guidoErrValue::acceptIn(basevisitor& v) { + if (visitor* p = dynamic_cast*>(&v)) { + SguidoErrValue ge = this; + p->visitStart (ge); + } +} + +//______________________________________________________________________________ +void guidoErrValue::acceptOut(basevisitor& v) { + if (visitor* p = dynamic_cast*>(&v)) { + SguidoErrValue ge = this; + p->visitEnd (ge); + } +} + +} // namespace diff --git a/guidoar-dev/src/lang/values/guidoErrValue.h b/guidoar-dev/src/lang/values/guidoErrValue.h new file mode 100644 index 000000000..3dfcda609 --- /dev/null +++ b/guidoar-dev/src/lang/values/guidoErrValue.h @@ -0,0 +1,69 @@ +/* + GUIDO Library + Copyright (C) 2006-2008 Grame + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + + Grame Research Laboratory, 9 rue du Garet, 69001 Lyon - France + research@grame.fr + +*/ + +#ifndef __guidoErrValue__ +#define __guidoErrValue__ + +#include "guidovalue.h" + +namespace guidolang +{ + +/*! +\brief An error value used when recursion reaches the limit +*/ +class export guidoErrValue : public guidovalue +{ + protected: + guidoErrValue() : guidovalue() {} + virtual ~guidoErrValue() {} + + public: + static Sguidovalue create(); + + virtual Sguidovalue apply (Sguidovalue& v); + virtual Sguidovalue head (unsigned int length); + virtual Sguidovalue head (const rational& length); + virtual Sguidovalue tail (unsigned int length); + virtual Sguidovalue tail (const rational& length); + virtual Sguidovalue top (unsigned int vnum); + virtual Sguidovalue bottom (unsigned int vnum); + virtual Sguidovalue transpose(int interval); + virtual Sguidovalue stretch (rational ratio); + virtual Sguidovalue stretch (float ratio); + + virtual unsigned int length (); + virtual rational duration(); + virtual unsigned int voices (); + virtual unsigned int pitch (); + + virtual void acceptIn(guido::basevisitor& visitor); + virtual void acceptOut(guido::basevisitor& visitor); + virtual void print(std::ostream& os); +}; +typedef guido::SMARTP SguidoErrValue; + + +} // namespace + +#endif diff --git a/guidoar-dev/src/lang/values/guidoMixValue.cpp b/guidoar-dev/src/lang/values/guidoMixValue.cpp new file mode 100644 index 000000000..7f73afd49 --- /dev/null +++ b/guidoar-dev/src/lang/values/guidoMixValue.cpp @@ -0,0 +1,122 @@ +/* + GUIDO Library + Copyright (C) 2006 Grame + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + + Grame Research Laboratory, 9 rue du Garet, 69001 Lyon - France + research@grame.fr + +*/ + +#include +#include "guidoMixValue.h" +#include "visitor.h" + +using namespace std; +using namespace guido; + +namespace guidolang +{ + +#define propagate(f,val) create(getArg1()->f(val), getArg2()->f(val)) + +//______________________________________________________________________________ +// guidoMixValue +//______________________________________________________________________________ +Sguidovalue guidoMixValue::create (Sguidovalue v1, Sguidovalue v2) + { valuePrint("guidoMixValue"); guidoMixValue * o = new guidoMixValue(v1, v2); assert(o!=0); return o; } + +//______________________________________________________________________________ +void guidoMixValue::print(ostream& os) +{ + os << "guidoMixValue"; +} + +//______________________________________________________________________________ +Sguidovalue guidoMixValue::apply (Sguidovalue& arg) +{ + int voices = getArg1()->voices(); + Sguidovalue top = arg->top(voices); + Sguidovalue bottom = arg->bottom(voices); + return create(getArg1()->apply(top), getArg2()->apply(bottom)); +} + +//______________________________________________________________________________ +Sguidovalue guidoMixValue::head (unsigned int length) { return propagate (head, length); } +Sguidovalue guidoMixValue::head (const rational& length) { return propagate (head, length); } +Sguidovalue guidoMixValue::tail (unsigned int length) { return propagate (tail, length); } +Sguidovalue guidoMixValue::tail (const rational& length) { return propagate (tail, length); } +Sguidovalue guidoMixValue::transpose(int interval) { return propagate (transpose, interval); } +Sguidovalue guidoMixValue::stretch (rational ratio) { return propagate (stretch, ratio); } +Sguidovalue guidoMixValue::stretch (float ratio) { return propagate (stretch, ratio); } + +//______________________________________________________________________________ +Sguidovalue guidoMixValue::top (unsigned int vnum) +{ + unsigned int vcount = getArg1()->voices(); + return (vnum > vcount) ? create(getArg1(), getArg2()->top(vnum - vcount)) : getArg1()->top(vnum); +} + +Sguidovalue guidoMixValue::bottom (unsigned int vnum) +{ + unsigned int vcount = getArg1()->voices(); + return (vnum < vcount) ? create(getArg1()->bottom(vnum), getArg2()) : getArg2()->bottom(vnum - vcount); +} + +//______________________________________________________________________________ +unsigned int guidoMixValue::length () +{ + unsigned int l1 = getArg1()->length(); if (l1 == kInfinite) return kInfinite; + unsigned int l2 = getArg2()->length(); if (l2 == kInfinite) return kInfinite; + return (l1 > l2) ? l1 : l2; +} + +rational guidoMixValue::duration() +{ + rational d1 = getArg1()->duration(); if (infinite(d1)) return d1; + rational d2 = getArg2()->duration(); if (infinite(d2)) return d2; + return (d1 > d2) ? d1 : d2; +} + +unsigned int guidoMixValue::voices () +{ + unsigned int v1 = getArg1()->voices(); if (v1 == kInfinite) return kInfinite; + unsigned int v2 = getArg2()->voices(); if (v2 == kInfinite) return kInfinite; + return v1 + v2; +} + +unsigned int guidoMixValue::pitch () +{ + return getArg1()->pitch(); +} + +//______________________________________________________________________________ +void guidoMixValue::acceptIn(basevisitor& v) { + if (visitor* p = dynamic_cast*>(&v)) { + SguidoMixValue ge = this; + p->visitStart (ge); + } +} + +//______________________________________________________________________________ +void guidoMixValue::acceptOut(basevisitor& v) { + if (visitor* p = dynamic_cast*>(&v)) { + SguidoMixValue ge = this; + p->visitEnd (ge); + } +} + +} // namespace diff --git a/guidoar-dev/src/lang/values/guidoMixValue.h b/guidoar-dev/src/lang/values/guidoMixValue.h new file mode 100644 index 000000000..161acf2b7 --- /dev/null +++ b/guidoar-dev/src/lang/values/guidoMixValue.h @@ -0,0 +1,69 @@ +/* + GUIDO Library + Copyright (C) 2006-2008 Grame + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + + Grame Research Laboratory, 9 rue du Garet, 69001 Lyon - France + research@grame.fr + +*/ + +#ifndef __guidoMixValue__ +#define __guidoMixValue__ + +#include "guidovalue.h" + +namespace guidolang +{ + +/*! +\brief The base class for guido language expressions. +*/ +class export guidoMixValue : public guidovalue +{ + protected: + guidoMixValue(Sguidovalue v1, Sguidovalue v2) : guidovalue(v1, v2) {} + virtual ~guidoMixValue() {} + + public: + static Sguidovalue create(Sguidovalue v1, Sguidovalue v2); + + virtual Sguidovalue apply (Sguidovalue& v); + virtual Sguidovalue head (unsigned int length); + virtual Sguidovalue head (const rational& length); + virtual Sguidovalue tail (unsigned int length); + virtual Sguidovalue tail (const rational& length); + virtual Sguidovalue top (unsigned int vnum); + virtual Sguidovalue bottom (unsigned int vnum); + virtual Sguidovalue transpose(int interval); + virtual Sguidovalue stretch (rational ratio); + virtual Sguidovalue stretch (float ratio); + + virtual unsigned int length (); + virtual rational duration(); + virtual unsigned int voices (); + virtual unsigned int pitch (); + + virtual void acceptIn(guido::basevisitor& visitor); + virtual void acceptOut(guido::basevisitor& visitor); + virtual void print(std::ostream& os); +}; +typedef guido::SMARTP SguidoMixValue; + + +} // namespace + +#endif diff --git a/guidoar-dev/src/lang/values/guidoScoreValue.cpp b/guidoar-dev/src/lang/values/guidoScoreValue.cpp new file mode 100644 index 000000000..4da7214bf --- /dev/null +++ b/guidoar-dev/src/lang/values/guidoScoreValue.cpp @@ -0,0 +1,140 @@ +/* + GUIDO Library + Copyright (C) 2006 Grame + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + + Grame Research Laboratory, 9 rue du Garet, 69001 Lyon - France + research@grame.fr + +*/ + +#include + +#include "counteventsvisitor.h" +#include "durationvisitor.h" +#include "firstpitchvisitor.h" +#include "guidoApplyValue.h" +#include "guidoScoreValue.h" +#include "visitor.h" + +#include "headOperation.h" +#include "eheadOperation.h" +#include "tailOperation.h" +#include "etailOperation.h" +#include "topOperation.h" +#include "bottomOperation.h" +#include "transposeOperation.h" +#include "durationOperation.h" + +#include "ARFactory.h" + +using namespace std; +using namespace guido; + +namespace guidolang +{ + +#define compose(operation,val) operation op; return create(op(fScore,val)) + +//______________________________________________________________________________ +// guidoScoreValue +//______________________________________________________________________________ +Sguidovalue guidoScoreValue::create () +{ + valuePrint("guidoScoreValue"); + guidoScoreValue * o = new guidoScoreValue(); assert(o!=0); + o->fScore = ARFactory::instance().createMusic(); + return o; +} + +//______________________________________________________________________________ +void guidoScoreValue::print(ostream& os) +{ + os << "guidoScoreValue"; +} + +//______________________________________________________________________________ +Sguidovalue guidoScoreValue::create (Sguidoelement score) + { guidoScoreValue * o = new guidoScoreValue(score); assert(o!=0); return o; } + +//______________________________________________________________________________ +Sguidovalue guidoScoreValue::apply (Sguidovalue& arg) +{ + return guidoApplyValue::create(this, arg); +} + +//______________________________________________________________________________ +Sguidovalue guidoScoreValue::head (unsigned int length) { compose (eheadOperation, length); } +Sguidovalue guidoScoreValue::head (const rational& length) { compose (headOperation, length); } +Sguidovalue guidoScoreValue::tail (unsigned int length) { compose (etailOperation, length); } +Sguidovalue guidoScoreValue::tail (const rational& length) { compose (tailOperation, length); } + +//______________________________________________________________________________ +Sguidovalue guidoScoreValue::top (unsigned int vnum) { compose (topOperation, vnum); } +Sguidovalue guidoScoreValue::bottom (unsigned int vnum) { compose (bottomOperation, vnum); } +Sguidovalue guidoScoreValue::transpose(int interval) { compose (transposeOperation, interval); } +Sguidovalue guidoScoreValue::stretch (rational ratio) { compose (durationOperation, ratio); } +Sguidovalue guidoScoreValue::stretch (float ratio) { compose (durationOperation, ratio); } + +//______________________________________________________________________________ +unsigned int guidoScoreValue::length () +{ + if (!fScore) return 0; + + unsigned int max=0; + for (unsigned int i=0; i < fScore->size(); i++) { + countvoiceseventsvisitor cvev; + unsigned int count = cvev.count (fScore, i); + if (count > max) max = count; + } + return max; +} + +rational guidoScoreValue::duration() +{ + durationvisitor dv; + return dv.duration (fScore); +} + +unsigned int guidoScoreValue::voices () +{ + return fScore ? fScore->size() : 0; +} + +unsigned int guidoScoreValue::pitch () +{ + firstpitchvisitor fpv; + int pitch = fpv.firstPitch(fScore); + return (pitch > 0) ? pitch : 60; +} + +//______________________________________________________________________________ +void guidoScoreValue::acceptIn(basevisitor& v) { + if (visitor* p = dynamic_cast*>(&v)) { + SguidoScoreValue ge = this; + p->visitStart (ge); + } +} + +//______________________________________________________________________________ +void guidoScoreValue::acceptOut(basevisitor& v) { + if (visitor* p = dynamic_cast*>(&v)) { + SguidoScoreValue ge = this; + p->visitEnd (ge); + } +} + +} // namespace diff --git a/guidoar-dev/src/lang/values/guidoScoreValue.h b/guidoar-dev/src/lang/values/guidoScoreValue.h new file mode 100644 index 000000000..8f0577de8 --- /dev/null +++ b/guidoar-dev/src/lang/values/guidoScoreValue.h @@ -0,0 +1,77 @@ +/* + GUIDO Library + Copyright (C) 2006-2008 Grame + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + + Grame Research Laboratory, 9 rue du Garet, 69001 Lyon - France + research@grame.fr + +*/ + +#ifndef __guidoScoreValue__ +#define __guidoScoreValue__ + +#include "guidovalue.h" +#include "guidoelement.h" + +namespace guidolang +{ + +/*! +\brief The base class for guido language expressions. +*/ +class export guidoScoreValue : public guidovalue +{ + private: + guido::Sguidoelement fScore; + + protected: + guidoScoreValue() {} + guidoScoreValue(guido::Sguidoelement score) : fScore(score) {} + virtual ~guidoScoreValue() {} + + public: + static Sguidovalue create(); // creates an empty score + static Sguidovalue create(guido::Sguidoelement score); + + const guido::Sguidoelement& getScore() { return fScore; } + + virtual Sguidovalue apply (Sguidovalue& v); + virtual Sguidovalue head (unsigned int length); + virtual Sguidovalue head (const rational& length); + virtual Sguidovalue tail (unsigned int length); + virtual Sguidovalue tail (const rational& length); + virtual Sguidovalue top (unsigned int vnum); + virtual Sguidovalue bottom (unsigned int vnum); + virtual Sguidovalue transpose(int interval); + virtual Sguidovalue stretch (rational ratio); + virtual Sguidovalue stretch (float ratio); + + virtual unsigned int length (); + virtual rational duration(); + virtual unsigned int voices (); + virtual unsigned int pitch (); + + virtual void acceptIn(guido::basevisitor& visitor); + virtual void acceptOut(guido::basevisitor& visitor); + virtual void print(std::ostream& os); +}; +typedef guido::SMARTP SguidoScoreValue; + + +} // namespace + +#endif diff --git a/guidoar-dev/src/lang/values/guidoSeqValue.cpp b/guidoar-dev/src/lang/values/guidoSeqValue.cpp new file mode 100644 index 000000000..ea04f73e8 --- /dev/null +++ b/guidoar-dev/src/lang/values/guidoSeqValue.cpp @@ -0,0 +1,133 @@ +/* + GUIDO Library + Copyright (C) 2006 Grame + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + + Grame Research Laboratory, 9 rue du Garet, 69001 Lyon - France + research@grame.fr + +*/ + +#include +#include "guidoSeqValue.h" +#include "visitor.h" + +using namespace std; +using namespace guido; + +namespace guidolang +{ + +#define propagate(f,val) create(getArg1()->f(val), getArg2()->f(val)) + +//______________________________________________________________________________ +// guidoSeqValue +//______________________________________________________________________________ +Sguidovalue guidoSeqValue::create (Sguidovalue v1, Sguidovalue v2) + { valuePrint("guidoSeqValue"); guidoSeqValue * o = new guidoSeqValue(v1, v2); assert(o!=0); return o; } + +//______________________________________________________________________________ +void guidoSeqValue::print(ostream& os) +{ + os << "guidoSeqValue"; +} + +//______________________________________________________________________________ +Sguidovalue guidoSeqValue::apply (Sguidovalue& arg) +{ + rational dur = getArg1()->duration(); + Sguidovalue head = arg->head(dur); + Sguidovalue tail = arg->tail(dur); + return create(getArg1()->apply(head), getArg2()->apply(tail)); +} + +//______________________________________________________________________________ +Sguidovalue guidoSeqValue::head (unsigned int length) +{ + unsigned int l1 = getArg1()->length(); + return (length > l1) ? create(getArg1(), getArg2()->head(length - l1)) : getArg1()->head(length); +} + +Sguidovalue guidoSeqValue::head (const rational& length) +{ + rational l1 = getArg1()->length(); + return (length > l1) ? create(getArg1(), getArg2()->head(l1)) : getArg1()->head(length); +} + +//______________________________________________________________________________ +Sguidovalue guidoSeqValue::tail (unsigned int length) +{ + unsigned int l1 = getArg1()->length(); + return (length <= l1) ? create(getArg1()->tail(length), getArg2()) : getArg2()->tail(length-l1); +} + +Sguidovalue guidoSeqValue::tail (const rational& length) +{ + rational l1 = getArg1()->length(); + return (length > l1) ? getArg2()->tail(length - l1) : create(getArg1()->tail(length), getArg2()); +} + +//______________________________________________________________________________ +Sguidovalue guidoSeqValue::top (unsigned int vnum) { return propagate (top, vnum); } +Sguidovalue guidoSeqValue::bottom (unsigned int vnum) { return propagate (bottom, vnum); } +Sguidovalue guidoSeqValue::transpose(int interval) { return propagate (transpose, interval); } +Sguidovalue guidoSeqValue::stretch (rational ratio) { return propagate (stretch, ratio); } +Sguidovalue guidoSeqValue::stretch (float ratio) { return propagate (stretch, ratio); } + +//______________________________________________________________________________ +unsigned int guidoSeqValue::length () +{ + unsigned int l1 = getArg1()->length(); if (l1 == kInfinite) return kInfinite; + unsigned int l2 = getArg2()->length(); if (l2 == kInfinite) return kInfinite; + return l1 + l2; +} + +rational guidoSeqValue::duration() +{ + rational d1 = getArg1()->duration(); if (infinite(d1)) return d1; + rational d2 = getArg2()->duration(); if (infinite(d2)) return d2; + return (d1 + d2).rationalise(); +} + +unsigned int guidoSeqValue::voices () +{ + unsigned int v1 = getArg1()->voices(); if (v1 == kInfinite) return kInfinite; + unsigned int v2 = getArg2()->voices(); if (v2 == kInfinite) return kInfinite; + return (v1 > v2) ? v1 : v2; +} + +unsigned int guidoSeqValue::pitch () +{ + return getArg1()->pitch(); +} + +//______________________________________________________________________________ +void guidoSeqValue::acceptIn(basevisitor& v) { + if (visitor* p = dynamic_cast*>(&v)) { + SguidoSeqValue ge = this; + p->visitStart (ge); + } +} + +//______________________________________________________________________________ +void guidoSeqValue::acceptOut(basevisitor& v) { + if (visitor* p = dynamic_cast*>(&v)) { + SguidoSeqValue ge = this; + p->visitEnd (ge); + } +} + +} // namespace diff --git a/guidoar-dev/src/lang/values/guidoSeqValue.h b/guidoar-dev/src/lang/values/guidoSeqValue.h new file mode 100644 index 000000000..2f8c6d632 --- /dev/null +++ b/guidoar-dev/src/lang/values/guidoSeqValue.h @@ -0,0 +1,69 @@ +/* + GUIDO Library + Copyright (C) 2006-2008 Grame + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + + Grame Research Laboratory, 9 rue du Garet, 69001 Lyon - France + research@grame.fr + +*/ + +#ifndef __guidoSeqValue__ +#define __guidoSeqValue__ + +#include "guidovalue.h" + +namespace guidolang +{ + +/*! +\brief The base class for guido language expressions. +*/ +class export guidoSeqValue : public guidovalue +{ + protected: + guidoSeqValue(Sguidovalue v1, Sguidovalue v2) : guidovalue(v1, v2) {} + virtual ~guidoSeqValue() {} + + public: + static Sguidovalue create(Sguidovalue v1, Sguidovalue v2); + + virtual Sguidovalue apply (Sguidovalue& v); + virtual Sguidovalue head (unsigned int length); + virtual Sguidovalue head (const rational& length); + virtual Sguidovalue tail (unsigned int length); + virtual Sguidovalue tail (const rational& length); + virtual Sguidovalue top (unsigned int vnum); + virtual Sguidovalue bottom (unsigned int vnum); + virtual Sguidovalue transpose(int interval); + virtual Sguidovalue stretch (rational ratio); + virtual Sguidovalue stretch (float ratio); + + virtual unsigned int length (); + virtual rational duration(); + virtual unsigned int voices (); + virtual unsigned int pitch (); + + virtual void acceptIn(guido::basevisitor& visitor); + virtual void acceptOut(guido::basevisitor& visitor); + virtual void print(std::ostream& os); +}; +typedef guido::SMARTP SguidoSeqValue; + + +} // namespace + +#endif diff --git a/guidoar-dev/src/lang/values/guidoValueTypes.h b/guidoar-dev/src/lang/values/guidoValueTypes.h new file mode 100644 index 000000000..7aa3a9b76 --- /dev/null +++ b/guidoar-dev/src/lang/values/guidoValueTypes.h @@ -0,0 +1,55 @@ +/* + GUIDO Library + Copyright (C) 2006-2008 Grame + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + + Grame Research Laboratory, 9 rue du Garet, 69001 Lyon - France + research@grame.fr + +*/ + +#ifndef __guidoValueTypes__ +#define __guidoValueTypes__ + +#include "gar_smartpointer.h" + +namespace guidolang +{ +class guidoexpression; +typedef guido::SMARTP Sguidoexpression; + +class guidovalue; +class guidoSeqValue; +class guidoScoreValue; +class guidoMixValue; +class guidoClosureValue; +class guidoApplyValue; +class guidoErrValue; +class guidoEvalSusp; + +typedef guido::SMARTP Sguidovalue; +typedef guido::SMARTP SguidoSeqValue; +typedef guido::SMARTP SguidoScoreValue; +typedef guido::SMARTP SguidoMixValue; +typedef guido::SMARTP SguidoClosureValue; +typedef guido::SMARTP SguidoApplyValue; +typedef guido::SMARTP SguidoErrValue; +typedef guido::SMARTP SguidoEvalSusp; + + +} // namespace + +#endif diff --git a/guidoar-dev/src/lang/values/guidovalue.cpp b/guidoar-dev/src/lang/values/guidovalue.cpp new file mode 100644 index 000000000..fa9c44094 --- /dev/null +++ b/guidoar-dev/src/lang/values/guidovalue.cpp @@ -0,0 +1,67 @@ +/* + GUIDO Library + Copyright (C) 2006 Grame + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + + Grame Research Laboratory, 9 rue du Garet, 69001 Lyon - France + research@grame.fr + +*/ + +#include + +#include "guidovalue.h" +//#include "guidoValPrinter.h" +#include "tree_browser.h" +#include "visitor.h" + +using namespace std; +using namespace guido; + +namespace guidolang +{ + +//______________________________________________________________________________ +// guidovalue +//______________________________________________________________________________ +void guidovalue::acceptIn(basevisitor& v) { + if (visitor* p = dynamic_cast*>(&v)) { + Sguidovalue ge = this; + p->visitStart (ge); + } +} + +//______________________________________________________________________________ +void guidovalue::acceptOut(basevisitor& v) { + if (visitor* p = dynamic_cast*>(&v)) { + Sguidovalue ge = this; + p->visitEnd (ge); + } +} + +//______________________________________________________________________________ +void guidovalue::print(ostream& os) +{ + os << "guidovalue"; +} + +//______________________________________________________________________________ +ostream& operator << (ostream& os, const Sguidovalue& elt) { + elt->print(os); + return os; +} + +} // namespace diff --git a/guidoar-dev/src/lang/values/guidovalue.h b/guidoar-dev/src/lang/values/guidovalue.h new file mode 100644 index 000000000..05057787e --- /dev/null +++ b/guidoar-dev/src/lang/values/guidovalue.h @@ -0,0 +1,90 @@ +/* + GUIDO Library + Copyright (C) 2006-2008 Grame + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + + Grame Research Laboratory, 9 rue du Garet, 69001 Lyon - France + research@grame.fr + +*/ + +#ifndef __guidovalue__ +#define __guidovalue__ + +#include "export.h" +#include "visitable.h" +//#include "ctree.h" +#include "guidorational.h" +#include "gar_smartpointer.h" + +#ifdef valueDebug +#define valuePrint(expr) cout << "create \"" << expr << "\"" << endl +#else +#define valuePrint(expr) +#endif + +namespace guidolang +{ + +class guidovalue; +typedef guido::SMARTP Sguidovalue; + +/*! +\brief The base class for guido language expressions. +*/ +class export guidovalue : virtual public guido::smartable, public guido::visitable +{ + protected: + Sguidovalue fArg1, fArg2; + guidovalue() {} + guidovalue(Sguidovalue v1, Sguidovalue v2) : fArg1(v1), fArg2(v2) {} + virtual ~guidovalue() {} + + public: + enum { kInfinite = UINT_MAX }; + + bool infinite(const rational& r) const { rational inf = infinite(); return r == inf; } + rational infinite() const { return rational(kInfinite, 1); } + + virtual Sguidovalue apply (Sguidovalue& v) = 0; + virtual Sguidovalue head (unsigned int length) = 0; + virtual Sguidovalue head (const rational& length) = 0; + virtual Sguidovalue tail (unsigned int length) = 0; + virtual Sguidovalue tail (const rational& length) = 0; + virtual Sguidovalue top (unsigned int vnum) = 0; + virtual Sguidovalue bottom (unsigned int vnum) = 0; + virtual Sguidovalue transpose(int interval) = 0; + virtual Sguidovalue stretch (rational ratio) = 0; + virtual Sguidovalue stretch (float ratio) = 0; + + virtual unsigned int length () = 0; ///< computes the length of the value + virtual rational duration() = 0; ///< computes the duration of the value + virtual unsigned int voices () = 0; ///< computes the voices count of the value + virtual unsigned int pitch () = 0; ///< computes the pitch of the value + + virtual void acceptIn(guido::basevisitor& visitor); + virtual void acceptOut(guido::basevisitor& visitor); + virtual void print(std::ostream& os); + + virtual Sguidovalue getArg1 () const { return fArg1; } + virtual Sguidovalue getArg2 () const { return fArg2; } +}; + +export std::ostream& operator << (std::ostream& os, const Sguidovalue& elt); + +} // namespace + +#endif diff --git a/guidoar-dev/src/lang/visitors/cloneExpVisitor.cpp b/guidoar-dev/src/lang/visitors/cloneExpVisitor.cpp new file mode 100644 index 000000000..a5daa7310 --- /dev/null +++ b/guidoar-dev/src/lang/visitors/cloneExpVisitor.cpp @@ -0,0 +1,93 @@ +/* + + MusicXML Library + Copyright (C) 2006,2007 Grame + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + + Grame Research Laboratory, 9 rue du Garet, 69001 Lyon - France + research@grame.fr + +*/ + +#ifdef WIN32 +#pragma warning (disable : 4786) +#endif + +#include + +#include "guidoExpFactory.h" +#include "guidoexpression.h" +#include "guidoScoreExpr.h" +#include "guidoNamedExpr.h" +#include "cloneExpVisitor.h" + +using namespace std; +using namespace guido; + +namespace guidolang +{ + +//______________________________________________________________________________ +Sguidoexpression cloneExpVisitor::clone(const Sguidoexpression& exp) +{ + if (exp) { + stop(false); + browse (*exp); + if (fStack.size()) { + Sguidoexpression copy = fStack.top(); + fStack.pop(); + return copy; + } + } + return 0; +} + +//______________________________________________________________________________ +void cloneExpVisitor::push( const Sguidoexpression& exp, bool stack ) +{ + if (fStack.empty()) + fStack.push(exp); + else fStack.top()->push(exp); + if (stack) fStack.push (exp); +} + +//______________________________________________________________________________ +// the visit methods +//______________________________________________________________________________ +void cloneExpVisitor::visitStart( Sguidoexpression& exp ) +{ + if (exp->getType() == kNamed) { + Sguidoexpression named = exp->getArg(0); + push (guidoExpFactory::instance().createNamed(exp->getName(), named)); + } + else push (guidoExpFactory::instance().create(exp->getName())); +} + +//______________________________________________________________________________ +void cloneExpVisitor::visitEnd ( Sguidoexpression& exp ) +{ + fStack.pop(); +} +void cloneExpVisitor::visitEnd ( SguidoScoreExpr& exp ) {} + +//______________________________________________________________________________ +void cloneExpVisitor::visitStart( SguidoScoreExpr& exp ) +{ + Sguidoelement score = exp->getScore(); + push ( guidoExpFactory::instance().create( score ), false); +} + +} diff --git a/guidoar-dev/src/lang/visitors/cloneExpVisitor.h b/guidoar-dev/src/lang/visitors/cloneExpVisitor.h new file mode 100644 index 000000000..40a057189 --- /dev/null +++ b/guidoar-dev/src/lang/visitors/cloneExpVisitor.h @@ -0,0 +1,73 @@ +/* + GUIDO Library + Copyright (C) 2006 Grame + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + + Grame Research Laboratory, 9 rue du Garet, 69001 Lyon - France + research@grame.fr + +*/ + +#ifndef __cloneExpVisitor__ +#define __cloneExpVisitor__ + +#include + +#include "export.h" +#include "guidoExprTypes.h" +#include "guidoexpression.h" +#include "visitor.h" +#include "tree_browser.h" + +namespace guidolang +{ + +/*! +\addtogroup visitors +@{ +*/ + +//______________________________________________________________________________ +/*! +\brief A visitor to print the gmn description +*/ +class export cloneExpVisitor : + public guido::tree_browser, + public guido::visitor, + public guido::visitor +{ + public: + cloneExpVisitor() { set(this); } + virtual ~cloneExpVisitor() {} + + virtual Sguidoexpression clone(const Sguidoexpression&); + + protected: + virtual void push (const Sguidoexpression& exp, bool stack=true); + + virtual void visitStart ( Sguidoexpression&); + virtual void visitEnd ( Sguidoexpression&); + virtual void visitStart ( SguidoScoreExpr&); + virtual void visitEnd ( SguidoScoreExpr&); + + std::stack fStack; +}; + +/*! @} */ + +} // namespace + +#endif diff --git a/guidoar-dev/src/lang/visitors/guidoEval.cpp b/guidoar-dev/src/lang/visitors/guidoEval.cpp new file mode 100644 index 000000000..2f07b75b8 --- /dev/null +++ b/guidoar-dev/src/lang/visitors/guidoEval.cpp @@ -0,0 +1,212 @@ +/* + GUIDO Library + Copyright (C) 2006-2008 Grame + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + + Grame Research Laboratory, 9 rue du Garet, 69001 Lyon - France + research@grame.fr + +*/ + +#include + +#include "exceptions.h" +#include "guidoEval.h" +#include "guidoexpression.h" +#include "guidoErrValue.h" +#include "guidoEvalSusp.h" +#include "guidoClosureValue.h" +#include "guidoMixValue.h" +#include "guidoNamedExpr.h" +#include "guidoScoreExpr.h" +#include "guidoScoreValue.h" +#include "guidoSeqValue.h" + +using namespace std; + +//#define evalDebug +#ifdef evalDebug +#define evalPrint(expr) cout << "eval \"" << expr << "\"" << endl +#else +#define evalPrint(expr) +#endif + +namespace guidolang +{ + +//______________________________________________________________________________ +Sguidovalue guidoEval::eval(Sguidoexpression e, SguidoEnv env) +{ + fEnv = env; + fValue = 0; + e->acceptIn(*this); + return fValue; +} + +//______________________________________________________________________________ +void guidoEval::evalBinary( Sguidoexpression exp, Sguidovalue& v1, Sguidovalue& v2) +{ + Sguidoexpression arg1 = exp->getArg(0); + Sguidoexpression arg2 = exp->getArg(1); + if (!arg1 || !arg2) throw (newException (kMissingArgument)); + + v1 = arg1->eval(fEnv); +//evalPrint( "evalBinary " << arg1 << " " << fEnv << " -> " << (void*)v1); + v2 = arg2->eval(fEnv); +//evalPrint( "evalBinary " << arg2 << " " << fEnv << " -> " << (void*)v2); + if (!v1 || !v2) throw (newException (kNullValue)); +} + +//______________________________________________________________________________ +// the visit methods +//______________________________________________________________________________ +void guidoEval::visitStart( Sguidoexpression&) +{ + cerr << __FILE__ << ": unexpected Sguidoexpression received for evaluation" << endl; +} + +void guidoEval::visitStart( SguidoNamedExpr& exp) +{ + Sguidoexpression target = exp->getArg(0); + fValue = target->eval(fEnv); +} + +void guidoEval::visitStart( SguidoGroupedExpr& exp) +{ + Sguidoexpression target = exp->getArg(0); + fValue = target->eval(fEnv); +} + +void guidoEval::visitStart( SguidoAbstractExpr& exp) +{ + evalPrint (exp->getName() << " " << exp->getArg(0) ); + Sguidoexpression id = exp->getArg(0); + Sguidoexpression body = exp->getArg(1); + if (!id || !body) throw (newException (kMissingArgument)); + + Sguidoexpression idexp = id->getArg(0); + if (!idexp) throw (newException (kNullValue)); + + SguidoEnv env = guidoEnv::create(); + Sguidovalue valId = idexp->eval(env); + if (!valId) throw (newException (kNullValue)); + fEnv->bind (id, valId); + + Sguidovalue valBody = body->eval(fEnv); + if (!valBody) throw (newException (kNullValue)); + + unsigned int length = valBody->length(); + rational dur = valBody->duration(); + unsigned int voices = valBody->voices(); + fValue = guidoClosureValue::create(id, body, fEnv, length, dur, voices); +} + +void guidoEval::visitStart( SguidoApplyExpr& exp) +{ + Sguidoexpression arg1 = exp->getArg(0); + Sguidoexpression arg2 = exp->getArg(1); + if (!arg1 || !arg2) throw (newException (kMissingArgument)); + + Sguidovalue earg1 = arg1->eval(fEnv); + Sguidovalue earg2 = guidoEvalSusp::create(arg2, fEnv); + fValue = earg1->apply(earg2); +} + +void guidoEval::visitStart( SguidoTranspExpr& exp) +{ + evalPrint (exp->getName()); + Sguidovalue earg1, earg2; + evalBinary (exp, earg1, earg2); + int interval = earg2->pitch() - earg1->pitch(); + fValue = earg1->transpose(interval); +} + +void guidoEval::visitStart( SguidoStretchExpr& exp) +{ + evalPrint (exp->getName()); + Sguidovalue earg1, earg2; + evalBinary (exp, earg1, earg2); + rational dur = earg2->duration() - earg1->duration(); + fValue = earg1->stretch(dur.rationalise()); +} + +void guidoEval::visitStart( SguidoSeqExpr& exp) +{ + evalPrint (exp->getName()); + Sguidovalue earg1, earg2; + evalBinary (exp, earg1, earg2); + fValue = guidoSeqValue::create(earg1, earg2); +} + +void guidoEval::visitStart( SguidoParExpr& exp) +{ + evalPrint (exp->getName()); + Sguidovalue earg1, earg2; + evalBinary (exp, earg1, earg2); + fValue = guidoMixValue::create(earg1, earg2); +} + +void guidoEval::visitStart( SguidoHeadExpr& exp) +{ + evalPrint (exp->getName()); + Sguidovalue earg1, earg2; + evalBinary (exp, earg1, earg2); + fValue = earg1->head(earg2->length()); +} + +void guidoEval::visitStart( SguidoTailExpr& exp) +{ + evalPrint (exp->getName()); + Sguidovalue earg1, earg2; + evalBinary (exp, earg1, earg2); + fValue = earg1->tail(earg2->length()); +} + +void guidoEval::visitStart( SguidoTopExpr& exp) +{ + evalPrint (exp->getName()); + Sguidovalue earg1, earg2; + evalBinary (exp, earg1, earg2); + fValue = earg1->top(earg2->length()); +} + +void guidoEval::visitStart( SguidoBottomExpr& exp) +{ + evalPrint (exp->getName()); + Sguidovalue earg1, earg2; + evalBinary (exp, earg1, earg2); + fValue = earg1->bottom(earg2->length()); +} + +void guidoEval::visitStart( SguidoIdentExpr& exp) +{ +// evalPrint (exp->getName() << " '" << exp->getArg(0) << "' (" << (void*)exp << ") - " << fEnv); + evalPrint (exp->getName() << " '" << exp->getArg(0) << "'"); +// evalPrint (exp->getName()); + Sguidoexpression e = exp; + if (!e) throw (newException (kMissingArgument)); + if (!fEnv) throw (newException (kNullEnvironment)); + fValue = fEnv->value(e); +} + +void guidoEval::visitStart( SguidoScoreExpr& exp) +{ + evalPrint (exp->getName()); + fValue = guidoScoreValue::create (exp->getScore()); +} + +} // namespace + diff --git a/guidoar-dev/src/lang/visitors/guidoEval.h b/guidoar-dev/src/lang/visitors/guidoEval.h new file mode 100644 index 000000000..7c86984b0 --- /dev/null +++ b/guidoar-dev/src/lang/visitors/guidoEval.h @@ -0,0 +1,84 @@ +/* + GUIDO Library + Copyright (C) 2006-2008 Grame + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + + Grame Research Laboratory, 9 rue du Garet, 69001 Lyon - France + research@grame.fr + +*/ + +#ifndef __guidoEval__ +#define __guidoEval__ + +#include "export.h" +#include "guidoExprTypes.h" +#include "visitor.h" + +namespace guidolang +{ + +/*! \brief base class for the evaluation functors */ +class export guidoEval : + public guido::visitor, + public guido::visitor, + public guido::visitor, + public guido::visitor, + public guido::visitor, + public guido::visitor, + public guido::visitor, + public guido::visitor, + public guido::visitor, + public guido::visitor, + public guido::visitor, + public guido::visitor, + public guido::visitor, + public guido::visitor, + public guido::visitor +{ + private: + Sguidovalue fValue; + SguidoEnv fEnv; + + public: + guidoEval() {} + virtual ~guidoEval() {} + + Sguidovalue eval(Sguidoexpression, SguidoEnv); + + protected: + virtual void evalBinary( Sguidoexpression e, Sguidovalue& v1, Sguidovalue& v2); + + virtual void visitStart( Sguidoexpression&); + virtual void visitStart( SguidoNamedExpr&); + virtual void visitStart( SguidoGroupedExpr&); + virtual void visitStart( SguidoAbstractExpr&); + virtual void visitStart( SguidoApplyExpr&); + virtual void visitStart( SguidoTranspExpr&); + virtual void visitStart( SguidoStretchExpr&); + virtual void visitStart( SguidoSeqExpr&); + virtual void visitStart( SguidoParExpr&); + virtual void visitStart( SguidoHeadExpr&); + virtual void visitStart( SguidoTailExpr&); + virtual void visitStart( SguidoTopExpr&); + virtual void visitStart( SguidoBottomExpr&); + virtual void visitStart( SguidoIdentExpr&); + virtual void visitStart( SguidoScoreExpr&); +}; + +} // namespace + +#endif diff --git a/guidoar-dev/src/lang/visitors/guidoExpPrinter.cpp b/guidoar-dev/src/lang/visitors/guidoExpPrinter.cpp new file mode 100644 index 000000000..f0c8eeb5f --- /dev/null +++ b/guidoar-dev/src/lang/visitors/guidoExpPrinter.cpp @@ -0,0 +1,152 @@ +/* + GUIDO Library + Copyright (C) 2008 Grame + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + + Grame Research Laboratory, 9 rue du Garet, 69001 Lyon - France + research@grame.fr + +*/ + +#ifndef __guidoExpPrinter__ +#define __guidoExpPrinter__ + +#include + +#include "guidoExpPrinter.h" +#include "guidoexpression.h" +#include "guidoScoreExpr.h" +#include "guidoNamedExpr.h" +#include "tree_browser.h" + +using namespace std; +using namespace guido; + +//#define printDebug +#ifdef printDebug +#define debug(msg) cout << " -> " << msg << " pending: " << fPendingOp.size() << ": "; stackPrint() +#else +#define debug(msg) +#endif + +namespace guidolang +{ + +//______________________________________________________________________________ +void guidoExpPrinter::stackPrint () +{ + stack s; + int size = fPendingOp.size(); + for (int i=0; i< size; i++) { + const char * str = fPendingOp.top(); + fPendingOp.pop(); + s.push(str); + cout << (str ? str : "0") << " "; + } + for (int i=0; i< size; i++) { + const char * str = s.top(); + s.pop(); + fPendingOp.push(str); + } + cout << endl; +} + +//______________________________________________________________________________ +void guidoExpPrinter::checkOp (bool pop) +{ + if (fPendingOp.size()) { + const char * op = fPendingOp.top(); + if (op) fOut << op << " "; + if (pop || op) fPendingOp.pop(); + } +} + +//______________________________________________________________________________ +void guidoExpPrinter::push (const char* opString) +{ + fPendingOp.push(opString); + fPendingOp.push(0); +} + +//______________________________________________________________________________ +// the visit methods +//______________________________________________________________________________ +void guidoExpPrinter::visitStart (Sguidoexpression& exp) +{ + if (fInNamed) return; + debug("guidoExpPrinter::visitStart Sguidoexpression " << exp->getName()); + checkOp (); + push(exp->getName().c_str()); +} + +//______________________________________________________________________________ +void guidoExpPrinter::visitStart (SguidoGroupedExpr& exp) +{ + debug("guidoExpPrinter::visitStart SguidoGroupedExpr"); + checkOp (false); + fOut << "(" ; +} + +//______________________________________________________________________________ +void guidoExpPrinter::visitEnd (SguidoGroupedExpr& exp) +{ + fOut << ")" << endl; +} + +//______________________________________________________________________________ +void guidoExpPrinter::visitStart (SguidoNamedExpr& exp) +{ + debug("guidoExpPrinter::visitStart SguidoNamedExpr"); + checkOp (); + fOut << exp->getName() << endl; + fInNamed = true; +} + +//______________________________________________________________________________ +void guidoExpPrinter::visitEnd (SguidoNamedExpr& exp) +{ + fInNamed = false; +} + +//______________________________________________________________________________ +void guidoExpPrinter::visitStart( SguidoIdentExpr& exp) +{ + // don't print the identifier but let the enclosed expression be printed +} + +//______________________________________________________________________________ +void guidoExpPrinter::visitStart( SguidoAbstractExpr& exp) +{ + if (fInNamed) return; + debug("guidoExpPrinter::visitStart SguidoAbstractExpr"); + checkOp (); + fOut << "#"; + push(exp->getName().c_str()); +} + +//______________________________________________________________________________ +void guidoExpPrinter::visitStart (SguidoScoreExpr& exp) +{ + if (fInNamed) return; + debug("guidoExpPrinter::visitStart SguidoScoreExpr"); + checkOp (); + fOut << exp->getScore() << endl; +} + + +} // namespace + +#endif diff --git a/guidoar-dev/src/lang/visitors/guidoExpPrinter.h b/guidoar-dev/src/lang/visitors/guidoExpPrinter.h new file mode 100644 index 000000000..e4f6d02ad --- /dev/null +++ b/guidoar-dev/src/lang/visitors/guidoExpPrinter.h @@ -0,0 +1,74 @@ +/* + GUIDO Library + Copyright (C) 2008 Grame + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + + Grame Research Laboratory, 9 rue du Garet, 69001 Lyon - France + research@grame.fr + +*/ + +#ifndef __guidoExpReader__ +#define __guidoExpReader__ + +#include +#include + +#include "guidoExprTypes.h" +#include "visitor.h" + +namespace guidolang +{ + +//______________________________________________________________________________ +/*! +\brief a guido language expression printer +*/ +class export guidoExpPrinter : + public guido::visitor, + public guido::visitor, + public guido::visitor, + public guido::visitor, + public guido::visitor, + public guido::visitor +{ + private: + bool fInNamed; + std::ostream& fOut; ///< the output stream + std::stack fPendingOp; ///< the pending operations names + + public: + guidoExpPrinter(std::ostream& out) : fInNamed(false), fOut(out) {} + virtual ~guidoExpPrinter() {} + + protected: + virtual void visitStart( Sguidoexpression&); + virtual void visitStart( SguidoNamedExpr&); + virtual void visitEnd ( SguidoNamedExpr&); + virtual void visitStart( SguidoGroupedExpr&); + virtual void visitEnd ( SguidoGroupedExpr&); + virtual void visitStart( SguidoAbstractExpr&); + virtual void visitStart( SguidoScoreExpr&); + virtual void visitStart( SguidoIdentExpr&); + + void checkOp (bool pop=true); // check if operation need to be flushed + void push (const char *); // push operation name on a stack + void stackPrint (); +}; + +} // namespace + +#endif diff --git a/guidoar-dev/src/lang/visitors/replaceVisitor.cpp b/guidoar-dev/src/lang/visitors/replaceVisitor.cpp new file mode 100644 index 000000000..e2266cfa7 --- /dev/null +++ b/guidoar-dev/src/lang/visitors/replaceVisitor.cpp @@ -0,0 +1,115 @@ +/* + + MusicXML Library + Copyright (C) 2006,2007 Grame + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + + Grame Research Laboratory, 9 rue du Garet, 69001 Lyon - France + research@grame.fr + +*/ + +#ifdef WIN32 +#pragma warning (disable : 4786) +#endif + +#include + +#include "guidoExpFactory.h" +#include "guidoexpression.h" +#include "guidoExpression.h" +#include "guidoScoreExpr.h" +#include "replaceVisitor.h" +#include "tree_browser.h" + +using namespace std; +using namespace guido; + +namespace guidolang +{ + +//______________________________________________________________________________ +Sguidoexpression replaceVisitor::replace(const Sguidoexpression& exp, const Sguidoexpression& target, const Sguidoexpression& with) +{ + fCopy = true; + fMatched = false; + fTarget = target; + fIdent = with; + return clone(exp); +} + +//______________________________________________________________________________ +void replaceVisitor::replace(const Sguidoexpression& ident) +{ + push (ident, false); // push the replacement + fCopy = false; // prevent copying subtree + stop(); + fMatched = true; +} + +//______________________________________________________________________________ +// the visit methods +//______________________________________________________________________________ +void replaceVisitor::visitStart( Sguidoexpression& exp ) +{ + if (*exp == fTarget) { // target expression found ? + replace (fIdent); + } + else cloneExpVisitor::visitStart(exp); +} + +//______________________________________________________________________________ +void replaceVisitor::visitEnd ( Sguidoexpression& exp ) +{ + if (!fCopy) { + fCopy = true; + stop(false); + } + else cloneExpVisitor::visitEnd (exp); +} + +//______________________________________________________________________________ +void replaceVisitor::visitStart( SguidoIdentExpr& exp ) +{ + push(exp, false); // don't duplicate identificators + stop(); +} + +//______________________________________________________________________________ +void replaceVisitor::visitEnd( SguidoIdentExpr& exp ) +{ + stop(false); +} + +//______________________________________________________________________________ +void replaceVisitor::visitStart( SguidoScoreExpr& exp ) +{ + SguidoScoreExpr scoreExp = dynamic_cast ((guidoexpression*)fTarget); + if (scoreExp && fStretchScore) { + Sguidoexpression e= exp; + Sguidoexpression transp = guidoExpFactory::instance().create ("transp", fTarget, e); + Sguidoexpression stretch = guidoExpFactory::instance().create ("stretch", transp, e); + push (stretch, false); // push stretch(transp) as replacement + fMatched = true; + } + else if (*exp == fTarget) { // target expression found ? + push (fIdent, false); // push the replacement + fMatched = true; + } + else cloneExpVisitor::visitStart(exp); +} + +} diff --git a/guidoar-dev/src/lang/visitors/replaceVisitor.h b/guidoar-dev/src/lang/visitors/replaceVisitor.h new file mode 100644 index 000000000..017abe8b0 --- /dev/null +++ b/guidoar-dev/src/lang/visitors/replaceVisitor.h @@ -0,0 +1,72 @@ +/* + GUIDO Library + Copyright (C) 2006 Grame + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + + Grame Research Laboratory, 9 rue du Garet, 69001 Lyon - France + research@grame.fr + +*/ + +#ifndef __replaceVisitor__ +#define __replaceVisitor__ + +#include + +#include "cloneExpVisitor.h" + +namespace guidolang +{ + +/*! +\addtogroup visitors +@{ +*/ + +//______________________________________________________________________________ +/*! +\brief A visitor to print the gmn description +*/ +class export replaceVisitor : + public cloneExpVisitor, + public guido::visitor +{ + public: + replaceVisitor(bool createStretch=false) : fCopy(true), fMatched(false), fStretchScore(createStretch) {} + virtual ~replaceVisitor() {} + + virtual Sguidoexpression replace(const Sguidoexpression& exp, const Sguidoexpression& target, const Sguidoexpression& with); + bool matched() { return fMatched; } + + protected: + Sguidoexpression fTarget, fIdent; + bool fCopy, fMatched, fStretchScore; + virtual bool copy () const { return fCopy; } + + virtual void visitStart ( Sguidoexpression&); + virtual void visitEnd ( Sguidoexpression&); + virtual void visitStart ( SguidoScoreExpr&); + virtual void visitStart ( SguidoIdentExpr&); + virtual void visitEnd ( SguidoIdentExpr&); + + void replace(const Sguidoexpression& ident); +}; + +/*! @} */ + +} // namespace + +#endif diff --git a/guidoar-dev/src/lang/visitors/suspVisitor.cpp b/guidoar-dev/src/lang/visitors/suspVisitor.cpp new file mode 100644 index 000000000..d84833843 --- /dev/null +++ b/guidoar-dev/src/lang/visitors/suspVisitor.cpp @@ -0,0 +1,83 @@ +/* + + MusicXML Library + Copyright (C) 2006,2007 Grame + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + + Grame Research Laboratory, 9 rue du Garet, 69001 Lyon - France + research@grame.fr + +*/ + +#ifdef WIN32 +#pragma warning (disable : 4786) +#endif + +#include + +#include "suspVisitor.h" + +using namespace std; +using namespace guido; + +namespace guidolang +{ + +//______________________________________________________________________________ +Sguidovalue suspVisitor::force(const Sguidovalue& exp) +{ + fValue = 0; + exp->acceptIn (*this); + return fValue; +} + +//______________________________________________________________________________ +// the visit methods +//______________________________________________________________________________ +void suspVisitor::visitStart( Sguidovalue& exp ) +{ + fValue = exp; +} + +//______________________________________________________________________________ +void suspVisitor::visitStart( Sguidosusp& exp ) +{ + cerr << __FILE__ << ": unexpected Sguidosusp received" << endl; +} + +//______________________________________________________________________________ +void suspVisitor::visitStart( SguidoApplySusp& exp ) +{ + fValue = exp->apply (fArg); + +} + +//______________________________________________________________________________ +void suspVisitor::visitStart( SguidoClosureSusp& exp ) +{ +} + +//______________________________________________________________________________ +void suspVisitor::visitStart( SguidoSeqSusp& exp ) +{ +} + +//______________________________________________________________________________ +void suspVisitor::visitStart( SguidoParSusp& exp ) +{ +} + +} diff --git a/guidoar-dev/src/lang/visitors/suspVisitor.h b/guidoar-dev/src/lang/visitors/suspVisitor.h new file mode 100644 index 000000000..b8c379db8 --- /dev/null +++ b/guidoar-dev/src/lang/visitors/suspVisitor.h @@ -0,0 +1,72 @@ +/* + GUIDO Library + Copyright (C) 2006 Grame + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + + Grame Research Laboratory, 9 rue du Garet, 69001 Lyon - France + research@grame.fr + +*/ + +#ifndef __suspVisitor__ +#define __suspVisitor__ + +#include + +#include "guidoSuspTypes.h" +#include "visitor.h" + +namespace guidolang +{ + +/*! +\addtogroup visitors +@{ +*/ + +//______________________________________________________________________________ +/*! +\brief A susps visitor +*/ +class export suspVisitor : + public guido::visitor, + public guido::visitor, + public guido::visitor, + public guido::visitor, + public guido::visitor +{ + public: + suspVisitor() {} + virtual ~suspVisitor() {} + + Sguidovalue force (const Sguidovalue&); + + protected: + virtual void visitStart ( Sguidovalue&); + virtual void visitStart ( Sguidosusp&); + virtual void visitStart ( SguidoApplySusp&); + virtual void visitStart ( SguidoClosureSusp&); + virtual void visitStart ( SguidoSeqSusp&); + virtual void visitStart ( SguidoParSusp&); + + Sguidovalue fValue; +}; + +/*! @} */ + +} // namespace + +#endif diff --git a/guidoar-dev/src/lang/visitors/valueRenderer.cpp b/guidoar-dev/src/lang/visitors/valueRenderer.cpp new file mode 100644 index 000000000..5414e2e36 --- /dev/null +++ b/guidoar-dev/src/lang/visitors/valueRenderer.cpp @@ -0,0 +1,156 @@ +/* + + MusicXML Library + Copyright (C) 2006,2007 Grame + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + + Grame Research Laboratory, 9 rue du Garet, 69001 Lyon - France + research@grame.fr + +*/ + +#ifdef WIN32 +#pragma warning (disable : 4786) +#endif + +#include + +#include "exceptions.h" +#include "guidoexpression.h" +#include "guidoApplyValue.h" +#include "guidoEval.h" +#include "guidoEvalSusp.h" +#include "guidoClosureValue.h" +#include "guidoErrValue.h" +#include "guidoMixValue.h" +#include "guidoScoreValue.h" +#include "guidoSeqValue.h" +#include "valueRenderer.h" + +#include "AROthers.h" +#include "seqOperation.h" +#include "parOperation.h" + +using namespace std; +using namespace guido; + +namespace guidolang +{ + +#ifdef WIN32 +#define kSep "\\" +#else +#define kSep "/" +#endif + +//______________________________________________________________________________ +Sguidoelement valueRenderer::render(const Sguidoexpression& exp) +{ + fPos = 0; + try { + SguidoEnv env = guidoEnv::create(); + Sguidovalue val = exp->eval(env); + if (val) return render(val); + } catch (const TException& e) { + string file(e.file); + size_t pos = file.find_last_of(kSep); + if (pos != string::npos) file = file.substr(pos+1); + cerr << e.msg << " - file: '" << file << "' line: " << e.line << endl; + } + return 0; +} + +//______________________________________________________________________________ +Sguidoelement valueRenderer::render(const Sguidovalue& val) +{ + fScore = 0; +cout << "valueRenderer::render " << val << endl; + val->acceptIn (*this); + return fScore; +} + +//______________________________________________________________________________ +// the visit methods +//______________________________________________________________________________ +void valueRenderer::visitStart( Sguidovalue& exp ) +{ + cerr << __FILE__ << ": unexpected Sguidovalue received" << endl; +} + +//______________________________________________________________________________ +void valueRenderer::visitStart( SguidoApplyValue& exp ) +{ + fPos++; + if (fPos < fLimit) { + Sguidovalue v1 = exp->getArg1(); + Sguidovalue v2 = exp->getArg2(); + fScore = render (v1->apply(v2)); + } + else { + cout << "SguidoApplyValue rendering limit reached" << endl; + } +} + +//______________________________________________________________________________ +void valueRenderer::visitStart( SguidoEvalSusp& exp ) +{ + fScore = render (exp->force()); +} + +//______________________________________________________________________________ +void valueRenderer::visitStart( SguidoClosureValue& exp ) +{ + cout << "valueRenderer SguidoClosureValue" << endl; +} + +//______________________________________________________________________________ +void valueRenderer::visitStart( SguidoSeqValue& exp ) +{ + Sguidovalue v2 = exp->getArg2(); + SARMusic s1 = dynamic_cast ((guidoelement*)render(exp->getArg1())); + SARMusic s2 = dynamic_cast ((guidoelement*)render(v2)); + if (s1 && s2) { + seqOperation seq; + fScore = seq(s1, s2); + } + else { + SguidoErrValue err1 = dynamic_cast ((guidovalue*)exp->getArg1()); + SguidoErrValue err2 = dynamic_cast ((guidovalue*)v2); + cout << "SguidoSeqValue err " << (void*)err1 << " - " << (void*)err2 << endl; + if (err2) fScore = s1; + else fScore = 0; + } +} + +//______________________________________________________________________________ +void valueRenderer::visitStart( SguidoScoreValue& exp ) +{ + fScore = exp->getScore(); +} + +//______________________________________________________________________________ +void valueRenderer::visitStart( SguidoMixValue& exp ) +{ + SARMusic s1 = dynamic_cast ((guidoelement*)render(exp->getArg1())); + SARMusic s2 = dynamic_cast ((guidoelement*)render(exp->getArg2())); + if (s1 && s2) { + parOperation mix; + fScore = mix(s1, s2); + } + else fScore = 0; +} + +} diff --git a/guidoar-dev/src/lang/visitors/valueRenderer.h b/guidoar-dev/src/lang/visitors/valueRenderer.h new file mode 100644 index 000000000..f3b61d32f --- /dev/null +++ b/guidoar-dev/src/lang/visitors/valueRenderer.h @@ -0,0 +1,78 @@ +/* + GUIDO Library + Copyright (C) 2006 Grame + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + + Grame Research Laboratory, 9 rue du Garet, 69001 Lyon - France + research@grame.fr + +*/ + +#ifndef __valueVisitor__ +#define __valueVisitor__ + +#include + +#include "guidoValueTypes.h" +#include "guidoelement.h" +#include "visitor.h" + +namespace guidolang +{ + +/*! +\addtogroup visitors +@{ +*/ + +//______________________________________________________________________________ +/*! +\brief A values visitor +*/ +class export valueRenderer : + public guido::visitor, + public guido::visitor, + public guido::visitor, + public guido::visitor, + public guido::visitor, + public guido::visitor, + public guido::visitor +{ + public: + valueRenderer() : fLimit (20) {} + virtual ~valueRenderer() {} + + guido::Sguidoelement render(const Sguidoexpression&); + guido::Sguidoelement render(const Sguidovalue&); + + protected: + virtual void visitStart ( Sguidovalue&); + virtual void visitStart ( SguidoSeqValue&); + virtual void visitStart ( SguidoScoreValue&); + virtual void visitStart ( SguidoMixValue&); + virtual void visitStart ( SguidoEvalSusp&); + virtual void visitStart ( SguidoClosureValue&); + virtual void visitStart ( SguidoApplyValue&); + + unsigned int fPos, fLimit; + guido::Sguidoelement fScore; +}; + +/*! @} */ + +} // namespace + +#endif diff --git a/guidoar-dev/src/lib/browser.h b/guidoar-dev/src/lib/browser.h new file mode 100644 index 000000000..ca1dbfa2e --- /dev/null +++ b/guidoar-dev/src/lib/browser.h @@ -0,0 +1,42 @@ +/* + + MusicXML Library + Copyright (C) 2006 Grame + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + + Grame Research Laboratory, 9 rue du Garet, 69001 Lyon - France + research@grame.fr + +*/ + +#ifndef __browser__ +#define __browser__ + +#include "ctree.h" + +namespace guido +{ + +//______________________________________________________________________________ +template class browser { + public: + virtual ~browser() {} + virtual void browse (T& t) = 0; +}; + +} + +#endif diff --git a/guidoar-dev/src/lib/ctree.h b/guidoar-dev/src/lib/ctree.h new file mode 100644 index 000000000..9bed90074 --- /dev/null +++ b/guidoar-dev/src/lib/ctree.h @@ -0,0 +1,182 @@ +/* + + GUIDOEngine Library + Copyright (C) 2007 Grame + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + + Grame Research Laboratory, 9 rue du Garet, 69001 Lyon - France + research@grame.fr + +*/ + +#ifndef __ctree__ +#define __ctree__ + +#ifdef WIN32 +#pragma warning (disable : 4786) +#endif + +#include +#include +#include +#include +#include "gar_smartpointer.h" +#include "visitable.h" + +namespace guido +{ + +//______________________________________________________________________________ +template class treeIterator : public std::iterator +{ + private: + //________________________________________________________________________ + T getParent() const { return fStack.size() ? fStack.top().second : fRootElement; } + + //________________________________________________________________________ + // current element has sub-elements: go down to sub-elements first + void forward_down(const T& t) { + fCurrentIterator = t->elements().begin(); + if (fCurrentIterator != t->elements().end()) + fStack.push( std::make_pair(fCurrentIterator+1, t)); + } + + //________________________________________________________________________ + // current element is empty: go up to parent element and possibly down to neighbor element + void forward_up() { + while (fStack.size()) { + state s = fStack.top(); + fStack.pop(); + + fCurrentIterator = s.first; + if (fCurrentIterator != s.second->elements().end()) { + fStack.push( std::make_pair(fCurrentIterator+1, s.second)); + return; + } + } + } + + //________________________________________________________________________ + // move the iterator forward + void forward() { + if ((*fCurrentIterator)->size()) forward_down(*fCurrentIterator); + else forward_up(); + } + + protected: + typedef typename std::vector::iterator nodes_iterator; + typedef std::pair state; + + std::stack fStack; + T fRootElement; + nodes_iterator fCurrentIterator; + + public: + treeIterator() {} + treeIterator(const T& t, bool end=false) { + fRootElement = t; + if (end) fCurrentIterator = t->elements().end(); + else forward_down (t); + } + treeIterator(const treeIterator& a) { *this = a; } + virtual ~treeIterator() {} + + T operator *() const { return *fCurrentIterator; } + T operator ->() const { return *fCurrentIterator; } + treeIterator& operator ++() { forward(); return *this; } + treeIterator& operator ++(int) { forward(); return *this; } + + //________________________________________________________________________ + // inc the iterator at the same vector level ie without forward down + treeIterator& rightShift() { forward_up(); return *this; } + + //________________________________________________________________________ + treeIterator& erase() { + T parent = getParent(); + fCurrentIterator = parent->elements().erase(fCurrentIterator); + if (fStack.size()) fStack.pop(); + if (fCurrentIterator != parent->elements().end()) { + fStack.push( std::make_pair(fCurrentIterator+1, parent)); + } + else forward_up(); + return *this; + } + + //________________________________________________________________________ + treeIterator& insert(const T& value) { + T parent = getParent(); + fCurrentIterator = parent->elements().insert(fCurrentIterator, value); + if (fStack.size()) fStack.pop(); + fStack.push( std::make_pair(fCurrentIterator+1, parent)); + return *this; + } + + //________________________________________________________________________ + bool operator ==(const treeIterator& i) const { + // we check that the iterators have the same parent (due to iterator compatibility issue with visual c++) + return getParent() == i.getParent() ? ( fCurrentIterator==i.fCurrentIterator ) : false; + } + bool operator !=(const treeIterator& i) const { return !(*this == i); } +}; + +/*! +\brief a simple tree representation +*/ +//______________________________________________________________________________ +template class ctree : virtual public smartable +{ + public: + typedef SMARTP treePtr; ///< the node sub elements type + typedef std::vector branchs; ///< the node sub elements container type + typedef typename branchs::iterator literator; ///< the current level iterator type + typedef typename branchs::const_iterator const_literator; ///< the current level const_iterator type + typedef treeIterator iterator; ///< the top -> bottom iterator type + +// static treePtr new_tree() { ctree* o = new ctree; assert(o!=0); return o; } + + branchs& elements() { return fElements; } + const branchs& elements() const { return fElements; } + virtual void push (const treePtr& t) { fElements.push_back(t); } + virtual void push (const branchs& b) { const_literator i; + for (i = b.begin(); i != b.end(); i++) + fElements.push_back(*i); + } + virtual int size () const { return int(fElements.size()); } + virtual bool empty () const { return fElements.size()==0; } + virtual void clear () { fElements.clear(); } + + iterator begin() { treePtr start=dynamic_cast(this); return iterator(start); } + iterator end() { treePtr start=dynamic_cast(this); return iterator(start, true); } + iterator erase(iterator i) { return i.erase(); } + iterator insert(iterator before, const treePtr& value) { return before.insert(value); } + + literator lbegin() { return fElements.begin(); } + literator lend() { return fElements.end(); } + const_literator lbegin() const { return fElements.begin(); } + const_literator lend() const { return fElements.end(); } + + protected: + ctree() {} + virtual ~ctree() {} + + private: + branchs fElements; +}; + + +} + +#endif diff --git a/guidoar-dev/src/lib/functor.h b/guidoar-dev/src/lib/functor.h new file mode 100644 index 000000000..b418ba61f --- /dev/null +++ b/guidoar-dev/src/lib/functor.h @@ -0,0 +1,69 @@ +/* + GUIDO Library + Copyright (C) 2006 Grame + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + + Grame Research Laboratory, 9 rue du Garet, 69001 Lyon - France + research@grame.fr + +*/ + +#ifndef __functor__ +#define __functor__ + +/*! +\addtogroup generic +@{ +*/ + +namespace guido +{ + +/*! +\brief basic functor templates +*/ +template +class rfunctor { + public: + virtual ~rfunctor() {} + virtual R operator ()() = 0; +}; + +/*! +\brief A basic functor template +*/ +template +class functor { + public: + virtual ~functor() {} + virtual R operator ()(T) = 0; ///< the operator () supports a single parameter +}; + +/*! +\brief A 2 args functor template +*/ +template +class functor2 { + public: + virtual ~functor2() {} + virtual R operator ()(T1, T2) = 0; +}; + +} // namespace + +/*! @} */ + +#endif diff --git a/guidoar-dev/src/lib/gar_smartpointer.h b/guidoar-dev/src/lib/gar_smartpointer.h new file mode 100644 index 000000000..8e4898d84 --- /dev/null +++ b/guidoar-dev/src/lib/gar_smartpointer.h @@ -0,0 +1,144 @@ +/* + + GUIDOEngine Library + Copyright (C) 2003 Grame + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + + Grame Research Laboratory, 9 rue du Garet, 69001 Lyon - France + grame@grame.fr + +*/ + +#pragma once + +#ifdef HAS_LIBMAPPING_SMARTP + +#include "smartpointer.h" + +#define SMARTP libmapping::SMARTP +#define smartable libmapping::smartable + +#else + +#include +#include "arexport.h" + +namespace guido +{ + +/*! +\brief the base class for smart pointers implementation + + Any object that want to support smart pointers should + inherit from the smartable class which provides reference counting + and automatic delete when the reference count drops to zero. +*/ +class gar_export smartable { + private: + unsigned refCount; + public: + //! gives the reference count of the object + unsigned refs() const { return refCount; } + //! addReference increments the ref count and checks for refCount overflow + void addReference() { refCount++; assert(refCount != 0); } + //! removeReference delete the object when refCount is zero + void removeReference() { if (--refCount == 0) delete this; } + + protected: + smartable() : refCount(0) {} + smartable(const smartable&): refCount(0) {} + //! destructor checks for non-zero refCount + virtual ~smartable() { assert (refCount == 0); } + smartable& operator=(const smartable&) { return *this; } +}; + +/*! +\brief the smart pointer implementation + + A smart pointer is in charge of maintaining the objects reference count + by the way of pointers operators overloading. It supports class + inheritance and conversion whenever possible. +\n Instances of the SMARTP class are supposed to use \e smartable types (or at least + objects that implements the \e addReference and \e removeReference + methods in a consistent way). +*/ +template class SMARTP { + private: + //! the actual pointer to the class + T* fSmartPtr; + + public: + //! an empty constructor - points to null + SMARTP() : fSmartPtr(0) {} + //! build a smart pointer from a class pointer + SMARTP(T* rawptr) : fSmartPtr(rawptr) { if (fSmartPtr) fSmartPtr->addReference(); } + //! build a smart pointer from an convertible class reference + template + SMARTP(const SMARTP& ptr) : fSmartPtr((T*)ptr) { if (fSmartPtr) fSmartPtr->addReference(); } + //! build a smart pointer from another smart pointer reference + SMARTP(const SMARTP& ptr) : fSmartPtr((T*)ptr) { if (fSmartPtr) fSmartPtr->addReference(); } + + //! the smart pointer destructor: simply removes one reference count + ~SMARTP() { if (fSmartPtr) fSmartPtr->removeReference(); } + + //! cast operator to retrieve the actual class pointer + operator T*() const { return fSmartPtr; } + + //! '*' operator to access the actual class pointer + T& operator*() const { + // checks for null dereference + assert (fSmartPtr != 0); + return *fSmartPtr; + } + + //! operator -> overloading to access the actual class pointer + T* operator->() const { + // checks for null dereference + assert (fSmartPtr != 0); + return fSmartPtr; + } + + //! operator = that moves the actual class pointer + template + SMARTP& operator=(T2 p1_) { *this=(T*)p1_; return *this; } + + //! operator = that moves the actual class pointer + SMARTP& operator=(T* p_) { + // check first that pointers differ + if (fSmartPtr != p_) { + // increments the ref count of the new pointer if not null + if (p_ != 0) p_->addReference(); + // decrements the ref count of the old pointer if not null + if (fSmartPtr != 0) fSmartPtr->removeReference(); + // and finally stores the new actual pointer + fSmartPtr = p_; + } + return *this; + } + //! operator < to support SMARTP map with Visual C++ + bool operator<(const SMARTP& p_) const { return fSmartPtr < ((T *) p_); } + //! operator = to support inherited class reference + SMARTP& operator=(const SMARTP& p_) { return operator=((T *) p_); } + //! dynamic cast support + template SMARTP& cast(T2* p_) { return operator=(dynamic_cast(p_)); } + //! dynamic cast support + template SMARTP& cast(const SMARTP& p_) { return operator=(dynamic_cast(p_)); } +}; + +} + +#endif + diff --git a/guidoar-dev/src/lib/guidorational.cpp b/guidoar-dev/src/lib/guidorational.cpp new file mode 100644 index 000000000..72a7e0e80 --- /dev/null +++ b/guidoar-dev/src/lib/guidorational.cpp @@ -0,0 +1,245 @@ +/* + Copyright � Grame 2003 + + This library is free software; you can redistribute it and modify it under + the terms of the GNU Library General Public License as published by the + Free Software Foundation version 2 of the License, or any later version. + + This library is distributed in the hope that it will be useful, but + WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY + or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Library General Public License + for more details. + + You should have received a copy of the GNU Library General Public License + along with this library; if not, write to the Free Software + Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + + Grame Research Laboratory, 9, rue du Garet 69001 Lyon - France + research@grame.fr + +*/ + +#include +#include +#include +#include +#include "guidorational.h" + +using namespace std; + +namespace guido +{ + +string rational::toString() const +{ + ostringstream res; + res << fNumerator << "/" << fDenominator; + return res.str(); +} + +rational::operator string() const +{ + return toString(); +} + +rational::operator double() const +{ + return toDouble(); +} + +rational::operator float() const +{ + return toFloat(); +} + +rational::operator int() const +{ + const double x = toDouble(); + return ((int)floor(x + 0.5f)); +} + +rational::rational(const string &str) +{ + const char *cstr; + cstr = str.c_str(); + const char *denom; + denom = strstr(cstr,"/"); + if (denom) ++denom; + fNumerator = atol(cstr); + if (denom) fDenominator = atol(denom); +} + +rational::rational(long int num, long int denom) : fNumerator(num), fDenominator(denom) +{ + // don't allow zero denominators! + if (fDenominator == 0) fDenominator = 1; +} + +rational::rational(const rational& d) +{ + fNumerator = d.fNumerator; + fDenominator = d.fDenominator; +} + +rational rational::operator +(const rational &dur) const { + return rational(fNumerator * dur.fDenominator + dur.fNumerator * fDenominator, fDenominator * dur.fDenominator); +} + +rational rational::operator -(const rational &dur) const { + return rational(fNumerator * dur.fDenominator - dur.fNumerator * fDenominator, fDenominator * dur.fDenominator); +} + +rational rational::operator *(const rational &dur) const { + return rational(fNumerator * dur.fNumerator, fDenominator * dur.fDenominator); +} + +rational rational::operator /(const rational &dur) const { + return rational(fNumerator * dur.fDenominator, fDenominator * dur.fNumerator); +} + +rational rational::operator *(int num) const { + return rational(fNumerator * num, fDenominator); +} + +rational rational::operator /(int num) const { + return rational(fNumerator, fDenominator * num); +} + +rational& rational::operator +=(const rational &dur) +{ + if(fDenominator == dur.fDenominator) { + fNumerator += dur.fNumerator; + } else { + fNumerator = fNumerator * dur.fDenominator + dur.fNumerator * fDenominator; + fDenominator *= dur.fDenominator; + } + return (*this); +} + +rational& rational::operator -=(const rational &dur) +{ + if(fDenominator == dur.fDenominator) { + fNumerator -= dur.fNumerator; + } else { + fNumerator = fNumerator * dur.fDenominator - dur.fNumerator * fDenominator; + fDenominator *= dur.fDenominator; + } + return (*this); +} + +rational& rational::operator *=(const rational &dur) +{ + fNumerator *= dur.fNumerator; + fDenominator *= dur.fDenominator; + return (*this); +} + +rational& rational::operator /=(const rational &dur) +{ + fNumerator *= dur.fDenominator; + fDenominator *= dur.fNumerator; + return (*this); +} + +rational& rational::operator =(const rational& dur) { + fNumerator = dur.fNumerator; + fDenominator = dur.fDenominator; + return (*this); +} + +bool rational::operator >(const rational &dur) const +{ + // a/b > c/d if and only if a * d > b * c. + return ((fNumerator * dur.fDenominator) > (fDenominator * dur.fNumerator)); +} + +bool rational::operator <(const rational &dur) const +{ + // a/b < c/d if and only if a * d < b * c. + return ((fNumerator * dur.fDenominator) < (fDenominator * dur.fNumerator)); +} + +bool rational::operator ==(const rational &dur) const +{ + // a/b < c/d if and only if a * d < b * c. + return ((fNumerator * dur.fDenominator) == (fDenominator * dur.fNumerator)); +} + +bool rational::operator >(double num) const +{ + return (toDouble() > num); +} + +bool rational::operator >= (double num) const +{ + return (toDouble() >= num); +} + +bool rational::operator <(double num) const +{ + return (toDouble() < num); +} + +bool rational::operator <=(double num) const +{ + return (toDouble() <= num); +} + +bool rational::operator ==(double num) const +{ + return (toDouble() == num); +} + +// gcd(a, b) calculates the gcd of a and b using Euclid's algorithm. +long int rational::gcd(long int a1, long int b1) +{ + long int r; + + long int a = (long int)abs(double(a1)); + long int b = (long int)abs(double(b1)); + + if (!(a == 0) || (b == 0)){ + while (b > 0){ + r = a % b; + a = b; + b = r; + } + return a; + } + return 1; +} + +rational& rational::rationalise() +{ + long int g = gcd(fNumerator, fDenominator); + fNumerator /= g; + fDenominator /= g; + if (fNumerator == 0) fDenominator = 1; + return *this; +} + +double rational::toDouble() const +{ + return (fDenominator != 0) ? ((double)fNumerator/(double)fDenominator) : 0; +} + +float rational::toFloat() const +{ + return (fDenominator != 0) ? ((float)fNumerator/(float)fDenominator) : 0; +} + +ostream& operator << (ostream& os, rational r) { + os << string(r); + return os; +} + +ostream& operator << (ostream& os, rationals l) { + rationals::const_iterator i = l.begin(); + while (i!=l.end()) { + os << string(*i++); + if (i!=l.end()) os << ", "; + } + return os; +} + +} diff --git a/guidoar-dev/src/lib/ringvector.h b/guidoar-dev/src/lib/ringvector.h new file mode 100644 index 000000000..f0d10e3a7 --- /dev/null +++ b/guidoar-dev/src/lib/ringvector.h @@ -0,0 +1,135 @@ +/* + + MusicXML Library + Copyright (C) 2009 Grame + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + + Grame Research Laboratory, 9 rue du Garet, 69001 Lyon - France + research@grame.fr + +*/ + +#ifndef __ringvector__ +#define __ringvector__ + +#include + +namespace guido +{ + +//______________________________________________________________________________ +template class fwbwIterator : public std::iterator +{ + protected: + typedef typename std::vector::iterator stdIterator; + stdIterator fIterator, fBegin, fEnd; + bool fForward; + + public: + fwbwIterator() : fForward(true) {} + fwbwIterator(const stdIterator& current, const stdIterator& beg, const stdIterator& end) + : fIterator(current), fBegin(beg), fEnd(end), fForward(current != end) {} + virtual ~fwbwIterator() {} + + T operator *() const { return *fIterator; } + T operator ->() const { return *fIterator; } + + fwbwIterator& operator ++() { + stdIterator i = fIterator; + if (fForward) { + i++; + if (i == fEnd) { + fIterator--; + fForward = false; + } + else fIterator = i; + } + else { + i--; + if (i == fBegin) { + fIterator--; + fForward = true; + } + else fIterator = i; + } + return *this; + } + fwbwIterator& operator ++(int) { return operator ++(); } + + //________________________________________________________________________ + bool operator ==(const fwbwIterator& i) const { return fIterator == i.fIterator; } + bool operator !=(const fwbwIterator& i) const { return !(*this == i); } +}; + +//______________________________________________________________________________ +template class ringvectorIterator : public std::iterator +{ + protected: + typedef typename std::vector::iterator stdIterator; + stdIterator fIterator, fBegin, fEnd; + + public: + ringvectorIterator() {} + ringvectorIterator(const stdIterator& current, const stdIterator& beg, const stdIterator& end) + : fIterator(current), fBegin(beg), fEnd(end) {} + virtual ~ringvectorIterator() {} + + T operator *() const { return *fIterator; } + T operator ->() const { return *fIterator; } + + ringvectorIterator& operator ++() { + fIterator++; + if (fIterator== fEnd) fIterator= fBegin; + return *this; + } + ringvectorIterator& operator ++(int) { return operator ++(); } + + //________________________________________________________________________ + bool operator ==(const ringvectorIterator& i) const { return fIterator == i.fIterator; } + bool operator !=(const ringvectorIterator& i) const { return !(*this == i); } +}; + +//______________________________________________________________________________ +template class ringvector : public std::vector +{ + typedef typename std::vector stdvec; + + public: + typedef ringvectorIterator iterator; + ringvector() {} + virtual ~ringvector() {} + + iterator begin() { return ringvectorIterator(stdvec::begin(), stdvec::begin(), stdvec::end()); } + iterator end() { return ringvectorIterator(stdvec::end(), stdvec::begin(), stdvec::end()); } +}; + +//______________________________________________________________________________ +template class fwbwvector : public std::vector +{ + typedef typename std::vector stdvec; + + public: + typedef fwbwIterator iterator; + fwbwvector() {} + virtual ~fwbwvector() {} + + iterator begin() { return fwbwIterator(stdvec::begin(), stdvec::begin(), stdvec::end()); } + iterator end() { return fwbwIterator(stdvec::end(), stdvec::begin(), stdvec::end()); } +}; + +} + +#endif diff --git a/guidoar-dev/src/lib/singleton.h b/guidoar-dev/src/lib/singleton.h new file mode 100644 index 000000000..4e0251252 --- /dev/null +++ b/guidoar-dev/src/lib/singleton.h @@ -0,0 +1,38 @@ +/* + + GUIDOEngine Library + Copyright (C) 2006 Grame + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + + Grame Research Laboratory, 9 rue du Garet, 69001 Lyon - France + research@grame.fr + +*/ + +#ifndef __singleton__ +#define __singleton__ + +// warning: this is NOT a thread safe implementation +template class singleton { + public: + static T& instance () { + static T theSingleInstance; + return theSingleInstance; + } +}; + + +#endif diff --git a/guidoar-dev/src/lib/streambeautifuller.cpp b/guidoar-dev/src/lib/streambeautifuller.cpp new file mode 100644 index 000000000..f87fc86fb --- /dev/null +++ b/guidoar-dev/src/lib/streambeautifuller.cpp @@ -0,0 +1,62 @@ +/* + + Copyright (C) 2006 Grame + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + + Grame Research Laboratory, 9 rue du Garet, 69001 Lyon - France + research@grame.fr + +*/ + +#include "streambeautifuller.h" + +using namespace std; + +streambeautifuller::streambeautifuller (ostream& stream, int max, int indentSize) + : fStream(stream), fSize(0), fMaxSize(max), fIndent(0), fIndentSize(indentSize) +{} + +void streambeautifuller::newline () +{ + int n = fIndent; + fStream << '\n'; + while (n--) fStream << ' '; + fSize = fIndent; +} + +void streambeautifuller::pbreak () +{ + if (fSize > fMaxSize) newline(); +} + +void streambeautifuller::print (const string& s) +{ + size_t n = s.size(); + for (int i=0; i +#include +#include + +#include "arexport.h" + +/*! +\brief An output stream decorateur +*/ +class gar_export streambeautifuller { + std::ostream& fStream; + int fSize; + int fMaxSize; + int fIndent; + int fIndentSize; + + void newline (); + void print (const std::string& s); + + public: + streambeautifuller (std::ostream& stream, int max, int indentSize=4); + virtual ~streambeautifuller () {} + + template + streambeautifuller& operator << (T p) { + std::stringstream s; + s << p; + print(s.str()); + return *this; + } + streambeautifuller& operator << (char p); + streambeautifuller& operator++ (int) { fIndent += fIndentSize; return *this; } + streambeautifuller& operator-- (int) { fIndent -= fIndentSize; if (fIndent < 0) fIndent = 0; return *this; } + streambeautifuller& operator++ () { fIndent += fIndentSize; return *this; } + streambeautifuller& operator-- () { fIndent -= fIndentSize; if (fIndent < 0) fIndent = 0; return *this; } + + void pbreak (); +}; + + +#endif diff --git a/guidoar-dev/src/lib/tree_browser.h b/guidoar-dev/src/lib/tree_browser.h new file mode 100644 index 000000000..39b806181 --- /dev/null +++ b/guidoar-dev/src/lib/tree_browser.h @@ -0,0 +1,65 @@ +/* + + GUIDOEngine Library + Copyright (C) 2007 Grame + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + + Grame Research Laboratory, 9 rue du Garet, 69001 Lyon - France + research@grame.fr + +*/ + +#ifndef __tree_browser__ +#define __tree_browser__ + +#include "basevisitor.h" +#include "browser.h" +#include "ctree.h" + +namespace guido +{ + +//______________________________________________________________________________ +template class tree_browser : public browser +{ + protected: + basevisitor* fVisitor; + bool fDone; + + virtual void enter (T& t) { t.acceptIn(*fVisitor); } + virtual void leave (T& t) { t.acceptOut(*fVisitor); } + + public: + typedef typename ctree::treePtr treePtr; + + tree_browser(basevisitor* v=0) : fVisitor(v), fDone(false) {} + virtual ~tree_browser() {} + + virtual void stop (bool state=true) { fDone = state; } + virtual bool done () const { return fDone; } + virtual void set (basevisitor* v) { fVisitor = v; } + virtual void browse (T& t) { + enter(t); + typename ctree::literator iter; + for (iter = t.lbegin(); (iter != t.lend()) && !done(); iter++) + browse(**iter); + leave(t); + } +}; + +} + +#endif diff --git a/guidoar-dev/src/midi/midiconverter.cpp b/guidoar-dev/src/midi/midiconverter.cpp new file mode 100644 index 000000000..35e4cc973 --- /dev/null +++ b/guidoar-dev/src/midi/midiconverter.cpp @@ -0,0 +1,176 @@ +/* + Copyright � Grame 2003,2007 + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + + Grame Research Laboratory, 9, rue du Garet 69001 Lyon - France + research@grame.fr + +*/ + +#ifdef MIDIEXPORT + +#include "midifile.h" +#include "midiconverter.h" +#include "tree_browser.h" + +using namespace std; +namespace guido { + +//________________________________________________________________________ +// durations adjustment constants definition +//________________________________________________________________________ +#define kStaccatoCoef 0.5f +#define kSlurCoef 1.01f +#define kNormalCoef 0.90f + +//________________________________________________________________________ +// midiconverter +//________________________________________________________________________ +midiconverter::~midiconverter() +{ + if (fSeq) midi()->FreeSeq (fSeq); +} + +//________________________________________________________________________ +bool midiconverter::score2midifile (Sguidoelement& score, const char* fileName) +{ + bool ret = false; + if (getMidi(score)) { + if (fMidifile.Create(fileName, midifile1, TicksPerQuarterNote, fTPQ)) + ret = fMidifile.WriteTrack (fSeq); + midi()->FreeSeq (fSeq); + fSeq = 0; + } + return ret; +} + +//________________________________________________________________________ +bool midiconverter::getMidi (Sguidoelement& score) +{ + if (!score) return false; + + if (fSeq) midi()->ClearSeq (fSeq); + else fSeq = midi()->NewSeq(); + if (fSeq) { + fTimeSignDone = false; + fVoiceNumber = 0; + midicontextvisitor midivisitor (fTPQ, this); + midivisitor.visit (score); + return true; + } + return false; +} + +//________________________________________________________________________ +void midiconverter::setCommon (MidiEvPtr ev, long date) const +{ + Date(ev) = date; + RefNum(ev) = fVoiceNumber; + Chan(ev) = fVoiceNumber - 1; +} + +//________________________________________________________________________ +// midiwriter interface support +//________________________________________________________________________ +void midiconverter::startVoice () +{ + fVoiceNumber++; +} + +void midiconverter::endVoice (long date) +{ + MidiEvPtr ev = midi()->NewEv(typeEndTrack); + if (ev) { + setCommon(ev, date); + midi()->AddSeq (fSeq, ev); + } +} + +void midiconverter::newNote (long date, int pitch, int vel, int duration, int art) +{ + MidiEvPtr ev = midi()->NewEv(typeNote); + if (ev) { + setCommon(ev, date); + Pitch(ev) = pitch; + Vel(ev) = vel; + if (art == midiwriter::kStaccato) + duration *= kStaccatoCoef; + else if (art == midiwriter::kSlur) + duration *= kSlurCoef; + else + duration *= kNormalCoef; + Dur(ev) = duration; + midi()->AddSeq (fSeq, ev); + } +} + +void midiconverter::tempoChange (long date, int bpm) +{ + MidiEvPtr ev = midi()->NewEv(typeTempo); + if (ev) { + setCommon(ev, date); + Tempo(ev) = 60000000 / bpm; + midi()->AddSeq (fSeq, ev); + } +} + +void midiconverter::progChange (long date, int prog) +{ + MidiEvPtr ev = midi()->NewEv(typeProgChange); + if (ev) { + setCommon(ev, date); + Data(ev)[0] = prog; + midi()->AddSeq (fSeq, ev); + } +} + +void midiconverter::timeSignChange (long date, unsigned int num, unsigned int denom) +{ + if (fTimeSignDone) return; + + MidiEvPtr ev = midi()->NewEv(typeTimeSign); + if (ev) { + setCommon(ev, date); + TSNum(ev) = num; + TSDenom(ev) = denom; + + int clocksDiv = 1; + while (denom > 1) { + denom--; + clocksDiv *= 2; + } + TSClocks(ev)= 96 / clocksDiv; + TS32nd(ev) = 8; // number of 32th note in a quarter note + midi()->AddSeq (fSeq, ev); + fTimeSignDone = true; + } +} + +void midiconverter::keySignChange (long date, int signature, bool major) +{ + MidiEvPtr ev = midi()->NewEv(typeKeySign); + if (ev) { + setCommon(ev, date); + KSTon(ev) = signature; + KSMode(ev) = major ? 0 : 1; + midi()->AddSeq (fSeq, ev); + } +} + +} // end namespace + +#endif + diff --git a/guidoar-dev/src/midi/midiconverter.h b/guidoar-dev/src/midi/midiconverter.h new file mode 100644 index 000000000..9b5cbecfc --- /dev/null +++ b/guidoar-dev/src/midi/midiconverter.h @@ -0,0 +1,81 @@ +/* + + guidoar Library + Copyright (C) 2006,2007 Grame + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + + Grame Research Laboratory, 9 rue du Garet, 69001 Lyon - France + research@grame.fr + +*/ +#ifdef MIDIEXPORT + +#ifndef __midiConverter__ +#define __midiConverter__ + +#include "export.h" +#include "guidoelement.h" +#include "midicontextvisitor.h" + +#include "MidiShareLight.h" +#include "midifile.h" + +struct TMidiSeq; + +namespace guido +{ +/*! +\brief a midi converter + + It is based on MidiShare and on the Player libraries. + It supports MIDIfile export as well as MidiShare player interface. +*/ +class gar_export midiconverter : public midiwriter{ + public: + midiconverter(long tpq=480) : fTPQ(tpq), fSeq(0), fTimeSignDone(false), fVoiceNumber(0) {} + virtual ~midiconverter(); + + // main services are provided under the form of a midifile export + virtual bool score2midifile (Sguidoelement& score, const char* fileName); + + protected: + MidiLight* midi() { return fMidifile.midi(); } + + // midiwriter interface support + virtual void startVoice (); + virtual void endVoice (long date); + + virtual void newNote (long date, int pitch, int vel, int duration, int art); + virtual void tempoChange (long date, int bpm); + virtual void progChange (long date, int prog); + virtual void timeSignChange (long date, unsigned int num, unsigned int denom); + virtual void keySignChange (long date, int signature, bool major); + + virtual bool getMidi (Sguidoelement& score); + virtual void setCommon (MidiEvPtr ev, long date) const; + + long fTPQ; + MidiSeqPtr fSeq; + bool fTimeSignDone; + short fVoiceNumber; + MIDIFile fMidifile; +}; + +} + +#endif // __midiConverter__ +#endif // MIDIEXPORT + diff --git a/guidoar-dev/src/midisharelight/MidiShareLight.h b/guidoar-dev/src/midisharelight/MidiShareLight.h new file mode 100644 index 000000000..afd9d9aa0 --- /dev/null +++ b/guidoar-dev/src/midisharelight/MidiShareLight.h @@ -0,0 +1,359 @@ +#ifndef __MidiShareLight__ +#define __MidiShareLight__ + +/***************************************************************************** + * MIDI SHARE LIGHT + *---------------------------------------------------------------------------- + * This is a light version of MidiShare. It provides high level events and + * memory management only. + * Note that the memory manager is lock-free, like the standard MidiSahre memory manager. + * Note also that the interface is a C++ interface. + *---------------------------------------------------------------------------- + * c GRAME 1989, 1990, 1991, 1992, 1999, 2010 + * [Yann Orlarey, Herve Lequay, Dominique fober, Stephane Letz] +******************************************************************************/ + +/******************************************************************************* + * MIDISHARE EVENTS + *------------------------------------------------------------------------------ + * The listing below presents the different types of MidiShare handled events. + * This typology contains the whole of the standard Midi messages, plus specific + * messages such as typeNote corresponding to a note with its duration; + * or typeStream corresponding to a series of arbitrary bytes, possibly including + * data and status codes, sent directly without any processing; or typePrivate + * that are application private messages. + * + * All these codes may be used in the MidiNewEv function to allocate an event + * of the desirable type and are accessible in an event evType field. + *******************************************************************************/ + + +#ifdef WIN32 +# include +# ifdef MSEXPORT +# define MIDISHAREAPI __declspec(dllexport) +# else +# define MIDISHAREAPI __declspec(dllimport) +# endif +#else +# define MIDISHAREAPI +#endif + +typedef unsigned char Byte; +typedef char * Ptr; +typedef unsigned long ulong; +typedef unsigned char uchar; + +/******************************************************************************* + * MIDISHARE EVENTS + *------------------------------------------------------------------------------ + * The listing below presents the different types of MidiShare handled events. + * This typology contains the whole of the standard Midi messages, plus specific + * messages such as typeNote corresponding to a note with its duration; + * or typeStream corresponding to a series of arbitrary bytes, possibly including + * data and status codes, sent directly without any processing; or typePrivate + * that are application private messages. + * + * All these codes may be used in the MidiNewEv function to allocate an event + * of the desirable type and are accessible in an event evType field. + *******************************************************************************/ + +#define typeNote 0 /* note with pitch, velocity and duration */ + +#define typeKeyOn 1 /* Note On with pitch, velocity */ +#define typeKeyOff 2 /* Note Off with pitch, velocity */ +#define typeKeyPress 3 /* Poly Key Pressure with pitch and pressure */ +#define typeCtrlChange 4 /* Control Change with controller ID and value */ +#define typeProgChange 5 /* Program Change with program ID number */ +#define typeChanPress 6 /* Channel Pressure with pressure value */ +#define typePitchWheel 7 /* Pitch Bend Change with LSB and MSB values */ + +#define typeSongPos 8 /* Song Position Pointer with LSB and MSB values */ +#define typeSongSel 9 /* Song Select with song ID number */ +#define typeClock 10 /* Timing Clock */ +#define typeStart 11 /* Start */ +#define typeContinue 12 /* Continue */ +#define typeStop 13 /* Stop */ + +#define typeTune 14 /* Tune Request */ +#define typeActiveSens 15 /* Active Sensing */ +#define typeReset 16 /* System Reset */ + +#define typeSysEx 17 /* System Exclusive (only data bytes) */ +#define typeStream 18 /* arbitrary midi bytes (data and status codes) */ +#define typePrivate 19 /* 19..127 Private events for applications internal use */ + +#define typeProcess 128 /* used by MidiShare for MidiCall and MidiTask */ +#define typeDProcess 129 /* used by MidiShare for MidiDTask */ +#define typeQuarterFrame 130 /* Midi time code quarter frame */ + +#define typeCtrl14b 131 +#define typeNonRegParam 132 +#define typeRegParam 133 + +#define typeSeqNum 134 /* sequence number */ +#define typeTextual 135 /* text event */ +#define typeCopyright 136 /* message copyright message */ +#define typeSeqName 137 /* sequence or track name */ +#define typeInstrName 138 /* instrument name */ +#define typeLyric 139 /* lyrics */ +#define typeMarker 140 /* marker */ +#define typeCuePoint 141 /* cue point */ +#define typeChanPrefix 142 /* Midi Channel Prefix */ +#define typeEndTrack 143 /* end of a track */ +#define typeTempo 144 /* changement de tempo */ +#define typeSMPTEOffset 145 /* smpte offset */ + +#define typeTimeSign 146 /* time signature */ +#define typeKeySign 147 /* signature tonale */ +#define typeSpecific 148 /* sequencer specific meta event */ + +#define typePortPrefix 149 /* Midi Port Prefix */ +#define typeRcvAlarm 150 /* RcvAlam */ +#define typeApplAlarm 151 /* ApplAlam */ + + +#define typeReserved 152 /*152..254 reserved for future extensions */ + +#define typeDead 255 /* dead Task or DTask */ + + + +/****************************************************************************** +* MIDI STATUS CODE +*******************************************************************************/ + +#define NoteOff 0x80 +#define NoteOn 0x90 +#define PolyTouch 0xa0 +#define ControlChg 0xb0 +#define ProgramChg 0xc0 +#define AfterTouch 0xd0 +#define PitchBend 0xe0 +#define SysRealTime 0xf0 +#define SysEx 0xf0 +#define QFrame 0xf1 +#define SongPos 0xf2 +#define SongSel 0xf3 +#define UnDef2 0xf4 +#define UnDef3 0xf5 +#define Tune 0xf6 +#define EndSysX 0xf7 +#define MClock 0xf8 +#define UnDef4 0xf9 +#define MStart 0xfa +#define MCont 0xfb +#define MStop 0xfc +#define UnDef5 0xfd +#define ActSense 0xfe +#define MReset 0xff + + + +/****************************************************************************** +* ERROR CODES +*------------------------------------------------------------------------------ +* List of the error codes returned by some MidiShare functions. +*******************************************************************************/ + +#define MIDIerrSpace -1 /* no space left in the freeList */ +#define MIDIerrRefNum -2 /* bad reference number */ +#define MIDIerrBadType -3 /* bad event type */ +#define MIDIerrIndex -4 /* bad access index (events) */ +#define MIDIerrEv -5 /* event argument is nil */ +#define MIDIerrUndef -6 /* event argument is undef */ + + +/****************************************************************************** +* EVENTS STRUCTURES +*------------------------------------------------------------------------------ +* All events are built using one or several fixed size cells (16 bytes) +* Most events use one cell. Some other like SysEx events use several linked cells. +*******************************************************************************/ +#define CELLSIZE 4*sizeof(void*) + +/*------------------------ System Exclusive extension cell ----------------------*/ + + typedef struct TMidiSEX *MidiSEXPtr; + typedef struct TMidiSEX + { + MidiSEXPtr link; /* link to next cell */ + Byte data[CELLSIZE - sizeof(MidiSEXPtr)]; /* data bytes */ + } TMidiSEX; + +/*------------------------------ Private extension cell -------------------------*/ + + typedef struct TMidiST *MidiSTPtr; + typedef struct TMidiST + { + void* val[4]; + } TMidiST; + +/*------------------------- Common Event Structure ----------------------*/ +#define HEADERSIZE (sizeof(void*) + sizeof(unsigned long) + sizeof(void*)) +#define DATASIZE (CELLSIZE - HEADERSIZE) + typedef struct TMidiEv *MidiEvPtr; + typedef struct TMidiEv + { + MidiEvPtr link; /* link to next event */ + unsigned long date; /* event date (in ms) */ + Byte evType; /* event type */ + Byte refNum; /* sender reference number */ + Byte port; /* Midi port */ + Byte chan; /* Midi channel */ + +#ifdef __x86_64__ + /* padding for 64 bits and to ensure natural alignment */ + Byte data[12 - sizeof(long)]; +#endif + + union { /* info depending of event type : */ + struct { /* for notes */ + Byte pitch; /* pitch */ + Byte vel; /* velocity */ + int dur; /* duration */ + } note; + + struct { /* for MidiFile time signature */ + Byte numerator; /* numerator */ + Byte denominator; /* denominator as neg power */ + /* of 2. (2= quarter note) */ + Byte nClocks; /* number of Midi clocks in */ + /* a metronome click */ + Byte n32nd; /* number of 32nd notes in */ + /* a Midi quarter note */ + } timeSign; + + struct { /* for MidiFile key signature */ + char ton; /* 0: key of C, 1: 1 sharp */ + /* -1: 1 flat etc... */ + Byte mode; /* 0: major 1: minor */ + } keySign; + + struct { /* for paramchg & 14-bits ctrl */ + short num; /* param or ctrl num */ + short val; /* 14-bits value */ + } param; + + struct { /* for MidiFile sequence number */ + int number; + } seqNum; + + short shortFields[DATASIZE / sizeof(short)]; /* for 14-bits controlers */ + int longField[DATASIZE / sizeof(int)]; + + long tempo; /* MidiFile tempo in */ + /* microsec/Midi quarter note */ + Byte data[DATASIZE]; /* for other small events */ + MidiSEXPtr linkSE; /* link to last sysex extension */ + MidiSTPtr linkST; /* link to private extension */ + } info; + } TMidiEv; + +/*------------------------------ sequence header ---------------------------*/ + + typedef struct TMidiSeq *MidiSeqPtr; + typedef struct TMidiSeq + { + MidiEvPtr first; /* first event pointer */ + MidiEvPtr last; /* last event pointer */ + Ptr undef1; + Ptr undef2; + } TMidiSeq; + + +/*-------------------------------- input Filter -------------------------------*/ + + typedef struct TFilter *MidiFilterPtr; + typedef struct TFilter + { + char port[32]; /* 256 bits */ + char evType[32]; /* 256 bits */ + char channel[2]; /* 16 bits */ + char unused[2]; /* 16 bits */ + } TFilter; + + +/****************************************************************************** +* FIELD MACROS +*------------------------------------------------------------------------------ +* Somes macros to read and write event's fields +*******************************************************************************/ + +#define Link(e) ( (e)->link ) +#define Date(e) ( (e)->date ) +#define EvType(e) ( (e)->evType ) +#define RefNum(e) ( (e)->refNum ) +#define Port(e) ( (e)->port ) +#define Canal(e) ( (e)->chan ) +#define Chan(e) ( (e)->chan ) +#define Pitch(e) ( (e)->info.note.pitch ) +#define Vel(e) ( (e)->info.note.vel ) +#define Dur(e) ( (e)->info.note.dur ) +#define Data(e) ( (e)->info.data ) +#define LinkSE(e) ( (e)->info.linkSE ) +#define LinkST(e) ( (e)->info.linkST ) + +#define TSNum(e) ( (e)->info.timeSign.numerator ) +#define TSDenom(e) ( (e)->info.timeSign.denominator ) +#define TSClocks(e) ( (e)->info.timeSign.nClocks ) +#define TS32nd(e) ( (e)->info.timeSign.n32nd ) + +#define KSTon(e) ( (e)->info.keySign.ton ) +#define KSMode(e) ( (e)->info.keySign.mode ) + +#define Tempo(e) ( (e)->info.tempo ) +#define SeqNum(e) ( (e)->info.seqNum.number ) +#define ChanPrefix(e) ( (e)->info.data[0] ) +#define PortPrefix(e) ( (e)->info.data[0] ) + +#define First(e) ( (e)->first ) +#define Last(e) ( (e)->last ) +#define FirstEv(e) ( (e)->first ) +#define LastEv(e) ( (e)->last ) + + +typedef void (* ApplyProcPtr) ( MidiEvPtr e ); + +/******************************************************************************* +* MidiShare Light API +*******************************************************************************/ +class MSMemory; +class MidiLight { + MSMemory* fMemory; + void checkSpace (); + + public: + MidiLight(unsigned long memsize=5000); + virtual ~MidiLight(); + + float GetVersion (void); + + /*-------------------------- Events and memory managing -----------------------*/ + unsigned long FreeSpace (void); + + MidiEvPtr NewCell (void); + void FreeCell (MidiEvPtr e); + unsigned long TotalSpace (void); + unsigned long GrowSpace (long n); + + MidiEvPtr NewEv (short typeNum); + MidiEvPtr CopyEv (MidiEvPtr e); + void FreeEv (MidiEvPtr e); + + void SetField (MidiEvPtr e, long f, long v); + long GetField (MidiEvPtr e, long f); + void AddField (MidiEvPtr e, long v); + long CountFields (MidiEvPtr e); + + + /*------------------------------- Sequence managing ---------------------------*/ + MidiSeqPtr NewSeq (void); + void AddSeq (MidiSeqPtr s, MidiEvPtr e); + void FreeSeq (MidiSeqPtr s); + void ClearSeq (MidiSeqPtr s); + void ApplySeq (MidiSeqPtr s, ApplyProcPtr proc); + +}; + +#endif diff --git a/guidoar-dev/src/midisharelight/macos/libmidisharelight.a b/guidoar-dev/src/midisharelight/macos/libmidisharelight.a new file mode 100644 index 000000000..8af07f67f Binary files /dev/null and b/guidoar-dev/src/midisharelight/macos/libmidisharelight.a differ diff --git a/guidoar-dev/src/midisharelight/midifile.h b/guidoar-dev/src/midisharelight/midifile.h new file mode 100644 index 000000000..9a9da1dfb --- /dev/null +++ b/guidoar-dev/src/midisharelight/midifile.h @@ -0,0 +1,253 @@ +/* + + Copyright � Grame 2004 + + This library is free software; you can redistribute it and modify it under + the terms of the GNU Library General Public License as published by the + Free Software Foundation version 2 of the License, or any later version. + + This library is distributed in the hope that it will be useful, but + WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY + or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Library General Public License + for more details. + + You should have received a copy of the GNU Library General Public License + along with this library; if not, write to the Free Software + Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + + Grame Research Laboratory, 9, rue du Garet 69001 Lyon - France + research@grame.fr + +*/ + + +#ifndef __MIDIFILE_H__ +#define __MIDIFILE_H__ + +#include +#include "MidiShareLight.h" + +#define nil 0 + +#if defined(linux) || defined(__MACH__) +# define MFAPI +//# define errno /* a revoir */ + +#elif defined(WIN32) +# ifdef __BuildDLL__ +# ifdef __BuildLib__ +# define MFAPI __declspec(dllexport) +# else +# define MFAPI __declspec(dllimport) +# endif +# else +# define MFAPI +#endif + +#else +#error "architecture undefined" +#endif + +#ifdef __x86_64__ + typedef int int32; + typedef short int16; +#else + typedef long int32; + typedef short int16; +#endif + +/*--------------------------------------------------------------------------*/ +extern int MidiFile_errno; /* used similarly to errno */ + /* to read just in error case, if the */ + /* code is equal to MidiFileNoErr, look */ + /* at errno */ + +/*--------------------------------------------------------------------------*/ +/* implemented file types */ + +enum { midifile0= 0, midifile1, midifile2}; + + +/*--------------------------------------------------------------------------*/ +/* opening modes for existing files */ +#define MidiFileRead 0 /* reading the file */ +#define MidiFileAppend 1 /* appening to the file */ + + +/*--------------------------------------------------------------------------*/ +/* time definition */ + +#define TicksPerQuarterNote 0 +#define Smpte24 24 +#define Smpte25 25 +#define Smpte29 29 +#define Smpte30 30 + + +/*--------------------------------------------------------------------------*/ +/* meta events types */ +#define META 0xFF /* meta event header code */ + +#define MDF_NumSeq 0 /* sequence number */ +#define MDF_Texte 1 /* texte message */ +#define MDF_Copyright 2 /* copyright message */ +#define MDF_SeqName 3 /* sequence or track name */ +#define MDF_InstrName 4 /* instrument name */ +#define MDF_Lyric 5 /* lyrics */ +#define MDF_Mark 6 /* marker */ +#define MDF_CuePt 7 /* cue point */ +#define MDF_ChanPref 0x20 /* MIDI Channel Prefix */ +#define MDF_PortPref 0x21 /* MIDI Port Prefix */ +#define MDF_EndTrk 0x2F /* end track */ +#define MDF_Tempo 0x51 /* tempo change */ +#define MDF_Offset 0x54 /* smpte offset */ +#define MDF_Meas 0x58 /* time signature */ +#define MDF_Ton 0x59 /* key signature */ +#define MDF_Extra 0x7F /* sequencer specific meta event */ + +/* length of the differents meta events */ +#define MDF_NumSeqLen 2 +#define MDF_ChanPrefLen 1 +#define MDF_PortPrefLen 1 +#define MDF_EndTrkLen 0 +#define MDF_TempoLen 3 +#define MDF_OffsetLen 5 +#define MDF_MeasLen 4 +#define MDF_TonLen 2 + +/*--------------------------------------------------------------------------*/ +/* datas structures */ +/*--------------------------------------------------------------------------*/ + +typedef struct MDF_Header{ /* the file header structure */ + char id[4]; /* header id */ + int32 len; /* datas length ( = 6 ) */ + int16 format; /* file format */ + int16 ntrks; /* number of tracks */ + int16 time; /* time representation */ +}MDF_Header; + + +typedef struct MDF_Trk{ /* track header structure */ + char id[4]; /* header id */ + int32 len; /* datas length */ +}MDF_Trk; + +typedef struct midiFILE{ /* MIDI file descriptor */ + MidiLight* fMidi; + short format; /* file format */ + unsigned short ntrks; /* number of tracks */ + short time; /* time representation */ + /* for MIDI time: tick count per quarter note */ + /* for smpte time: b. 15 = 1 */ + /* b.8-14 = frame count per sec */ + /* b.0-7 = tick count per frame */ + FILE *fd; /* standard file descriptor */ + long trkHeadOffset; /* track header offset */ + /* nil if the track is closed */ + long _cnt; /* count for end track detection */ + MidiSeqPtr keyOff; /* keyOff coming from typeNote events */ + long curDate; /* current date */ + bool mode; /* 0/1 : reading/writing */ + bool opened; /* flag for opened track */ +} midiFILE; + +typedef midiFILE * MIDIFilePtr; + +typedef struct MDF_versions{ + short src; /* source code version */ + short MidiFile; /* MIDI file format version */ +}MDF_versions; + + +/*--------------------------------------------------------------------------*/ +/* error codes */ + +#define MidiFileNoErr 0 /* everything is ok */ +#define MidiFileErrFrmt (-1) /* internal datas format error */ +#define MidiFileErrEvs (-2) /* MidiShare memory exhausted */ +#define MidiFileErrNoTrack (-3) /* the track doesn't exists */ +#define MidiFileErrAdd0 (-4) /* try to add to a format 0 MIDI file */ +#define MidiFileErrMode (-5) /* uncorrect file opening mode */ +#define MidiFileErrUnknow (-6) /* unknown event type */ +#define MidiFileErrReset (-7) /* try to write a reset event */ + +#define MidiFileErrTrackClose (-8) /* the track is closed */ + +/*--------------------------------------------------------------------------*/ +/* some macros */ + +#ifdef __cplusplus +inline short smpte(MDF_Header *f) { return ((f)->time & 0x8000); } +inline short frame_par_sec(MDF_Header *f) { return (((f)->time & 0x8000) >> 8); } +inline short ticks_par_frame(MDF_Header *f) { return ((f)->time & 0xFF); } +inline short ticks_par_quarterNote(MDF_Header *f) { return (f)->time; } +#endif + +#define MDF_Header_SIZE 14 +#define MDF_Trk_SIZE 8 + + +/*--------------------------------------------------------------------------*/ +/* functions declarations */ + +#ifdef __cplusplus +extern "C" { +#endif + +#ifdef WIN32 + +MFAPI const MDF_versions * MidiFileGetVersion(void); +#else + +const MDF_versions * MFAPI MidiFileGetVersion(void); + +#endif + +class MIDIFile { + midiFILE fMidiFile; + + bool Init(); + bool ErrOpen(); + bool isTrackOpen() const { return fMidiFile.opened; } + bool isMidiFileError() const { return MidiFile_errno!=MidiFileNoErr || ferror(fMidiFile.fd) || feof(fMidiFile.fd); } + bool WriteEv( MIDIFilePtr fd, MidiEvPtr ev); + bool FlushKeyOff( MIDIFilePtr fd); + MidiEvPtr ReadEv (MIDIFilePtr fd); + + public: + MIDIFile(); + virtual ~MIDIFile(); + + bool Open (const char *filename, short mode); + bool Create(const char *filename, short format, short timeDef, short ticks); + bool Close (); + + /*-------------------------------- tracks management -----------------------*/ + bool OpenTrack (); + bool NewTrack (); + bool CloseTrack (); + bool ChooseTrack(short trackIndex); + + /*-------------------------------- functions to read -----------------------*/ + MidiEvPtr ReadEv (); + MidiSeqPtr ReadTrack (); + + /*-------------------------------- functions to write ----------------------*/ + bool WriteEv (MidiEvPtr ev); + bool WriteTrack(MidiSeqPtr seq); + + /*-------------------------------- error codes access ----------------------*/ + int GetMFErrno (void); + int GetErrno (void); + + const midiFILE& infos() const { return fMidiFile; } + MidiLight* midi() { return fMidiFile.fMidi; } +}; + + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/guidoar-dev/src/operations/bottomOperation.cpp b/guidoar-dev/src/operations/bottomOperation.cpp new file mode 100644 index 000000000..fcb8d37ce --- /dev/null +++ b/guidoar-dev/src/operations/bottomOperation.cpp @@ -0,0 +1,85 @@ +/* + + Copyright (C) 2007 Grame + + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + + Grame Research Laboratory, 9, rue du Garet 69001 Lyon - France + research@grame.fr + +*/ + +#ifdef WIN32 +# pragma warning (disable : 4786) +#endif + +#include + +#include "ARFactory.h" +#include "AROthers.h" +#include "ARTag.h" +#include "bottomOperation.h" + +using namespace std; + +namespace guido +{ + +//_______________________________________________________________________________ +Sguidoelement bottomOperation::operator() ( const Sguidoelement& score, int voicenum ) +{ + fVoiceNum = voicenum; + fCurrentVoice = 0; + Sguidoelement outscore; + if (score) { + fBrowser.stop(false); + fBrowser.browse (*score); + outscore = fStack.top(); + fStack.pop(); + } + return outscore; +} + +//_______________________________________________________________________________ +SARMusic bottomOperation::operator() ( const SARMusic& score1, const SARMusic& score2 ) +{ + Sguidoelement elt = (*this)(score1, score2->size()); + return dynamic_cast((guidoelement*)elt); +} + +//________________________________________________________________________ +bool bottomOperation::copy () { return fCurrentVoice > fVoiceNum; } + +//________________________________________________________________________ +// The visit methods +//________________________________________________________________________ +void bottomOperation::visitStart ( SARVoice& elt ) +{ + fCurrentVoice++; + if (copy()) + clonevisitor::visitStart (elt); + else fBrowser.stop(); +} + +//________________________________________________________________________ +void bottomOperation::visitEnd ( SARVoice& elt ) +{ + fBrowser.stop(false); + if (copy()) + clonevisitor::visitEnd (elt); +} + +} diff --git a/guidoar-dev/src/operations/bottomOperation.h b/guidoar-dev/src/operations/bottomOperation.h new file mode 100644 index 000000000..aa42f765d --- /dev/null +++ b/guidoar-dev/src/operations/bottomOperation.h @@ -0,0 +1,80 @@ +/* + Copyright � Grame 2008 + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + + Grame Research Laboratory, 9, rue du Garet 69001 Lyon - France + research@grame.fr + +*/ + +#ifndef __bottomOperation__ +#define __bottomOperation__ + +#include "arexport.h" +#include "AROthers.h" +#include "clonevisitor.h" +#include "operation.h" +#include "tree_browser.h" + + +namespace guido +{ + +/*! +\addtogroup operations +@{ +*/ + +/*! +\brief A visitor that cuts the head of a score voices. +*/ +class gar_export bottomOperation : + public operation, + public clonevisitor +{ + public: + bottomOperation() { fBrowser.set(this); } + virtual ~bottomOperation() {} + + /*! cuts the head of the score voices before a given voice + \param score the score to be cut + \param voicenum the score voices to drop + \return a new score + */ + Sguidoelement operator() ( const Sguidoelement& score, int voicenum ); + + /*! cuts the head of the score voices before a given voice + \param score1 the score to be cut + \param score2 a score which voice number is used as voice index + \return a new score + */ + SARMusic operator() ( const SARMusic& score1, const SARMusic& score2 ); + + protected: + int fVoiceNum, fCurrentVoice; + tree_browser fBrowser; + + virtual bool copy (); + virtual void visitStart ( SARVoice& elt ); + virtual void visitEnd ( SARVoice& elt ); +}; + +/*! @} */ + +} // namespace MusicXML + + +#endif diff --git a/guidoar-dev/src/operations/durationOperation.cpp b/guidoar-dev/src/operations/durationOperation.cpp new file mode 100644 index 000000000..1494610a2 --- /dev/null +++ b/guidoar-dev/src/operations/durationOperation.cpp @@ -0,0 +1,221 @@ +/* + + Copyright (C) 2007 Grame + + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + + Grame Research Laboratory, 9, rue du Garet 69001 Lyon - France + research@grame.fr + +*/ + +#ifdef WIN32 +# pragma warning (disable : 4786) +#endif + +#include + +#include "ARFactory.h" +#include "AROthers.h" +#include "ARTag.h" +#include "ARNote.h" +#include "durationvisitor.h" +#include "durationOperation.h" +#include "tree_browser.h" + +using namespace std; + +namespace guido +{ + +//_______________________________________________________________________________ +durationOperation::durationOperation() : fFactor(1) +{ + for (int i=0; i((guidoelement*)elt); +} + +//_______________________________________________________________________________ +Sguidoelement durationOperation::stretch ( const Sguidoelement& score, const rational& stretchFactor ) +{ + if (!score) return 0; + fFactor = stretchFactor; + Sguidoelement outscore; + if (score) { + fCurrentDurationIn = fCurrentDurationOut = rational(1,4); + tree_browser browser(this); + browser.browse (*score); + outscore = fStack.top(); + fStack.pop(); + } + return outscore; +} + +//________________________________________________________________________ +rational durationOperation::float2rational ( float val ) const +{ + int denum = 1000000; // to keep 6 significant numbers + int num = int(val * denum); + rational r(num, denum); + r.rationalise(); + return r; +} + +//________________________________________________________________________ +// a bounded multiplication operation: +// constraints the denominator to values <= maxDenom +// computes the closest approximation when necessary +rational durationOperation::boundedMult ( const rational& dur1, const rational& dur2, int maxDenom ) const +{ + rational result = dur1 * dur2; + result.rationalise(); + if (result.getDenominator() > maxDenom) { + float val = float(result); + float err = 9999; // used to store the minimum error + rational approx(0,1); // used to store the corresponding rational + + for (int div=1; div val) ? localVal - val : val - localVal; + if ( localErr > previousErr) done = true; + else { + previousErr = localErr; + if (localErr < err) { + err = localErr; + approx = r; + } + } + } + } + } +//cerr << "boundedMult scan for " << string(result) << " -> " << string(approx) << endl; + result = approx; + } + return result; +} + +//________________________________________________________________________ +rational durationOperation::stretch ( const rational& duration ) +{ + + if (!ARNote::implicitDuration (duration)) + fCurrentDurationIn = duration; + rational stretched = fCurrentDurationIn; + stretched.rationalise(); + stretched = boundedMult(stretched, fFactor); + + if (stretched == fCurrentDurationOut) + stretched.set (ARNote::kUndefinedDuration, 4); + else + fCurrentDurationOut = stretched; + return stretched; +} + +//________________________________________________________________________ +// The visit methods +//________________________________________________________________________ +void durationOperation::visitStart ( SARNote& elt ) +{ + SARNote note = copy(elt); + rational duration = stretch(elt->duration()); + if (note) { + *note = duration; + push( note ); + } +} + +//________________________________________________________________________ +void durationOperation::visitStart ( SARVoice& elt ) +{ + fCurrentDurationIn = fCurrentDurationOut = rational(1,4); + clonevisitor::visitStart(elt); +} + +} diff --git a/guidoar-dev/src/operations/durationOperation.h b/guidoar-dev/src/operations/durationOperation.h new file mode 100644 index 000000000..71a618724 --- /dev/null +++ b/guidoar-dev/src/operations/durationOperation.h @@ -0,0 +1,94 @@ +/* + Copyright � Grame 2008 + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + + Grame Research Laboratory, 9, rue du Garet 69001 Lyon - France + research@grame.fr + +*/ + +#ifndef __durationOperation__ +#define __durationOperation__ + +#include "arexport.h" +#include "clonevisitor.h" +#include "operation.h" +#include "guidorational.h" + +namespace guido +{ + +/*! +\addtogroup operations +@{ +*/ + +/*! +\brief A visitor to stretch a score. +*/ +class gar_export durationOperation : + public operation, + public clonevisitor +{ + public: + durationOperation(); + virtual ~durationOperation() {} + + /*! stretch a score + \param score the score to be stretched + \param fact the stretching factor + \return a new score + */ + Sguidoelement operator() ( const Sguidoelement& score, float factor ); + + /*! stretch a score + \param score the score to be stretched + \param targetDuration the target duration + \return a new score + */ + Sguidoelement operator() ( const Sguidoelement& score, const rational& targetDuration ); + + /*! stretch a score to the duration of another score + \param score1 the score to be stretched + \param score2 a score to specify the target duration + \return a new score + */ + SARMusic operator() ( const SARMusic& score1, const SARMusic& score2 ); + + protected: + enum { kMaxDivider = 200 }; + bool fPrimeNumbers[kMaxDivider]; + + rational fFactor; + rational fCurrentDurationIn; + rational fCurrentDurationOut; + + rational float2rational ( float val ) const; + rational safeDiv ( const rational& dur1, const rational& dur2 ) const; + rational boundedMult ( const rational& dur1, const rational& dur2, int maxDenom=kMaxDivider ) const; + virtual rational stretch ( const rational& duration ); + virtual void visitStart ( SARNote& elt ); + virtual void visitStart ( SARVoice& elt ); + + virtual Sguidoelement stretch ( const Sguidoelement& score, const rational& stretchFactor ); +}; + +/*! @} */ + +} // namespace MusicXML + + +#endif diff --git a/guidoar-dev/src/operations/eheadOperation.cpp b/guidoar-dev/src/operations/eheadOperation.cpp new file mode 100644 index 000000000..9996b3b05 --- /dev/null +++ b/guidoar-dev/src/operations/eheadOperation.cpp @@ -0,0 +1,70 @@ +/* + + Copyright (C) 2007 Grame + + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + + Grame Research Laboratory, 9, rue du Garet 69001 Lyon - France + research@grame.fr + +*/ + +#ifdef WIN32 +# pragma warning (disable : 4786) +#endif + +#include +#include + +#include "ARNote.h" +#include "ARFactory.h" +#include "AROthers.h" +#include "ARTag.h" +#include "clonevisitor.h" +#include "counteventsvisitor.h" +#include "eheadOperation.h" +#include "event2timevisitor.h" +#include "tree_browser.h" + +using namespace std; + +namespace guido +{ + +//_______________________________________________________________________________ +SARMusic eheadOperation::operator() ( const SARMusic& score1, const SARMusic& score2 ) +{ + if (!score2) return 0; + counteventsvisitor cev; + Sguidoelement elt = (*this)(score1, cev.count(score2)); + return dynamic_cast((guidoelement*)elt); +} + +//_______________________________________________________________________________ +Sguidoelement eheadOperation::operator() ( const Sguidoelement& score, unsigned int evIndex, unsigned int voiceIndex ) +{ + Sguidoelement outscore; + if (score) { + event2timevisitor convert; + rational time = convert.event2time(score, evIndex, voiceIndex); + if (time < rational(0,1)) // event index too large + time = fDuration.duration(score); // use the whole score duration + outscore = headOperation::operator()(score, time); + } + return outscore; +} + +} diff --git a/guidoar-dev/src/operations/eheadOperation.h b/guidoar-dev/src/operations/eheadOperation.h new file mode 100644 index 000000000..21dda2f40 --- /dev/null +++ b/guidoar-dev/src/operations/eheadOperation.h @@ -0,0 +1,69 @@ +/* + Copyright � Grame 2008 + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + + Grame Research Laboratory, 9, rue du Garet 69001 Lyon - France + research@grame.fr + +*/ + +#ifndef __eheadOperation__ +#define __eheadOperation__ + +#include +#include + +#include "headOperation.h" + +namespace guido +{ + +/*! +\addtogroup operations +@{ +*/ + +/*! +\brief A visitor that cuts the tail of a score after a given events number. +*/ +class gar_export eheadOperation : public headOperation +{ + public: + eheadOperation() {} + virtual ~eheadOperation() {} + + /*! cuts the tail of a score after a given duration + \param score the score to be cut + \param evIndex the number of events to preserve + \return a new score + */ + Sguidoelement operator() ( const Sguidoelement& score, unsigned int evIndex, unsigned int voiceIndex=0 ); + + /*! cuts the tail of a score after a given duration + \param score1 the score to be cut + \param score2 a score which events count is used as cut point. + \return a new score + */ + virtual SARMusic operator() ( const SARMusic& score1, const SARMusic& score2 ); + +}; + +/*! @} */ + +} // namespace MusicXML + + +#endif diff --git a/guidoar-dev/src/operations/etailOperation.cpp b/guidoar-dev/src/operations/etailOperation.cpp new file mode 100644 index 000000000..46f62a88a --- /dev/null +++ b/guidoar-dev/src/operations/etailOperation.cpp @@ -0,0 +1,70 @@ +/* + + Copyright (C) 2007 Grame + + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + + Grame Research Laboratory, 9, rue du Garet 69001 Lyon - France + research@grame.fr + +*/ + +#ifdef WIN32 +# pragma warning (disable : 4786) +#endif + +#include +#include + +#include "ARNote.h" +#include "ARFactory.h" +#include "AROthers.h" +#include "ARTag.h" +#include "clonevisitor.h" +#include "counteventsvisitor.h" +#include "etailOperation.h" +#include "event2timevisitor.h" +#include "tree_browser.h" + +using namespace std; + +namespace guido +{ + +//_______________________________________________________________________________ +SARMusic etailOperation::operator() ( const SARMusic& score1, const SARMusic& score2 ) +{ + if (!score2) return 0; + counteventsvisitor cev; + Sguidoelement elt = (*this)(score1, cev.count(score2)); + return dynamic_cast((guidoelement*)elt); +} + +//_______________________________________________________________________________ +Sguidoelement etailOperation::operator() ( const Sguidoelement& score, unsigned int evIndex, unsigned int voiceIndex ) +{ + Sguidoelement outscore; + if (score) { + event2timevisitor convert; + rational time = convert.event2time(score, evIndex, voiceIndex); + if (time < rational(0,1)) // event index too large + time = fDuration.duration(score); // use the whole score duration + outscore = tailOperation::operator()(score, time); + } + return outscore; +} + +} diff --git a/guidoar-dev/src/operations/etailOperation.h b/guidoar-dev/src/operations/etailOperation.h new file mode 100644 index 000000000..ca08bb2b4 --- /dev/null +++ b/guidoar-dev/src/operations/etailOperation.h @@ -0,0 +1,69 @@ +/* + Copyright � Grame 2008 + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + + Grame Research Laboratory, 9, rue du Garet 69001 Lyon - France + research@grame.fr + +*/ + +#ifndef __etailOperation__ +#define __etailOperation__ + +#include +#include + +#include "tailOperation.h" + +namespace guido +{ + +/*! +\addtogroup operations +@{ +*/ + +/*! +\brief A visitor that cuts the head of a score before a given event number. +*/ +class gar_export etailOperation : public tailOperation +{ + public: + etailOperation() {} + virtual ~etailOperation() {} + + /*! cuts the head of a score after a given duration + \param score the score to be cut + \param evIndex the number of events to cut + \return a new score + */ + Sguidoelement operator() ( const Sguidoelement& score, unsigned int evIndex, unsigned int voiceIndex=0 ); + + /*! cuts the head of a score after a given duration + \param score1 the score to be cut + \param score2 a score which events count is used as cut point. + \return a new score + */ + virtual SARMusic operator() ( const SARMusic& score1, const SARMusic& score2 ); + +}; + +/*! @} */ + +} // namespace MusicXML + + +#endif diff --git a/guidoar-dev/src/operations/headOperation.cpp b/guidoar-dev/src/operations/headOperation.cpp new file mode 100644 index 000000000..c71f1c78b --- /dev/null +++ b/guidoar-dev/src/operations/headOperation.cpp @@ -0,0 +1,220 @@ +/* + + Copyright (C) 2007 Grame + + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + + Grame Research Laboratory, 9, rue du Garet 69001 Lyon - France + research@grame.fr + +*/ + +#ifdef WIN32 +# pragma warning (disable : 4786) +#endif + +#include +#include + +#include "ARNote.h" +#include "ARFactory.h" +#include "ARChord.h" +#include "AROthers.h" +#include "ARTag.h" +#include "clonevisitor.h" +#include "headOperation.h" +#include "markers.h" +#include "tree_browser.h" + +using namespace std; + +namespace guido +{ + +//_______________________________________________________________________________ +SARMusic headOperation::operator() ( const SARMusic& score1, const SARMusic& score2 ) +{ + if (!score2) return 0; + Sguidoelement elt = (*this)(score1, fDuration.duration(score2)); + return dynamic_cast((guidoelement*)elt); +} + +//_______________________________________________________________________________ +Sguidoelement headOperation::operator() ( const Sguidoelement& score, const rational& duration ) +{ + fOpenedTagsMap.clear(); + fCutPoint = duration; + Sguidoelement outscore; + if (score) { + fBrowser.browse (*score); + outscore = fStack.top(); + fStack.pop(); + } + return outscore; +} + +//________________________________________________________________________ +void headOperation::checkOpenedTags() +{ + for (map::iterator i = fOpenedTagsMap.begin(); i != fOpenedTagsMap.end(); i++) { + Sguidotag tag = i->second; + if (tag) { // only Begin tags are stored to this map + string match = tag->matchTag(); + Sguidotag endtag = ARFactory::instance().createTag(match); + if (endtag) { + markers::markOpened (endtag); + Sguidoelement endelt(endtag); + push (endelt, false); + } + } + } + fOpenedTagsMap.clear(); + + for (map::iterator i = fRangeTagsMap.begin(); i != fRangeTagsMap.end(); i++) { + Sguidotag tag = i->second; + if (tag) markers::markOpened (tag, true); + } + fRangeTagsMap.clear(); +} + +//________________________________________________________________________ +Sguidoelement headOperation::makeOpenedTie() const +{ + Sguidotag tag = ARTag::create(); + tag->setName ("tie"); + markers::markOpened (tag, true); + return tag; +} + +//________________________________________________________________________ +// The visit methods +//________________________________________________________________________ +void headOperation::visitStart ( SARVoice& elt ) +{ + fOpenedTagsMap.clear(); + fCurrentOctave = ARNote::kDefaultOctave; + fCopy = (float(fCutPoint) > 0.001) ? true: false; + fPopTie = false; + clonevisitor::visitStart (elt); + fDuration.visitStart (elt); +} + +//________________________________________________________________________ +void headOperation::visitStart ( SARChord& elt ) +{ + rational remain = fCutPoint - fDuration.currentVoiceDate(); + rational dur = elt->totalduration(fDuration.currentNoteDuration(), fDuration.currentDots()); + if (remain.getNumerator() > 0) { + if (remain < dur) { + push(makeOpenedTie(), true); // push an opened tie tag to the current copy + fPopTie = true; // intended to pop the tie at the chord end + } + clonevisitor::visitStart (elt); + } + else { + fCopy = false; + checkOpenedTags(); // and close any opened tag + } + fDuration.visitStart (elt); +} + +//________________________________________________________________________ +void headOperation::visitStart ( SARNote& elt ) +{ + rational remain = fCutPoint - fDuration.currentVoiceDate(); + bool tie = false; + if (remain.getNumerator() > 0) { + if (!elt->implicitOctave()) + fCurrentOctave = elt->GetOctave(); + rational currentDur = fDuration.currentNoteDuration(); + int currentDots = fDuration.currentDots(); + rational dur = elt->totalduration(currentDur, currentDots); + if (dur > remain) { + *elt = remain; + elt->SetDots(0); + // force an explicit octave - makes the merge more easy to do when putting back in sequence + if (elt->implicitOctave()) elt->SetOctave (fCurrentOctave); + tie = !fDuration.inChord(); // tie already inserted before the chord + } + + if (tie && !elt->isEmpty()) { // notes splitted by the operation are marked using an opened tie + push(makeOpenedTie(), true); + clonevisitor::visitStart (elt); + fStack.pop(); + } + else clonevisitor::visitStart (elt); + } + else { + fCopy = false; + checkOpenedTags(); // and close any opened tag + } + fDuration.visitStart (elt); +} + +//________________________________________________________________________ +void headOperation::visitStart ( Sguidotag& elt ) +{ + long remain = (fCutPoint - fDuration.currentVoiceDate()).getNumerator(); + if ((remain > 0) || ((remain==0) && elt->endTag())) { // gives a chance to close Begin tags + clonevisitor::visitStart (elt); + string name = elt->getName(); + if (elt->beginTag()) + fOpenedTagsMap[name] = elt; + else if (elt->endTag()) + fOpenedTagsMap[elt->matchTag()] = (void*)0; + else if (elt->size()) { + fRangeTagsMap[name] = dynamic_cast((guidoelement*)fStack.top()); + } + } + else { + fCopy = false; + checkOpenedTags(); // and close any opened tag + } +} + +//________________________________________________________________________ +void headOperation::visitEnd ( Sguidotag& elt ) +{ + if (fCopy) { + clonevisitor::visitEnd (elt); + if (elt->size()) + fRangeTagsMap[elt->getName()] = (void*)0; + } +} + +//________________________________________________________________________ +void headOperation::visitEnd ( SARChord& elt ) +{ + if (fCopy) { + clonevisitor::visitEnd (elt); + if (fPopTie) { + fStack.pop(); + fPopTie = false; + } + } + fDuration.visitEnd (elt); +} + +//________________________________________________________________________ +void headOperation::visitEnd ( SARVoice& elt ) +{ + clonevisitor::visitEnd (elt); + // adjusts the stack - necessary due to potential end inside range tags + while (fStack.size() > 1) + fStack.pop(); +} + +} diff --git a/guidoar-dev/src/operations/headOperation.h b/guidoar-dev/src/operations/headOperation.h new file mode 100644 index 000000000..a85a4a1a4 --- /dev/null +++ b/guidoar-dev/src/operations/headOperation.h @@ -0,0 +1,98 @@ +/* + Copyright � Grame 2008 + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + + Grame Research Laboratory, 9, rue du Garet 69001 Lyon - France + research@grame.fr + +*/ + +#ifndef __headOperation__ +#define __headOperation__ + +#include +#include + +#include "arexport.h" +#include "guidoelement.h" +#include "clonevisitor.h" +#include "durationvisitor.h" +#include "operation.h" + +namespace guido +{ + +/*! +\addtogroup operations +@{ +*/ + +/*! +\brief A visitor that cuts the tail of a score. +*/ +class gar_export headOperation : + public operation, + public clonevisitor +{ + public: + headOperation() : fBrowser(this) {} + virtual ~headOperation() {} + + /*! cuts the tail of a score after a given duration + \param score the score to be cut + \param duration the score duration to preserve + \return a new score + */ + Sguidoelement operator() ( const Sguidoelement& score, const rational& duration ); + + /*! cuts the tail of a score after a given duration + \param score1 the score to be cut + \param score2 a score which duration is used as cut point + \return a new score + */ + virtual SARMusic operator() ( const SARMusic& score1, const SARMusic& score2 ); + + protected: + rational fCutPoint; + durationvisitor fDuration; + int fCurrentOctave; + bool fCopy; + bool fPopTie; + + virtual void visitStart( SARVoice& elt ); + virtual void visitStart( SARChord& elt ); + virtual void visitStart( SARNote& elt ); + virtual void visitStart( Sguidotag& elt ); + + virtual void visitEnd ( SARVoice& elt ); + virtual void visitEnd ( SARChord& elt ); + virtual void visitEnd ( Sguidotag& elt ); + + Sguidoelement makeOpenedTie() const; + + private: + std::map fRangeTagsMap; + std::map fOpenedTagsMap; + void checkOpenedTags (); + tree_browser fBrowser; +}; + +/*! @} */ + +} // namespace MusicXML + + +#endif diff --git a/guidoar-dev/src/operations/interleaveOperation.cpp b/guidoar-dev/src/operations/interleaveOperation.cpp new file mode 100644 index 000000000..79db61747 --- /dev/null +++ b/guidoar-dev/src/operations/interleaveOperation.cpp @@ -0,0 +1,85 @@ +/* + GUIDO Library + Copyright (C) 2006 Grame + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + + Grame Research Laboratory, 9 rue du Garet, 69001 Lyon - France + research@grame.fr + +*/ + +#ifdef WIN32 +# pragma warning (disable : 4786) +#endif + +#include + +#include "clonevisitor.h" +#include "durationvisitor.h" +#include "interleaveOperation.h" +#include "counteventsvisitor.h" +#include "ARFactory.h" +#include "ARNote.h" +#include "AROthers.h" +#include "tree_browser.h" + + +using namespace std; + +namespace guido +{ + +//_______________________________________________________________________________ +SARVoice interleaveOperation::interleave ( const Sguidoelement& voice1, const Sguidoelement& voice2, int offset ) +{ + SARVoice elt = ARFactory::instance().createVoice(); + if (elt) { + } + return elt; +} + +//_______________________________________________________________________________ +SARMusic interleaveOperation::operator() ( const SARMusic& score1, const SARMusic& score2 ) +{ + SARMusic elt = ARFactory::instance().createMusic(); + if (elt) { + clonevisitor cv; + SARMusic cs1 = dynamic_cast((guidoelement*)cv.clone(score1)); + SARMusic cs2 = dynamic_cast((guidoelement*)cv.clone(score2)); + + ctree::const_literator i1 = cs1->lbegin(); + ctree::const_literator i2 = cs2->lbegin(); + while ((i1 != cs1->lend()) && (i2 != cs2->lend())) { + // interleaves voice by voice with a start offset depending on the requested alignment + int offset = 0; + if (fMode == kRight) { + counteventsvisitor evc; + offset = evc.count (*i1) - evc.count (*i2); + } + cout << "offset is " << offset << endl; + elt->push (interleave (*i1, *i2, offset)); + i1++; i2++; + } + while (i1 != cs1->lend()) + elt->push(*i1++); + while (i2 != cs2->lend()) + elt->push (*i2++); + } + return elt; +} + + +} // namespace diff --git a/guidoar-dev/src/operations/interleaveOperation.h b/guidoar-dev/src/operations/interleaveOperation.h new file mode 100644 index 000000000..d4a41aeea --- /dev/null +++ b/guidoar-dev/src/operations/interleaveOperation.h @@ -0,0 +1,64 @@ +/* + GUIDO Library + Copyright (C) 2006 Grame + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + + Grame Research Laboratory, 9 rue du Garet, 69001 Lyon - France + research@grame.fr + +*/ + +#ifndef __interleaveOperation__ +#define __interleaveOperation__ + +#include "arexport.h" +#include "guidoelement.h" +#include "operation.h" +#include "ARTypes.h" + +namespace guido +{ + +/*! +\addtogroup operations +@{ +*/ + +//______________________________________________________________________________ +/*! +\brief an operation to interleave 2 scores +*/ +class gar_export interleaveOperation : public operation +{ + public: + enum mode { kLeft, kRight }; + + interleaveOperation(mode m=kLeft) : fMode(m) {} + virtual ~interleaveOperation() {} + + + SARMusic operator() ( const SARMusic& score1, const SARMusic& score2 ); + + private: + mode fMode; + SARVoice interleave ( const Sguidoelement& score1, const Sguidoelement& score2, int offset=0 ); +}; + +/*! @} */ + +} // namespace + +#endif diff --git a/guidoar-dev/src/operations/markers.cpp b/guidoar-dev/src/operations/markers.cpp new file mode 100644 index 000000000..37b255336 --- /dev/null +++ b/guidoar-dev/src/operations/markers.cpp @@ -0,0 +1,129 @@ +/* + + Copyright (C) 2012 Grame + + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + + Grame Research Laboratory, 9, rue du Garet 69001 Lyon - France + research@grame.fr + +*/ + +#ifdef WIN32 +# pragma warning (disable : 4786) +#endif + +#include +#include + +#include "markers.h" +#include "guidotags.h" + +using namespace std; + +namespace guido +{ + +static const char* kOpenedStr = "opened"; +static const char* kOpenedBegStr = "begin"; +static const char* kOpenedEndStr = "end"; +static const char* kOpenedBegEndStr = "begin-end"; +static const char* kOpenedClosedStr = "closed"; + +//________________________________________________________________________ +int markers::opened ( Sguidotag& elt ) +{ + Sguidoattribute attr = elt->getAttribute (kOpenedStr); + if (attr) { + const string& value = attr->getValue(); + if (value == kOpenedBegStr) return kOpenedBegin; + if (value == kOpenedEndStr) return kOpenedEnd; + if (value == kOpenedBegEndStr) return kOpenedBegin + kOpenedEnd; + if (value == kOpenedClosedStr) return kClosed; + } + return kNoMark; +} + +//________________________________________________________________________ +void markers::delMark ( Sguidotag& elt ) +{ + elt->delAttribute (kOpenedStr); +} + +//________________________________________________________________________ +void markers::setMark ( Sguidoelement& elt, int type ) +{ + Sguidotag tag = dynamic_cast((guidoelement*)elt); + if (tag) setMark (tag, type); +} + +//________________________________________________________________________ +void markers::setMark ( Sguidotag& elt, int type ) +{ + Sguidoattribute attr = elt->getAttribute (kOpenedStr); + if (attr) { + switch (type) { + case kOpenedBegin: + attr->setValue(kOpenedBegStr, true); + break; + case kOpenedEnd: + attr->setValue(kOpenedEndStr, true); + break; + case kOpenedBegin + kOpenedEnd: + attr->setValue(kOpenedBegEndStr, true); + break; + default: + attr->setValue(kOpenedClosedStr, true); + break; + } + } +} + +//________________________________________________________________________ +void markers::markOpened ( Sguidotag& elt, bool end ) +{ + // filters tags where it doesn't make sense + if (elt->getType() == kTAccent) return; + if (elt->getType() == kTLyrics) return; + if (elt->getType() == kTText) return; + if (elt->getType() == kTFingering) return; + if (elt->getType() == kTFermata) return; + if (elt->getType() == kTPizz) return; + if (elt->getType() == kTHarmonic) return; + + if (elt->getType() == kTTurn) return; + if (elt->getType() == kTTrill) return; + if (elt->getType() == kTTrem) return; + if (elt->getType() == kTStacc) return; + if (elt->getType() == kTMord) return; + if (elt->getType() == kTMarcato) return; + + Sguidoattribute attr = elt->getAttribute (kOpenedStr); + if (attr) { + if (end && (attr->getValue() == kOpenedBegStr)) + attr->setValue(kOpenedBegEndStr, true); + if (!end && (attr->getValue() == kOpenedEndStr)) + attr->setValue(kOpenedBegEndStr, true); + } + else { + Sguidoattribute attr = guidoattribute::create(); + attr->setName (kOpenedStr); + attr->setValue( end ? kOpenedEndStr : kOpenedBegStr, true); + elt->add (attr); + } +} + +} diff --git a/guidoar-dev/src/operations/markers.h b/guidoar-dev/src/operations/markers.h new file mode 100644 index 000000000..fdfd15221 --- /dev/null +++ b/guidoar-dev/src/operations/markers.h @@ -0,0 +1,61 @@ +/* + Copyright (c) Grame 2012 + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + + Grame Research Laboratory, 9, rue du Garet 69001 Lyon - France + research@grame.fr + +*/ + +#ifndef __markers__ +#define __markers__ + +#include "guidoelement.h" +#include "ARTag.h" + +namespace guido +{ + +/*! +\addtogroup operations +@{ +*/ + +/*! +\brief tools for marking tags. +*/ +class markers +{ + public: + enum { kNoMark, kClosed=-1, kOpenedBegin=1, kOpenedEnd=2}; + + /// mark an element with an 'opened' attribute, taking care of its current openness + static void markOpened ( Sguidotag& elt, bool end=true ); + /// set an element 'opened' attribute whatever its current status + static void setMark ( Sguidotag& elt, int type ); + /// set an element 'opened' attribute whatever its current status + static void setMark ( Sguidoelement& elt, int type ); + /// delete the 'opened' attribute + static void delMark ( Sguidotag& elt ); + /// gives the 'opened' attribute value + static int opened ( Sguidotag& elt ); +}; + +/*! @} */ + +} + +#endif diff --git a/guidoar-dev/src/operations/mirrorOperation.cpp b/guidoar-dev/src/operations/mirrorOperation.cpp new file mode 100644 index 000000000..508a1245d --- /dev/null +++ b/guidoar-dev/src/operations/mirrorOperation.cpp @@ -0,0 +1,126 @@ +/* + GUIDO Library + Copyright (C) 2006 Grame + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + + Grame Research Laboratory, 9 rue du Garet, 69001 Lyon - France + research@grame.fr + +*/ + + +#ifdef WIN32 +# pragma warning (disable : 4786) +#endif + +#include +#include + +#include "ARNote.h" +#include "ARFactory.h" +#include "AROthers.h" +#include "ARTag.h" +#include "clonevisitor.h" +#include "firstpitchvisitor.h" +#include "mirrorOperation.h" +#include "transposeOperation.h" +#include "tree_browser.h" + +using namespace std; + +namespace guido +{ + +//________________________________________________________________________ +// mirrorOperation implementation +//________________________________________________________________________ +mirrorOperation::mirrorOperation () : fCurrentKey(0), fFixedPoint(0) {} +mirrorOperation::~mirrorOperation() {} + +//_______________________________________________________________________________ +SARMusic mirrorOperation::operator() ( const SARMusic& score1, const SARMusic& score2 ) +{ + if (!score1 || !score2) return 0; + + firstpitchvisitor fpv; + int pitch = fpv.firstPitch (score2); + if (pitch < 0) return score1; + + Sguidoelement elt = (*this)(score1, pitch); + return dynamic_cast((guidoelement*)elt); +} + +//_______________________________________________________________________________ +Sguidoelement mirrorOperation::operator() ( const Sguidoelement& score, int midipitch ) +{ + fFixedPoint = midipitch; + fCurrentOctave = ARNote::kDefaultOctave; // the default octave + fCurrentKey = 0; + + tree_browser tb(this); + tb.browse (*score); + Sguidoelement outscore = fStack.top(); + fStack.pop(); + return outscore; +} + + +//______________________________________________________________________________ +void mirrorOperation::visitStart( SARNote& elt ) +{ + if (!elt->implicitOctave()) fCurrentOctave = elt->GetOctave(); + SARNote note = copy (elt); + + int midi = elt->midiPitch (fCurrentOctave); + if (midi >= 0) { + int targetInterval = (fFixedPoint - midi) * 2; + int alter = 0; + ARNote::pitch p = ARNote::chromaticOffsetPitch (elt->GetPitch(alter), targetInterval, fCurrentOctave, alter, (fCurrentKey>=0)); + + string name; name += ARNote::NormalizedPitch2Name(p); + note->setName (name); + note->SetAccidental (alter); + note->SetOctave (fCurrentOctave); + } + push (note); +} + +//______________________________________________________________________________ +void mirrorOperation::visitStart ( SARVoice& elt ) +{ + fCurrentOctave = ARNote::kDefaultOctave; // the default octave + fCurrentKey = 0; + clonevisitor::visitStart (elt); +} + +//______________________________________________________________________________ +void mirrorOperation::visitStart ( SARKey& elt ) +{ + Sguidotag tag(elt); + clonevisitor::visitStart (tag); + Sguidoattribute attr = elt->getAttribute(0); + if (attr) { + if (attr->quoteVal()) { // key is specified as a string + int key = transposeOperation::convertKey (attr->getValue()); + if (key != transposeOperation::kUndefinedKey) + fCurrentKey = key; + else fCurrentKey = 0; + } + else fCurrentKey = int(*attr); + } +} + +} // namespace diff --git a/guidoar-dev/src/operations/mirrorOperation.h b/guidoar-dev/src/operations/mirrorOperation.h new file mode 100644 index 000000000..be6eac96a --- /dev/null +++ b/guidoar-dev/src/operations/mirrorOperation.h @@ -0,0 +1,84 @@ +/* + GUIDO Library + Copyright (C) 2006 Grame + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + + Grame Research Laboratory, 9 rue du Garet, 69001 Lyon - France + research@grame.fr + +*/ + +#ifndef __mirrorOperation__ +#define __mirrorOperation__ + +#include "arexport.h" +#include "ARTypes.h" +#include "ARTag.h" +#include "clonevisitor.h" +#include "guidoelement.h" +#include "operation.h" + +namespace guido +{ + +/*! +\addtogroup operations +@{ +*/ + +//______________________________________________________________________________ +/*! +\brief A visitor to mirror pitches around a given pitch +*/ +class gar_export mirrorOperation : + public operation, + public clonevisitor, + public visitor +{ + private: + int fCurrentKey; + int fCurrentOctave; + unsigned int fFixedPoint; + + protected: + void visitStart ( SARNote& elt ); + void visitStart ( SARVoice& elt ); + void visitStart ( SARKey& elt ); + + public: + mirrorOperation(); + virtual ~mirrorOperation(); + + /*! computes a mirrored score + \param score the score to be mirrored + \param midipitch the fixed midi note + \return a new mirrored score + */ + Sguidoelement operator() ( const Sguidoelement& score, int midipitch ); + + /*! computes a mirrored score + \param score the score to be mirrored + \param a score which first note of the first voice is taken as fixed point + \return a new mirrored score + */ + SARMusic operator() ( const SARMusic& score1, const SARMusic& score2 ); +}; + +/*! @} */ + +} // namespace + +#endif diff --git a/guidoar-dev/src/operations/normalizeOperation.cpp b/guidoar-dev/src/operations/normalizeOperation.cpp new file mode 100644 index 000000000..225ca9b2b --- /dev/null +++ b/guidoar-dev/src/operations/normalizeOperation.cpp @@ -0,0 +1,103 @@ +/* + + Copyright (C) 2007 Grame + + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + + Grame Research Laboratory, 9, rue du Garet 69001 Lyon - France + research@grame.fr + +*/ + +#ifdef WIN32 +# pragma warning (disable : 4786) +#endif + +#include +#include + +#include "ARNote.h" +#include "ARFactory.h" +#include "AROthers.h" +#include "ARTag.h" +#include "clonevisitor.h" +#include "normalizeOperation.h" +#include "tree_browser.h" + +using namespace std; + +namespace guido +{ + +//_______________________________________________________________________________ +Sguidoelement normalizeOperation::operator() ( const Sguidoelement& score ) +{ + Sguidoelement outscore; + if (score) { + tree_browser tb(this); + tb.browse (*score); + outscore = fStack.top(); + fStack.pop(); + } + return outscore; +} + +//________________________________________________________________________ +// The visit methods +//________________________________________________________________________ +void normalizeOperation::visitStart ( SARVoice& elt ) +{ + fCurrentOctave = ARNote::kDefaultOctave; + fCurrentDuration.set(1,4); + clonevisitor::visitStart (elt); +} + +//________________________________________________________________________ +void normalizeOperation::visitStart ( SARChord& elt ) +{ + clonevisitor::visitStart (elt); +} + +//________________________________________________________________________ +void normalizeOperation::visitStart ( SARNote& elt ) +{ + SARNote copy = clonevisitor::copy(elt); + + int octave = elt->GetOctave(); + + if (!ARNote::implicitOctave(octave)) fCurrentOctave = octave; + else copy->SetOctave (fCurrentOctave); + + rational duration = elt->duration(); + if (!ARNote::implicitDuration(duration)) fCurrentDuration = duration; + else (*copy) = fCurrentDuration; + push (copy); +} + +//________________________________________________________________________ +void normalizeOperation::visitEnd ( SARChord& elt ) +{ + clonevisitor::visitEnd (elt); +} + +//________________________________________________________________________ +void normalizeOperation::visitEnd ( SARVoice& elt ) +{ + clonevisitor::visitEnd (elt); +} + + +} diff --git a/guidoar-dev/src/operations/normalizeOperation.h b/guidoar-dev/src/operations/normalizeOperation.h new file mode 100644 index 000000000..ce9b6ff20 --- /dev/null +++ b/guidoar-dev/src/operations/normalizeOperation.h @@ -0,0 +1,86 @@ +/* + Copyright � Grame 2008 + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + + Grame Research Laboratory, 9, rue du Garet 69001 Lyon - France + research@grame.fr + +*/ + +#ifndef __normalizeOperation__ +#define __normalizeOperation__ + +#include +#include + +#include "arexport.h" +#include "guidoelement.h" +#include "clonevisitor.h" + +namespace guido +{ + +/*! +\addtogroup operations +@{ +*/ + +/*! +\brief A visitor that produces a normalized version of a score. + + A score normal form is intended to compare scores. The normal form is based + on pitch and duration only: it contains only voices, notes and chords, + where octave and duration are made explicit for every note. + Thus, all the other tags are omitted (i.e. clef, meter slurs etc...). + However, we need to introduce a new specific \backward tag to catch + the case where a single note is tied to a chord. +*/ +class gar_export normalizeOperation : + public clonevisitor +{ + public: + normalizeOperation() {} + virtual ~normalizeOperation() {} + + /*! creates a normal form of a score + \param score the score to be normalized + \return a new score in normal form + */ + Sguidoelement operator() ( const Sguidoelement& score ); + + protected: + rational fCurrentDuration; + int fCurrentOctave; + + virtual void visitStart( SARVoice& elt ); + virtual void visitStart( SARChord& elt ); + virtual void visitStart( SARNote& elt ); + + virtual void visitEnd ( SARVoice& elt ); + virtual void visitEnd ( SARChord& elt ); + + virtual void visitStart( Sguidotag& elt ) {} // skip tags + virtual void visitEnd ( Sguidotag& elt ) {} // skip tags + + private: +}; + +/*! @} */ + +} // namespace MusicXML + + +#endif diff --git a/guidoar-dev/src/operations/operation.h b/guidoar-dev/src/operations/operation.h new file mode 100644 index 000000000..eb71279d4 --- /dev/null +++ b/guidoar-dev/src/operations/operation.h @@ -0,0 +1,55 @@ +/* + GUIDO Library + Copyright (C) 2006 Grame + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + + Grame Research Laboratory, 9 rue du Garet, 69001 Lyon - France + research@grame.fr + +*/ + +#ifndef __operation__ +#define __operation__ + +#include "arexport.h" +#include "ARTypes.h" + +namespace guido +{ + +/*! +\addtogroup operations +@{ +*/ + +//______________________________________________________________________________ +/*! +\brief A visitor to print the gmn description +*/ +class gar_export operation +{ + public: + operation() {} + virtual ~operation() {} + + virtual SARMusic operator() ( const SARMusic& score1, const SARMusic& score2 ) = 0; +}; + +/*! @} */ + +} // namespace + +#endif diff --git a/guidoar-dev/src/operations/parOperation.cpp b/guidoar-dev/src/operations/parOperation.cpp new file mode 100644 index 000000000..75e3c3aab --- /dev/null +++ b/guidoar-dev/src/operations/parOperation.cpp @@ -0,0 +1,138 @@ +/* + GUIDO Library + Copyright (C) 2006 Grame + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + + Grame Research Laboratory, 9 rue du Garet, 69001 Lyon - France + research@grame.fr + +*/ + +#ifdef WIN32 +# pragma warning (disable : 4786) +#endif + +#include + +#include "clonevisitor.h" +#include "durationvisitor.h" +#include "parOperation.h" +#include "ARFactory.h" +#include "ARChord.h" +#include "ARNote.h" +#include "AROthers.h" +#include "tree_browser.h" + + +using namespace std; + +namespace guido +{ + +//_______________________________________________________________________________ +class firstnotechecker : public visitor +{ + public: firstnotechecker() {} + bool check(const Sguidoelement&); + protected: + void visitStart( SARNote& elt ); + bool fDone; +}; + +bool firstnotechecker::check(const Sguidoelement& elt) +{ + fDone = false; + if (elt) { + tree_browser tb(this); + tb.browse (*elt); + } + return fDone; +} + +void firstnotechecker::visitStart(SARNote& elt) +{ + if (!fDone) { + rational d = elt->duration(); + if (ARNote::implicitDuration (d)) + *elt = rational(1,4); + fDone = true; + } +} + +//_______________________________________________________________________________ +SARMusic parOperation::extend ( SARMusic& score, const rational& duration ) +{ + durationvisitor dv; + rational total = dv.duration (score); + + // iterates the score voices + for (ctree::literator i = score->lbegin(); i != score->lend(); i++) { + firstnotechecker fnc; + fnc.check(*i); // check for first note implicit duration and force to default + rational vdur = dv.duration(*i); + SARNote note = ARFactory::instance().createNote("_"); + *note = duration + total - vdur; + for (ctree::literator j = (*i)->lbegin(); j != (*i)->lend(); j++) { + if (dynamic_cast((guidoelement*)*j) || dynamic_cast((guidoelement*)*j)) { + (*i)->elements().insert(j, note); + break; + } + } + } + return score; +} + +//_______________________________________________________________________________ +SARMusic parOperation::parallel ( const SARMusic& score1, const SARMusic& score2 ) +{ + SARMusic elt = ARFactory::instance().createMusic(); + if (elt) { +// unsigned int offset = 0; + if (score1) { + elt->push (score1->elements()); +// offset = score1->elements().size(); + } + if (score2) { + for (ctree::literator i = score2->lbegin(); i != score2->lend(); i++) { + elt->push (*i); + } + } + } + return elt; +} + +//_______________________________________________________________________________ +SARMusic parOperation::operator() ( const SARMusic& score1, const SARMusic& score2 ) +{ + clonevisitor cv; + SARMusic cs1 = dynamic_cast((guidoelement*)cv.clone(score1)); + SARMusic cs2 = dynamic_cast((guidoelement*)cv.clone(score2)); + if (fMode == kLeft) + return parallel (cs1, cs2); + else { + durationvisitor dv; + rational d1 = dv.duration(cs1); + rational d2 = dv.duration(cs2); + if (d1 > d2) + cs2 = extend (cs2, d1-d2); + else if (d1 < d2) + cs1 = extend (cs1, d2-d1); + return parallel (cs1, cs2); + } +} + + +} // namespace diff --git a/guidoar-dev/src/operations/parOperation.h b/guidoar-dev/src/operations/parOperation.h new file mode 100644 index 000000000..da149b800 --- /dev/null +++ b/guidoar-dev/src/operations/parOperation.h @@ -0,0 +1,77 @@ +/* + GUIDO Library + Copyright (C) 2006 Grame + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + + Grame Research Laboratory, 9 rue du Garet, 69001 Lyon - France + research@grame.fr + +*/ + +#ifndef __parOperation__ +#define __parOperation__ + +#include "arexport.h" +#include "guidoelement.h" +#include "operation.h" +#include "ARTypes.h" + +namespace guido +{ + +/*! +\addtogroup operations +@{ +*/ + +//______________________________________________________________________________ +/*! +\brief A visitor to put scores in parallel +*/ +class gar_export parOperation : public operation +{ + public: + enum mode { kLeft, kRight }; + + parOperation(mode m=kLeft) : fMode(m) {} + virtual ~parOperation() {} + + + SARMusic operator() ( const SARMusic& score1, const SARMusic& score2 ); + + private: + mode fMode; + + SARMusic parallel ( const SARMusic& score1, const SARMusic& score2 ); + SARMusic extend ( SARMusic& score, const rational& duration ); +}; + +//______________________________________________________________________________ +/*! +\brief A visitor to put scores in parallel, right justified +*/ +class gar_export rparOperation : public parOperation +{ + public: + rparOperation() : parOperation(kRight) {} + virtual ~rparOperation() {} +}; + +/*! @} */ + +} // namespace + +#endif diff --git a/guidoar-dev/src/operations/pitchApplyOperation.cpp b/guidoar-dev/src/operations/pitchApplyOperation.cpp new file mode 100644 index 000000000..c7588e099 --- /dev/null +++ b/guidoar-dev/src/operations/pitchApplyOperation.cpp @@ -0,0 +1,184 @@ +/* + + Copyright (C) 2007 Grame + + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + + Grame Research Laboratory, 9, rue du Garet 69001 Lyon - France + research@grame.fr + +*/ + +#ifdef WIN32 +# pragma warning (disable : 4786) +#endif + +#include "pitchApplyOperation.h" + +using namespace std; + +namespace guido +{ + +//_______________________________________________________________________________ +// octaveVisitor +//_______________________________________________________________________________ +class octaveVisitor : public visitor +{ + public: + octaveVisitor() { fBrowser.set(this); } + virtual ~octaveVisitor() {} + + int getLastOctave(const Sguidoelement& elt); + void forceOctave(const Sguidoelement& elt, int currentOctave); + + protected: + tree_browser fBrowser; + int fCurrentOctave; + bool fForceOctave; + virtual void visitStart ( SARNote& elt ); +}; + +//_______________________________________________________________________________ +void octaveVisitor::forceOctave( const Sguidoelement& elt, int currentOctave ) +{ + fCurrentOctave = currentOctave; + fForceOctave = true; + if (elt) fBrowser.browse (*elt); +} + +//_______________________________________________________________________________ +int octaveVisitor::getLastOctave( const Sguidoelement& elt ) +{ + fCurrentOctave = ARNote::getDefaultOctave(); + fForceOctave = false; + if (elt) fBrowser.browse (*elt); + return fCurrentOctave; +} + +//_______________________________________________________________________________ +void octaveVisitor::visitStart( SARNote& elt ) +{ + int octave = elt->GetOctave(); + if (fForceOctave) { + if (octave == ARNote::getImplicitOctave()) + elt->SetOctave(fCurrentOctave); + fBrowser.stop(); + } + else if (octave != ARNote::getImplicitOctave()) + fCurrentOctave = octave; +} + +//_______________________________________________________________________________ +// pitchApplyBaseOperation +//_______________________________________________________________________________ +Sguidoelement pitchApplyBaseOperation::browse( const Sguidoelement& score ) { + fInChord = false; + Sguidoelement outscore; + if (score) { + fBrowser.browse (*score); + outscore = fStack.top(); + fStack.pop(); + } + return outscore; +} + +//_______________________________________________________________________________ +void pitchApplyBaseOperation::visitStart( SARVoice& elt ) +{ + fInChord = false; + fLastOctave = fCurrentOctave = fCurrentScoreOctave = ARNote::getDefaultOctave(); + clonevisitor::visitStart (elt); +} + +//_______________________________________________________________________________ +void pitchApplyBaseOperation::setPitch( SARNote& note, const pitchvisitor::TPitch& pitch, int& currentOctave ) const +{ + int octave = pitch.fOctave; + if (octave == currentOctave) octave = ARNote::getImplicitOctave(); + else currentOctave = octave; + note->setName(pitch.fName); + note->SetOctave(pitch.fOctave); + note->SetAccidental(pitch.fAlter); +} + +//_______________________________________________________________________________ +void pitchApplyBaseOperation::startChord( SARChord& elt, bool clone ) +{ + fInChord = true; + fChordBase = (fMode == kUseHighest) ? -1 : 999; + if (clone) clonevisitor::visitStart (elt); +} + +//_______________________________________________________________________________ +void pitchApplyBaseOperation::endChord ( SARChord& elt, int targetpitch, bool clone ) +{ + fInChord = false; + if (!clone) { + octaveVisitor cv; + cv.forceOctave(elt, fLastOctave); + transposeOperation transpose; + Sguidoelement chord = transpose (Sguidoelement(elt), targetpitch - fChordBase); + if (chord) { + int octave = cv.getLastOctave(chord); + if (octave != ARNote::getDefaultOctave()) + fCurrentOctave = octave; + push (chord, false); + } + } + else clonevisitor::visitEnd (elt); +} + +//_______________________________________________________________________________ +void pitchApplyBaseOperation::setChordBase ( SARNote& currentelt ) +{ + int currentpitch = currentelt->midiPitch(fCurrentScoreOctave); + switch (fMode) { + case kUseHighest: + if (currentpitch > fChordBase) fChordBase = currentpitch; + break; + case kUseLowest: + if (currentpitch < fChordBase) fChordBase = currentpitch; + break; + } +} + +//_______________________________________________________________________________ +void pitchApplyBaseOperation::octaveCheck ( SARNote& elt ) +{ + if (fLastOctave != ARNote::getImplicitOctave()) { + int octave = elt->GetOctave(); + if (ARNote::implicitOctave(octave)) elt->SetOctave(fLastOctave); + fLastOctave = ARNote::getImplicitOctave(); + } +} + +//_______________________________________________________________________________ +SARNote pitchApplyBaseOperation::startNote ( SARNote& elt ) +{ + if (!elt->isPitched()) { clonevisitor::visitStart (elt); return 0; } + + if (!elt->implicitOctave()) + fCurrentScoreOctave = elt->GetOctave(); + SARNote note = copy(elt); + if (note) { + if (!note->implicitOctave()) + fLastOctave = note->GetOctave(); // store the last explicit octave + } + return note; +} + +} diff --git a/guidoar-dev/src/operations/pitchApplyOperation.h b/guidoar-dev/src/operations/pitchApplyOperation.h new file mode 100644 index 000000000..f57325d7b --- /dev/null +++ b/guidoar-dev/src/operations/pitchApplyOperation.h @@ -0,0 +1,167 @@ +/* + Copyright © Grame 2008 + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + + Grame Research Laboratory, 9, rue du Garet 69001 Lyon - France + research@grame.fr + +*/ + +#ifndef __pitchApplyOperation__ +#define __pitchApplyOperation__ + +#include +#include + +#include "ARChord.h" +#include "ARNote.h" +#include "AROthers.h" +#include "arexport.h" +#include "clonevisitor.h" +#include "operation.h" +#include "guidorational.h" +#include "pitchvisitor.h" +#include "transposeOperation.h" +#include "tree_browser.h" + +namespace guido +{ + +/*! +\addtogroup operations +@{ +*/ + +/*! +\brief the base visitor of pitch application. + + Intended to minimize code size. + Can only be instantiated by derived class. +*/ +class gar_export pitchApplyBaseOperation : + public operation, + public clonevisitor +{ + protected: + pitchApplyBaseOperation(chordPitchMode m) : fMode(m) { fBrowser.set(this); } + virtual ~pitchApplyBaseOperation() {} + + + bool fInChord; + chordPitchMode fMode; // the chord pitch extraction and application mode; + tree_browser fBrowser; + int fCurrentScoreOctave; // the original score current octave + int fCurrentOctave; // used to code implicit octave + int fLastOctave; // used to restore correct octave at iterator end pos and at chords beginning + int fChordBase; // used to transpose chords + + Sguidoelement browse ( const Sguidoelement& score ); + virtual void visitStart ( SARVoice& elt ); + virtual void setPitch ( SARNote& note, const pitchvisitor::TPitch& pitch, int& currentOctave ) const; + virtual void startChord ( SARChord& elt, bool clone ); + virtual void endChord ( SARChord& elt, int targetpitch, bool clone ); + virtual void setChordBase ( SARNote& elt ); + virtual void octaveCheck ( SARNote& elt ); + virtual SARNote startNote ( SARNote& elt ); +}; + +/*! +\brief A visitor that applies a list of pitches to a score. +*/ +template class gar_export pitchApplyOperation : public pitchApplyBaseOperation +{ + public: + typedef typename T::iterator pitchIterator; + pitchApplyOperation(chordPitchMode m) : pitchApplyBaseOperation(m) {} + virtual ~pitchApplyOperation() {} + + /*! applies a list of pitches to a score + \param score the taret score + \param start an iterator on pitch values + \param end an iterator on the end of pitch values + \return a new score + */ + Sguidoelement operator() ( const Sguidoelement& score, pitchIterator start, pitchIterator end ) { + fPos = start; + fEndPos = end; + return browse(score); + } + + /*! applies a list of durations to a score + \param score1 the taret score + \param score2 a score which pitch is applied to the target score + \return a new score + \note pitch is extracted from the first voice only. + */ + SARMusic operator() ( const SARMusic& score1, const SARMusic& score2 ) + { + pitchvisitor pv(fMode); + T list; + pv.pitch(score2, 0, &list); + Sguidoelement elt = (*this)(score1, list.begin(), list.end()); + return dynamic_cast((guidoelement*)elt); + } + + protected: + typename T::iterator fPos, fEndPos; + + virtual void visitStart( SARNote& elt ) { + SARNote note = startNote(elt); + if (note) { + if (fPos != fEndPos) { + pitchvisitor::TPitch pitch = *fPos; + if (!fInChord) { + setPitch( note, pitch, fCurrentOctave); + push( note ); + fPos++; + } + else setChordBase (elt); + } + else { + octaveCheck (note); + push( note ); + } + } + } + + virtual void visitStart( SARChord& elt ) { startChord (elt, fPos == fEndPos); } + virtual void visitEnd ( SARChord& elt ) { + if (fPos == fEndPos) endChord (elt, 0, true); + else { + endChord (elt, pitchvisitor::midiPitch (*fPos), false); + fPos++; + } + } +}; + +/// \brief a specialized class on low chords pitches +template class gar_export pitchLowApplyOperation : public pitchApplyOperation +{ + public: pitchLowApplyOperation() : pitchApplyOperation(kUseLowest) {} +}; + +/// \brief a specialized class on high chords pitches +template class gar_export pitchHighApplyOperation : public pitchApplyOperation +{ + public: pitchHighApplyOperation() : pitchApplyOperation(kUseHighest) {} +}; + +/*! @} */ + +} // namespace MusicXML + + +#endif diff --git a/guidoar-dev/src/operations/rythmApplyOperation.cpp b/guidoar-dev/src/operations/rythmApplyOperation.cpp new file mode 100644 index 000000000..0372fe8dc --- /dev/null +++ b/guidoar-dev/src/operations/rythmApplyOperation.cpp @@ -0,0 +1,79 @@ +/* + + Copyright (C) 2007 Grame + + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + + Grame Research Laboratory, 9, rue du Garet 69001 Lyon - France + research@grame.fr + +*/ + +#ifdef WIN32 +# pragma warning (disable : 4786) +#endif + +#include "rythmApplyOperation.h" + +using namespace std; + +namespace guido +{ + +//_______________________________________________________________________________ + rythmApplyBaseOperation::rythmApplyBaseOperation() + { + fBrowser.set(this); + fLastDuration = fCurrentDuration = ARNote::getDefaultDuration(); + fCurrentDots = 0; + } + +//_______________________________________________________________________________ +Sguidoelement rythmApplyBaseOperation::browse ( const Sguidoelement& score) { + fInChord = false; + Sguidoelement outscore; + if (score) { + fBrowser.browse (*score); + outscore = fStack.top(); + fStack.pop(); + } + return outscore; +} + +//_______________________________________________________________________________ +void rythmApplyBaseOperation::visitStart( SARVoice& elt ) +{ + fInChord = false; + fLastDuration = fCurrentDuration = ARNote::getDefaultDuration(); + fCurrentDots = 0; + clonevisitor::visitStart (elt); +} + +//_______________________________________________________________________________ +void rythmApplyBaseOperation::visitStart( SARChord& elt ) +{ + fInChord = true; + clonevisitor::visitStart (elt); +} + +//_______________________________________________________________________________ +void rythmApplyBaseOperation::visitEnd ( SARChord& elt ) +{ + fInChord = false; + clonevisitor::visitEnd (elt); +} + +} diff --git a/guidoar-dev/src/operations/rythmApplyOperation.h b/guidoar-dev/src/operations/rythmApplyOperation.h new file mode 100644 index 000000000..7891478f6 --- /dev/null +++ b/guidoar-dev/src/operations/rythmApplyOperation.h @@ -0,0 +1,142 @@ +/* + Copyright © Grame 2008 + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + + Grame Research Laboratory, 9, rue du Garet 69001 Lyon - France + research@grame.fr + +*/ + +#ifndef __rythmApplyOperation__ +#define __rythmApplyOperation__ + +#include +#include + +#include "ARNote.h" +#include "AROthers.h" +#include "arexport.h" +#include "clonevisitor.h" +#include "operation.h" +#include "guidorational.h" +#include "rythmvisitor.h" +#include "tree_browser.h" + +namespace guido +{ + +/*! +\addtogroup operations +@{ +*/ + +/*! +\brief the base visitor for rythm application + + Intended to minimize code size. + Can only be instantiated by derived class. +*/ +class gar_export rythmApplyBaseOperation : + public operation, + public clonevisitor +{ + protected: + rythmApplyBaseOperation(); + virtual ~rythmApplyBaseOperation() {} + + bool fInChord; + tree_browser fBrowser; + rational fCurrentDuration; // used to code implicit duration + int fCurrentDots; // used to code implicit duration + rational fLastDuration; // used to restore correct duration at iterator end pos + + Sguidoelement browse ( const Sguidoelement& score); + virtual void visitStart( SARVoice& elt ); + virtual void visitStart( SARChord& elt ); + virtual void visitEnd ( SARChord& elt ); +}; + +/*! +\brief A visitor that applies a rythm to a score. +*/ +template class gar_export rythmApplyOperation : public rythmApplyBaseOperation +{ + public: + typedef typename T::iterator durIterator; + + rythmApplyOperation() {} + virtual ~rythmApplyOperation() {} + + /*! applies a list of durations to a score + \param score the taret score + \param start an iterator on rythmic values + \param end an iterator on the end of rythmic values + \return a new score + */ + Sguidoelement operator() ( const Sguidoelement& score, durIterator start, durIterator end ) { + fRPos = start; + fEndPos = end; + return browse(score); + } + + /*! applies a list of durations to a score + \param score1 the taret score + \param score2 a score which rythm is applied to the target score + \return a new score + \note rythm is extracted from the first voice only. + */ + SARMusic operator() ( const SARMusic& score1, const SARMusic& score2 ) + { + rythmvisitor rv; + T list; + rv.rythm(score2, 0, &list); + Sguidoelement elt = (*this)(score1, list.begin(), list.end()); + return dynamic_cast((guidoelement*)elt); + } + + protected: + durIterator fRPos, fEndPos; + + virtual void visitStart( SARNote& elt ) { + SARNote note = copy(elt); + if (note) { + if (!note->implicitDuration()) fLastDuration = note->duration(); + if (fRPos != fEndPos) { + rational d = *fRPos; + if (d == fCurrentDuration) note->setImplicitDuration(); + else *note = fCurrentDuration = d; + if (!fInChord) fRPos++; + } + else if (fLastDuration.getNumerator()) { + *note = fLastDuration; + fLastDuration.setNumerator(0); + } + push( note ); + } + } + + virtual void visitEnd ( SARChord& elt ) { + rythmApplyBaseOperation::visitEnd(elt); + if (fRPos != fEndPos) fRPos++; + } +}; + +/*! @} */ + +} // namespace MusicXML + + +#endif diff --git a/guidoar-dev/src/operations/seqOperation.cpp b/guidoar-dev/src/operations/seqOperation.cpp new file mode 100644 index 000000000..5497b27ba --- /dev/null +++ b/guidoar-dev/src/operations/seqOperation.cpp @@ -0,0 +1,494 @@ +/* + GUIDO Library + Copyright (C) 2006 Grame + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + + Grame Research Laboratory, 9 rue du Garet, 69001 Lyon - France + research@grame.fr + +*/ + +#ifdef WIN32 +# pragma warning (disable : 4786) +#endif + +#include + +#include "clonevisitor.h" +#include "countvisitor.h" +#include "seqOperation.h" +#include "ARFactory.h" +#include "ARChord.h" +#include "ARNote.h" +#include "AROthers.h" +#include "markers.h" +#include "tree_browser.h" + +#include "ARTag.h" + +using namespace std; + +namespace guido +{ + + +//______________________________________________________________________________ +/*! +\brief A visitor to remove closed tags +*/ +class gar_export closedRemover : public clonevisitor +{ + protected: + void visitStart ( Sguidotag& elt ) { if (markers::opened (elt) != markers::kClosed) clonevisitor::visitStart(elt); } + void visitEnd ( Sguidotag& elt ) { if (markers::opened (elt) != markers::kClosed) clonevisitor::visitEnd(elt); } + + public: + closedRemover() {} + virtual ~closedRemover() {} +}; + +//______________________________________________________________________________ +/*! +\brief A visitor to clean opened tags +*/ +//______________________________________________________________________________ +class gar_export seqCleaner : public clonevisitor +{ + protected: + SARNote fFirstTied; // used for merging tied notes carrying begin-end markers + Sguidoelement fFirstCTied; // used for merging chords notes carrying begin-end markers + std::map fEndTags; // used for cancelling xxxEnd|Begin sequence carrying end-begin markers + rational fCurrentDuration; + bool fInTie; + bool fTieChord; + + void visitStart ( SARVoice& elt ) { fCurrentDuration.set(1,4); fInTie = false; fTieChord=false; clonevisitor::visitStart(elt); } + void visitStart ( SARNote& elt ); + void visitStart ( SARChord& elt ); + void visitStart ( Sguidotag& elt ); + + void visitEnd ( SARChord& elt ); + void visitEnd ( Sguidotag& elt ); + + public: + seqCleaner() : fCurrentDuration(1,4), fInTie(false) {} + virtual ~seqCleaner() {} +}; + +//_______________________________________________________________________________ +void seqCleaner::visitStart ( Sguidotag& elt ) +{ + int status = markers::opened (elt); + bool done = false; + if (status == markers::kClosed) { + if (elt->getType() == kTTie) fInTie = true; + markers::delMark (elt); + } + if (elt->endTag() && (status == markers::kOpenedEnd)) { + Sguidoelement end = ARFactory::instance().createTag(elt->getName(), elt->getID()); + end = copy(elt, end); + clonevisitor::push (end, false); + fEndTags[end->getName()] = end; + done = true; // manual copy to keep the element in the end map + } + // check if it corresponds to a previous end tag + else if (elt->beginTag() && (status == markers::kOpenedBegin)) { + string name = elt->matchTag(); + Sguidoelement end = fEndTags[name]; + if (end) { + markers::setMark (elt, markers::kClosed); // mark both as close + markers::setMark (end, markers::kClosed); // they should be removed + fEndTags[name] = (void*)0; + } + } + if (!fInTie && !done) clonevisitor::visitStart (elt); +} + +void seqCleaner::visitEnd ( Sguidotag& elt ) +{ + if (fInTie) { + fInTie = false; + fTieChord = false; + fFirstTied = (void*)0; + fFirstCTied = (void*)0; + } + else clonevisitor::visitEnd (elt); +} + +//_______________________________________________________________________________ +void seqCleaner::visitStart ( SARChord& elt ) +{ + fCurrentDuration = elt->totalduration (fCurrentDuration, 0); + if (fInTie) { // we should get 2 chords to merge + fTieChord = true; // a flag to prevent notes from being handled by ARNote visit + if (fFirstCTied) { // we've already got the first chord + ARChord * c = dynamic_cast((guidoelement*)fFirstCTied); + if (c) *c = c->duration() + fCurrentDuration; // add the current chord duration to this first chord + } + else { // this is the first chord + clonevisitor cc; + *elt = fCurrentDuration; // makes explicit duration + fFirstCTied = cc.clone(elt); // make a copy and store it for future use + clonevisitor::push(fFirstCTied, false); // and push it to the current stack + } + } + else clonevisitor::visitStart (elt); +} + +void seqCleaner::visitEnd ( SARChord& elt ) +{ + if (!fTieChord) clonevisitor::visitEnd(elt); +} + + +//_______________________________________________________________________________ +void seqCleaner::visitStart ( SARNote& elt ) +{ + if (!elt->implicitDuration()) fCurrentDuration = elt->duration(); + fEndTags.clear(); // any note between repeat begin and repeat end cancels xxxBegin|End analysis + if (fTieChord) return; // tied notes inside chords are handled at chord level + if (fInTie) { // we should get 2 notes to merge + if (fFirstTied) { // we've already got the first one + *fFirstTied += fCurrentDuration; // add the current duration to this first note + } + else { // this is the first one + fFirstTied = copy(elt); // make a copy ans store it for future use + *fFirstTied = fCurrentDuration; // makes explicit duration + clonevisitor::push(fFirstTied); // and push it + } + } + else clonevisitor::visitStart (elt); +} + +//______________________________________________________________________________ +// seq operations +//_______________________________________________________________________________ +SARMusic seqOperation::operator() ( const SARMusic& score1, const SARMusic& score2 ) +{ + fCurrentDuration = rational(1,4); + Sguidoelement outscore = ARFactory::instance().createMusic(); + if (outscore) { + push (outscore); + + Sguidoelement sc1 = score1 ? Sguidoelement(score1) : outscore; + Sguidoelement sc2 = score2 ? Sguidoelement(score2) : outscore; + + ctree::literator s1i = sc1->lbegin(); + ctree::literator s2i = sc2->lbegin(); + + fFirstInSecondScore = true; + tree_browser browser(this); + // browse voice by voice in parallel + while ((s1i != sc1->lend()) && (s2i != sc2->lend())) { + fRangeTags.clear(); + fPosTags.clear(); + fOpenedTags.clear(); + if (s1i != sc1->lend()) { + fState = kInFirstScore; + browser.browse(*(*s1i)); + s1i++; + } + if (s2i != sc2->lend()) { + fState = kInSecondScore; + countvisitor keys; + if (fPosTags["key"] && !keys.count(*s2i)) { + Sguidotag k = ARFactory::instance().createTag("key"); + Sguidoattribute attr = guidoattribute::create(); + attr->setValue(0L); + k->add(attr); + visitStart (k); + } + browser.browse(*(*s2i)); + s2i++; + } + } + fState = kRemainVoice; + for (; s1i != sc1->lend(); s1i++) { browser.browse(*(*s1i)); } + for (; s2i != sc2->lend(); s2i++) { browser.browse(*(*s2i)); } +#if 0 + cerr << "----------------------------------" << endl; + cerr << outscore << endl; + cerr << "----------------------------------" << endl; +#endif + seqCleaner cleanTags; // clean closed tags (i.e. handle slurs, ties, repeats...) + tree_browser clean(&cleanTags); + clean.browse (*outscore); + outscore = cleanTags.result(); + + closedRemover rmTags; // remove remaining closed tags (currently matched repeats) + tree_browser rm(&rmTags); + rm.browse (*outscore); + outscore = rmTags.result(); + } + return dynamic_cast((guidoelement*)outscore); +} + +//________________________________________________________________________ +void seqOperation::storeTag(Sguidotag tag) +{ + const string& name = tag->getName(); + if (tag->beginTag()) + fRangeTags[name] = tag; + else if (tag->endTag()) + fRangeTags[tag->matchTag()] = (void*)0; + else if (tag->size()) + fRangeTags[name] = tag; + else { + int type = tag->getType(); + bool store = + (type == kTBarFormat ) || + (type == kTBeamsAuto ) || + (type == kTBeamsOff ) || + (type == kTClef ) || + (type == kTKey ) || + (type == kTColor ) || + (type == kTComposer ) || + (type == kTDotFormat ) || + ((type >= kTHeadsCenter) && (type <= kTKey)) || + (type == kTMeter ) || + ((type >= kTNoteFormat) && (type <= kTPort)) || + (type == kTRestFormat ) || + ((type >= kTStaff) && (type <= kTTempo)) || + (type == kTTitle ) || + (type == kTUnits ); + if (store) fPosTags[name] = tag; + } +} + +//________________________________________________________________________ +void seqOperation::endTag(Sguidotag tag) +{ + const string& name = tag->getName(); + if (tag->size()) { + fRangeTags[name] = (void*)0; + if (markers::opened (tag) > 1) { + Sguidotag copy = dynamic_cast((guidoelement*)fStack.top()); + fOpenedTags[name] = copy; + } + } +} + +//________________________________________________________________________ +// check if a tag is already active i.e. if the same position tag has been found before +bool seqOperation::currentTag(Sguidotag tag, bool end) +{ + bool ret = false; + const string& name = tag->getName(); + if (!tag->size()) { // for position tags only + Sguidotag cur = fPosTags[name]; // look for an previous similar tag + if (cur) { + ret = (*cur == tag); // check if equal + if (end) fPosTags[name] = (void*)0; // in case this is the tag end, remove the current one + } + } + return ret; +} + +//________________________________________________________________________ +// check if 2 ties can be merged +bool seqOperation::compareContent (Sguidotag tag1, Sguidotag tag2) +{ + // opened ties should contain only one element: a note or a chord + if ((tag1->size() == 1) && (tag2->size()==1)) { + Sguidoelement e1 = tag1->elements()[0]; + Sguidoelement e2 = tag2->elements()[0]; + SARNote n1 = dynamic_cast((guidoelement*)e1); + SARNote n2 = dynamic_cast((guidoelement*)e2); + if (n1 && n1) { + int octave = fCurrentOctave; + int p1 = n1->midiPitch(fCurrentOctave); + int p2 = n2->midiPitch(octave); + return p1 == p2; + } + + SARChord c1 = dynamic_cast((guidoelement*)e1); + SARChord c2 = dynamic_cast((guidoelement*)e2); + if (c1 && c2) { + vector plist1, plist2; + int octave = fCurrentOctave; + c1->midiPitch (fCurrentOctave, plist1); // octave should to be explicit, + c2->midiPitch (octave, plist2); // thus currentoctave could be ignored + if (plist1.size() && (plist1.size() == plist2.size())) { + for (unsigned int i=0; iend) +bool seqOperation::checkmatch(Sguidotag tag1, Sguidotag tag2) +{ + if (markers::opened (tag2) & markers::kOpenedEnd) { + if (tag2->getType() == kTTie) { + if (fCurrentMatch == tag1) return true; + return compareContent (tag1, tag2); + } + else return true; + } + return false; +} + +//________________________________________________________________________ +// updates the current opened tag list +bool seqOperation::matchOpenedTag(Sguidotag tag, bool end) +{ + int type = markers::opened (tag); + if (type & markers::kOpenedBegin) { // first check the tag openness status + Sguidotag match = fOpenedTags[tag->getName()]; // and look for a previously similar opened tag + if (match) { // we've found one + + if (checkmatch (tag, match)) { // and we check if they match i.e. if their openness match (begin<->end) + if (end) { // done with the current match + // the opened marker should be updated + markers::setMark (match, (markers::opened (match)==markers::kOpenedEnd) ? markers::kClosed : markers::kOpenedBegin); + fOpenedTags[tag->getName()] = (void*)0; // the tag is removed from the opened tag list + fCurrentMatch = (void*)0; // and the current match is cleared + fFirstInSecondScore = false; + } + else { // that's the beginning of a match + fCurrentMatch = tag; // store the first tag of the matching pair + match->push (tag->elements()); // transfer elements to matched tag + tag->clear(); // clears the current tag + } + return true; + } + } + } + return false; +} + +//________________________________________________________________________ +// The visit methods +//________________________________________________________________________ +void seqOperation::visitStart ( Sguidotag& elt ) +{ + switch (fState) { + case kInFirstScore: + clonevisitor::visitStart (elt); + storeTag (elt); + break; + case kRemainVoice: + case kInSecondScore: + if (!fFirstInSecondScore) + clonevisitor::visitStart (elt); + else if (!matchOpenedTag (elt) && !currentTag(elt)) + clonevisitor::visitStart (elt); + break; + } +} + +//________________________________________________________________________ +void seqOperation::visitEnd ( Sguidotag& elt ) +{ + switch (fState) { + case kInFirstScore: + endTag (elt); + clonevisitor::visitEnd (elt); + break; + case kRemainVoice: + case kInSecondScore: + if (!fFirstInSecondScore) + clonevisitor::visitEnd (elt); + else if (!matchOpenedTag (elt, true) && !currentTag(elt)) + clonevisitor::visitEnd (elt); + break; + } +} + +//________________________________________________________________________ +// notes are visited for correct duration link +void seqOperation::visitStart ( SARNote& elt ) +{ + bool done = false; + rational duration = elt->duration(); + int octave = elt->GetOctave(); + + if (fState == kInFirstScore) { + // clear opened tags since only the last note is concerned + fOpenedTags.clear(); + // maintain the current duration status while in the first score + if (!ARNote::implicitDuration (duration)) + fCurrentDuration = duration; + // maintain the current octave number while in the first score + if (!ARNote::implicitOctave (octave)) + fCurrentOctave = octave; + } + else if (fState == kInSecondScore) { + SARNote note = copy (elt); + push( note ); + done = true; + + if (fFirstInSecondScore) { // force implicit values in second score when unspecified + if (ARNote::implicitOctave (octave)) { + note->SetOctave(ARNote::kDefaultOctave); + } + if ( ARNote::implicitDuration (duration) && (fCurrentDuration != ARNote::getDefaultDuration()) ) { + *note = ARNote::getDefaultDuration(); // force explicit default duration + } + fFirstInSecondScore = false; + } + } + if (!done) clonevisitor::visitStart (elt); +} + +// end bars are skipped for the first score +void seqOperation::visitStart ( SAREndBar& elt ) +{ + Sguidotag tag = elt; + switch (fState) { + case kRemainVoice: + case kInSecondScore: + clonevisitor::visitStart (tag); + break; + default: + break; + } +} + +// a voice is created only for the first score +void seqOperation::visitStart ( SARVoice& elt ) +{ + fCurrentOctave = ARNote::kDefaultOctave; + fFirstInSecondScore = true; + switch (fState) { + case kInFirstScore: + case kRemainVoice: + clonevisitor::visitStart (elt); + break; + default: + break; + } +} + +// a voice is close only for the second score +void seqOperation::visitEnd ( SARVoice& elt ) +{ + switch (fState) { + case kInSecondScore: + case kRemainVoice: + clonevisitor::visitEnd (elt); + break; + default: + break; + } +} + +} // namespace diff --git a/guidoar-dev/src/operations/seqOperation.h b/guidoar-dev/src/operations/seqOperation.h new file mode 100644 index 000000000..13e82d732 --- /dev/null +++ b/guidoar-dev/src/operations/seqOperation.h @@ -0,0 +1,96 @@ +/* + GUIDO Library + Copyright (C) 2006 Grame + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + + Grame Research Laboratory, 9 rue du Garet, 69001 Lyon - France + research@grame.fr + +*/ + +#ifndef __seqOperation__ +#define __seqOperation__ + +#include + +#include "arexport.h" +#include "ARTypes.h" +#include "ARTag.h" +#include "clonevisitor.h" +#include "guidoelement.h" +#include "operation.h" +#include "guidorational.h" + +namespace guido +{ + +/*! +\addtogroup operations +@{ +*/ + +//______________________________________________________________________________ +/*! +\brief A visitor to put scores in sequence +*/ +class gar_export seqOperation : + public operation, + public clonevisitor, + public visitor +{ + private: + std::map fRangeTags; + std::map fPosTags; + std::map fOpenedTags; + Sguidotag fCurrentMatch; + + rational fCurrentDuration; + int fCurrentOctave; + + void storeTag(Sguidotag tag); ///< stores the current tag + void endTag(Sguidotag tag); ///< update the current tags list + bool currentTag(Sguidotag tag, bool end=false); + bool matchOpenedTag(Sguidotag tag, bool end=false); + bool checkmatch(Sguidotag tag1, Sguidotag tag2); + bool compareContent (Sguidotag tag1, Sguidotag tag2); + + + protected: + enum state { kInFirstScore, kInSecondScore, kRemainVoice }; + state fState; // the current operation state: copying the first score, the second score of the remaining of the second + bool fFirstInSecondScore; // a flag for special handling of the seconf score first note + + + void visitStart ( SARNote& elt ); + void visitStart ( SARVoice& elt ); + void visitStart ( Sguidotag& elt ); + void visitStart ( SAREndBar& elt ); // filers the end bar in the first score + + void visitEnd ( SARVoice& elt ); + void visitEnd ( Sguidotag& elt ); + + public: + seqOperation() {} + virtual ~seqOperation() {} + + SARMusic operator() ( const SARMusic& score1, const SARMusic& score2 ); +}; + +/*! @} */ + +} // namespace + +#endif diff --git a/guidoar-dev/src/operations/tailOperation.cpp b/guidoar-dev/src/operations/tailOperation.cpp new file mode 100644 index 000000000..ea30135c6 --- /dev/null +++ b/guidoar-dev/src/operations/tailOperation.cpp @@ -0,0 +1,280 @@ +/* + + Copyright (C) 2007 Grame + + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + + Grame Research Laboratory, 9, rue du Garet 69001 Lyon - France + research@grame.fr + +*/ + +#ifdef WIN32 +# pragma warning (disable : 4786) +#endif + +#include +#include + +#include "ARChord.h" +#include "ARNote.h" +#include "AROthers.h" +#include "ARTag.h" +#include "clonevisitor.h" +#include "markers.h" +#include "tailOperation.h" +#include "tree_browser.h" + +using namespace std; + +namespace guido +{ + +//_______________________________________________________________________________ +tailOperation::tailOperation() {} +tailOperation::~tailOperation() {} + +//_______________________________________________________________________________ +SARMusic tailOperation::operator() ( const SARMusic& score1, const SARMusic& score2 ) +{ + if (!score2) return 0; + Sguidoelement elt = (*this)(score1, fDuration.duration(score2)); + return dynamic_cast((guidoelement*)elt); +} + +//_______________________________________________________________________________ +Sguidoelement tailOperation::operator() ( const Sguidoelement& score, const rational& duration ) +{ + fCurrentOctave = ARNote::kDefaultOctave; + fCurrentNoteDots = 0; + fStartPoint = duration; + + Sguidoelement outscore; + if (score) { + tree_browser tb(this); + tb.browse (*score); + if (fStack.size()) { + outscore = fStack.top(); + fStack.pop(); + } + } + return outscore; +} + +//________________________________________________________________________ +void tailOperation::flushTags() +{ + for (unsigned int i = 0; i < fCurrentTags.size(); i++) { + Sguidotag tag = fCurrentTags[i]; + if (tag) { + if (tag->beginTag()) markers::markOpened (tag, false); + else if (tag->size()) markers::markOpened (tag, false); + else if (ornament(tag)) continue; // don't flush empty ornaments + clonevisitor::visitStart (tag); + } + } + fCurrentTags.clear(); +} + +//________________________________________________________________________ +Sguidoelement tailOperation::makeOpenedTie() const +{ + Sguidotag tag = ARTag::create(); + tag->setName ("tie"); + markers::markOpened (tag, false); + return tag; +} + +//________________________________________________________________________ +// The visit methods +//________________________________________________________________________ +void tailOperation::visitStart ( SARVoice& elt ) +{ +//cerr << "start voice --------------" << endl; + fCurrentTags.clear(); + fCopy = fPopTie = false; + fCurrentOctave = ARNote::kDefaultOctave; + fCurrentNoteDots = 0; + clonevisitor::visitStart (elt); + fDuration.visitStart (elt); +} + +//________________________________________________________________________ +void tailOperation::visitStart ( SARChord& elt ) +{ + if (fCopy) clonevisitor::visitStart (elt); + else { // check if startpoint is reached + rational remain = fStartPoint - fDuration.currentVoiceDate(); + rational dur = elt->totalduration(fDuration.currentNoteDuration(), fDuration.currentDots()); + if (remain < dur) { + flushTags(); + push(makeOpenedTie(), true); // push the tag to the current copy + clonevisitor::visitStart (elt); // start cloning the chord + fPopTie = true; // intended to pop the tie at the chord end + } + fDuration.visitStart (elt); + } +} + +//________________________________________________________________________ +void tailOperation::visitStart ( SARNote& elt ) +{ + if (fStartPoint < fDuration.currentVoiceDate()) { + if (!elt->isRest()) { + if (fForceOctave && elt->implicitOctave()) + elt->SetOctave (fCurrentOctave); + fForceOctave = false; + } + if (fForceDuration && elt->implicitDuration()) { + *elt = fDuration.currentNoteDuration(); + elt->SetDots (fDuration.currentDots()); + } + fForceDuration = false; + clonevisitor::visitStart (elt); + } + else { // check if startpoint will be reached + rational remain = fStartPoint - fDuration.currentVoiceDate(); + rational currentDur = fDuration.currentNoteDuration(); + int currentDots = fDuration.currentDots(); + rational dur = elt->totalduration(currentDur, currentDots); + if (remain >= dur) { // not yet + // maintains the current state + int octave = elt->GetOctave(); + if (elt->isPitched() && !ARNote::implicitOctave(octave)) + fCurrentOctave = octave; + fDuration.visitStart (elt); + } + else { + fDuration.visitStart (elt); + fCopy = true; + *elt = dur - remain; + elt->SetDots(0); + fForceDuration = (elt->duration() != fDuration.currentNoteDuration()); + fForceOctave = false; + if (elt->implicitOctave()) { + if (!elt->isRest()) elt->SetOctave (fCurrentOctave); + else fForceOctave = true; + } + + flushTags(); + // notes splitted by the operation are marked using an opened tie + if (remain.getNumerator() && !fDuration.inChord() && !elt->isEmpty()) { + push(makeOpenedTie(), true); + clonevisitor::visitStart (elt); + fStack.pop(); + } + else clonevisitor::visitStart (elt); + } + } +} + +//________________________________________________________________________ +void tailOperation::pushTag ( Sguidotag& elt ) +{ + for (unsigned int i=0; i < fCurrentTags.size(); i++) { + if (fCurrentTags[i] && (fCurrentTags[i]->getName() == elt->getName())) { + fCurrentTags[i] = elt; + return; + } + } + fCurrentTags.push_back(elt); +} + +//________________________________________________________________________ +bool tailOperation::ornament ( Sguidotag& elt ) +{ + switch (elt->getType()) { + case kTAccent: + case kTMord: + case kTTurn: + case kTTrill: + case kTStacc: + case kTPizz: + case kTHarmonic: + case kTFermata: + return true; + } + return false; +} + +//________________________________________________________________________ +void tailOperation::popTag ( Sguidotag& elt ) +{ + if (elt->endTag() || elt->size()) { + for (unsigned int i=0; i < fCurrentTags.size(); i++) { + if (fCurrentTags[i]) { + if (fCurrentTags[i]->getName() == elt->getName()) { + fCurrentTags[i] = (void*)0; + } + else if (fCurrentTags[i]->getName() == elt->matchTag()) { + fCurrentTags[i] = (void*)0; + } + } + } + } +} + +//________________________________________________________________________ +void tailOperation::visitEnd ( SARChord& elt ) +{ + fDuration.visitEnd (elt); + if (fCopy) { + clonevisitor::visitEnd (elt); + if (fPopTie) { + fStack.pop(); + fPopTie = false; + } + } +} + +//________________________________________________________________________ +void tailOperation::visitEnd ( SARVoice& elt ) +{ + flushTags(); + clonevisitor::visitEnd (elt); + // adjusts the stack + // may be necessary due to potential end inside range tags + while (fStack.size() > 1) + fStack.pop(); +} + +//________________________________________________________________________ +void tailOperation::visitStart ( Sguidotag& elt ) +{ + if (fCopy) { + clonevisitor::visitStart (elt); + } + else { + int type = elt->getType(); + if ((type == kTText) ||(type == kTLyrics)) // skip text and lyrics + elt->setID (-1); // to prevent the tag from being popped by visitEnd + else pushTag (elt); + } +} + +//________________________________________________________________________ +void tailOperation::visitEnd ( Sguidotag& elt ) +{ + if (fCopy) { + int type = elt->getType(); + if ((type == kTText) ||(type == kTLyrics)) // skip text and lyrics + if (elt->getID () == -1) return; // when previously skipped by visitStart + clonevisitor::visitEnd (elt); + } + else popTag (elt); +} + +} diff --git a/guidoar-dev/src/operations/tailOperation.h b/guidoar-dev/src/operations/tailOperation.h new file mode 100644 index 000000000..65b605936 --- /dev/null +++ b/guidoar-dev/src/operations/tailOperation.h @@ -0,0 +1,107 @@ +/* + Copyright � Grame 2008 + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + + Grame Research Laboratory, 9, rue du Garet 69001 Lyon - France + research@grame.fr + +*/ + +#ifndef __tailOperation__ +#define __tailOperation__ + +#include +#include + +#include "arexport.h" +#include "ARTypes.h" +#include "ARTag.h" +#include "guidoelement.h" +#include "clonevisitor.h" +#include "durationvisitor.h" +#include "operation.h" + +namespace guido +{ + +/*! +\addtogroup operations +@{ +*/ + +/*! +\brief A visitor that cuts the tail of a score. +*/ +class gar_export tailOperation : + public operation, + public clonevisitor +{ + public: + tailOperation(); + virtual ~tailOperation(); + + /*! cuts the head of a score before a given duration + \param score the score to be cut + \param duration the score duration to drop + \return a new score + */ + Sguidoelement operator() ( const Sguidoelement& score, const rational& duration ); + + /*! cuts the head of a score before a given duration + \param score1 the score to be cut + \param score2 a score which duration is used as cut point + \return a new score + */ + SARMusic operator() ( const SARMusic& score1, const SARMusic& score2 ); + + protected: + enum state { kSkip, kStartPending, kCopy }; + rational fStartPoint; + durationvisitor fDuration; + bool fCopy; // a flag to start copy + bool fForceDuration; // a flag to force explicit duration + bool fForceOctave; // a flag to force explicit octave + bool fPopTie; + + int fCurrentOctave; + int fCurrentNoteDots; + + virtual void visitStart( SARVoice& elt ); + virtual void visitStart( SARChord& elt ); + virtual void visitStart( SARNote& elt ); + virtual void visitStart( Sguidotag& elt ); + + virtual void visitEnd ( SARVoice& elt ); + virtual void visitEnd ( SARChord& elt ); + virtual void visitEnd ( Sguidotag& elt ); + + Sguidoelement makeOpenedTie() const; + + private: + bool ornament (Sguidotag& elt ); + void pushTag (Sguidotag& elt ); + void popTag (Sguidotag& elt ); + + std::vector fCurrentTags; + void flushTags (); +}; + +/*! @} */ + +} // namespace MusicXML + + +#endif diff --git a/guidoar-dev/src/operations/topOperation.cpp b/guidoar-dev/src/operations/topOperation.cpp new file mode 100644 index 000000000..8e859b7d5 --- /dev/null +++ b/guidoar-dev/src/operations/topOperation.cpp @@ -0,0 +1,83 @@ +/* + + Copyright (C) 2007 Grame + + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + + Grame Research Laboratory, 9, rue du Garet 69001 Lyon - France + research@grame.fr + +*/ + +#ifdef WIN32 +# pragma warning (disable : 4786) +#endif + +#include + +#include "AROthers.h" +#include "ARTag.h" +#include "topOperation.h" + +using namespace std; + +namespace guido +{ + +//_______________________________________________________________________________ +topOperation::topOperation() { fBrowser.set(this); } + +//_______________________________________________________________________________ +Sguidoelement topOperation::operator() ( const Sguidoelement& score, int voicenum ) +{ + fVoiceNum = voicenum; + fCurrentVoice = 0; + Sguidoelement outscore; + if (score) { + fBrowser.browse (*score); + outscore = fStack.top(); + fStack.pop(); + } + return outscore; +} + +//_______________________________________________________________________________ +SARMusic topOperation::operator() ( const SARMusic& score1, const SARMusic& score2 ) +{ + Sguidoelement elt = (*this)(score1, score2->size()); + return dynamic_cast((guidoelement*)elt); +} + +//________________________________________________________________________ +bool topOperation::copy () const { return fCurrentVoice <= fVoiceNum; } + +//________________________________________________________________________ +// The visit methods +//________________________________________________________________________ +void topOperation::visitStart ( SARVoice& elt ) +{ + fCurrentVoice++; + clonevisitor::visitStart (elt); +} + +//________________________________________________________________________ +void topOperation::visitEnd ( SARVoice& elt ) +{ + clonevisitor::visitEnd (elt); + if (fCurrentVoice > fVoiceNum) fBrowser.stop(); +} + +} diff --git a/guidoar-dev/src/operations/topOperation.h b/guidoar-dev/src/operations/topOperation.h new file mode 100644 index 000000000..9947e6d69 --- /dev/null +++ b/guidoar-dev/src/operations/topOperation.h @@ -0,0 +1,82 @@ +/* + Copyright � Grame 2008 + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + + Grame Research Laboratory, 9, rue du Garet 69001 Lyon - France + research@grame.fr + +*/ + +#ifndef __topOperation__ +#define __topOperation__ + +#include "arexport.h" +#include "ARTypes.h" +#include "clonevisitor.h" +#include "operation.h" +#include "tree_browser.h" + +namespace guido +{ + +/*! +\addtogroup operations +@{ +*/ + +/*! +\brief A visitor that cuts the tail of a score voices. +*/ +class gar_export topOperation : + public operation, + public clonevisitor +{ + public: + topOperation(); + virtual ~topOperation() {} + + /*! cuts the tail of the score voices after a given voice + \param score the score to be cut + \param voicenum the score voices to preserve + \return a new score + */ + Sguidoelement operator() ( const Sguidoelement& score, int voicenum ); + + /*! cuts the tail of the score voices after a given voice + \param score1 the score to be cut + \param score2 a score which voice number is used as voice index + \return a new score + */ + SARMusic operator() ( const SARMusic& score1, const SARMusic& score2 ); + + bool done () const { return !copy(); } + + protected: + int fVoiceNum, fCurrentVoice; + tree_browser fBrowser; + + virtual bool copy () const; + + virtual void visitStart( SARVoice& elt ); + virtual void visitEnd ( SARVoice& elt ); +}; + +/*! @} */ + +} // namespace MusicXML + + +#endif diff --git a/guidoar-dev/src/operations/transposeOperation.cpp b/guidoar-dev/src/operations/transposeOperation.cpp new file mode 100644 index 000000000..bfd8947fd --- /dev/null +++ b/guidoar-dev/src/operations/transposeOperation.cpp @@ -0,0 +1,271 @@ +/* + + Copyright (C) 2007 Grame + + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + + Grame Research Laboratory, 9, rue du Garet 69001 Lyon - France + research@grame.fr + +*/ + +#ifdef WIN32 +# pragma warning (disable : 4786) +#endif + +#include +#include + +#include "ARNote.h" +#include "ARFactory.h" +#include "AROthers.h" +#include "ARTag.h" +#include "clonevisitor.h" +#include "firstpitchvisitor.h" +#include "transposeOperation.h" +#include "tree_browser.h" + +using namespace std; + +namespace guido +{ + +//________________________________________________________________________ +// transposeOperation implementation +//________________________________________________________________________ +transposeOperation::transposeOperation () +{ + initialize(); +} + +transposeOperation::~transposeOperation() {} + +//_______________________________________________________________________________ +SARMusic transposeOperation::operator() ( const SARMusic& score1, const SARMusic& score2 ) +{ + if (!score1 || !score2) return 0; + + firstpitchvisitor fpv; + int p1 = fpv.firstPitch (score1); + int p2 = fpv.firstPitch (score2); + int steps = ((p1 < 0) || (p2 < 0)) ? 0 : p2 - p1; + + Sguidoelement elt = (*this)(score1, steps); + return dynamic_cast((guidoelement*)elt); +} + +//_______________________________________________________________________________ +Sguidoelement transposeOperation::operator() ( const Sguidoelement& score, int steps ) +{ + fCurrentOctaveIn = fCurrentOctaveOut = ARNote::kDefaultOctave; // default current octave + fChromaticSteps = steps; + fOctaveChange = getOctave(fChromaticSteps); + fTableShift = getKey (getOctaveStep(fChromaticSteps)); + + Sguidoelement transposed; + if (score) { + clonevisitor cv; + transposed = cv.clone(score); + } + if (transposed) { + tree_browser tb(this); + tb.browse (*transposed); + } + return transposed; +} + +//________________________________________________________________________ +/* + The cycle of fifth is a special ordering of notes, beginning, say, with a F + double flat, and ending with a B double sharp, with an interval of a perfect + fifth between each note. This leads to the following list: + Fbb, Cbb, Gbb, Dbb, Abb, Ebb, Bbb, Fb, Cb, Gb, Db, Ab, Eb, Bb, F, C, G, D, + A, E, B, F#, C#, G#, D#, A#, E#, B#, F##, C##, G##, D##, A##, E##, B##. + To apply transposition, we first look in the table for the correct + shifting, and apply the same to every note to transpose. +*/ +void transposeOperation::initialize () +{ + fFifthCycle.clear(); + for (int i=-2; i<=2; i++) { + fFifthCycle.push_back(make_pair('f', i)); + fFifthCycle.push_back(make_pair('c', i)); + fFifthCycle.push_back(make_pair('g', i)); + fFifthCycle.push_back(make_pair('d', i)); + fFifthCycle.push_back(make_pair('a', i)); + fFifthCycle.push_back(make_pair('e', i)); + fFifthCycle.push_back(make_pair('b', i)); + } +} + +//________________________________________________________________________ +// transpose a pitch using the table of fifth cycle +void transposeOperation::transpose ( char& pitch, int& alter, int& octave, int tableshift ) const +{ + // retrieve first the normaized pitch integer class + int pitch1 = ARNote::NormalizedName2Pitch(pitch); + // then browse the fifth cycle table + for (int i=0; i < fFifthCycle.size(); i++) { + // until we find the same pitch spelling (ie including name and accident) + if ((fFifthCycle[i].second == alter) && (fFifthCycle[i].first == pitch)) { + // then we shift into the table + i += tableshift; + // make possible adjustments + if (i > fFifthCycle.size()) i -= 12; + else if (i < 0) i += 12; + // and retrieve the resulting transposed pitch + pitch = fFifthCycle[i].first; + alter = fFifthCycle[i].second; + // check now fro octave changes + int pitch2 = ARNote::NormalizedName2Pitch(pitch); + // if pitch is lower but transposition is up: then increase octave + if ((pitch2 < pitch1) && (fChromaticSteps > 0)) octave++; + // if pitch is higher but transposition is down: then decrease octave + else if ((pitch2 > pitch1) && (fChromaticSteps < 0)) octave--; + + return; + } + } + cerr << "transpose: pitch out of fifth cycle table (" << pitch << " " << alter << ")" << endl; +} + +//________________________________________________________________________ +int transposeOperation::transposeKey (int key, Chromatic steps, int& enharmonicChange) +{ + int newkey = key + getKey(steps); + if (newkey >= 6) { + newkey -= 12; + enharmonicChange = 1; + } + else if (newkey < -6) { + newkey += 12; + enharmonicChange = -1; + } + else enharmonicChange = 0; + return newkey; +} + +//________________________________________________________________________ +int transposeOperation::getKey ( Chromatic steps ) +{ + // the method looks for the key signature corresponding to a chromatic degree + // the key signature is the simplest between flats and sharps alternatives + // sharps are positive values and flats are negative + steps = getOctaveStep(steps); // first converts into a value modulo 12 + if (steps < 0) steps = 12 + steps; // works only on positive values + + int sharps = 0; + int curstep = 0; + while (curstep != steps) { + curstep += 7; // add a fifth + curstep %= 12; // modulus an octave + sharps++; + } + return (sharps >= 6 ? sharps - 12 : sharps); // simplest key is chosen here +} + +//________________________________________________________________________ +int transposeOperation::convertKey ( const string& key ) +{ + + if ((key == "C&") || (key == "a&")) return -7; + if ((key == "C") || (key == "a")) return 0; + if ((key == "C#") || (key == "a#")) return 7; + + if ((key == "D&") || (key == "b&") || (key == "h&")) return -5; + if ((key == "D") || (key == "b") || (key == "h")) return 2; + if ((key == "D#") || (key == "b#") || (key == "h#")) return 9; + + if ((key == "E&") || (key == "c")) return -3; + if ((key == "E") || (key == "c#")) return 4; + if (key == "E#") return 11; // double sharp not supported in key sign + + if ((key == "F&") || (key == "d&")) return -8; + if ((key == "F") || (key == "d")) return -1; + if ((key == "F#") || (key == "d#")) return 6; + + if ((key == "G&") || (key == "e&")) return -6; + if ((key == "G") || (key == "e")) return 1; + if ((key == "G#") || (key == "e#")) return 8; + + if ((key == "A&") || (key == "f")) return -4; + if ((key == "A") || (key == "f#")) return 3; + if (key == "A#") return 10; // double sharp not supported in key sign + + if ((key == "B&") || (key == "H&") || (key == "g")) return -2; + if ((key == "B") || (key == "H") || (key == "g#")) return 5; + if ((key == "B#") || (key == "H#")) return 12; + + return kUndefinedKey; +} + +//________________________________________________________________________ +// The visit methods +//________________________________________________________________________ +void transposeOperation::visitStart ( SARNote& elt ) +{ + if (elt->isRest() || elt->isEmpty()) return; + + int alter; + char npitch = elt->NormalizedPitchName (&alter); + alter += elt->GetAccidental(); + int octaveChge = 0; + transpose ( npitch, alter, octaveChge, fTableShift ); + int octave = elt->GetOctave(); + if (ARNote::implicitOctave (octave)) octave = fCurrentOctaveIn; + else fCurrentOctaveIn = octave; + octave += octaveChge + fOctaveChange; + +//cerr << string(*elt) << " -> "; + string npname; + npname += npitch; + elt->setName(npname); + if ((octave != fCurrentOctaveOut) || !elt->implicitOctave()) + elt->SetOctave(octave); + fCurrentOctaveOut = octave; + elt->SetAccidental(alter); +//cerr << string(*elt) << " oct chge: " << fOctaveChange << endl; +} + +//________________________________________________________________________ +void transposeOperation::visitStart ( SARKey& elt ) +{ + Sguidoattribute attr = elt->getAttribute(0); + if (attr) { + int key = 0; + + if (attr->quoteVal()) { // key is specified as a string + string val = attr->getValue(); + if (val.substr(0,4) == "free") + return; // don'tknow how to transpose free keys + key = convertKey (val); + } + else key = int(*attr); + int enharmonicChange; + int newkey = transposeKey (key, fChromaticSteps, enharmonicChange); + attr->setValue (long(newkey)); + attr->setQuoteVal(false); +//cerr << "visit SARKey value " << key << " -> " << newkey << " enharmonic (" << enharmonicChange << ")" << endl; + } +} + +//________________________________________________________________________ +void transposeOperation::visitStart ( SARVoice& elt ) { + fCurrentOctaveIn = fCurrentOctaveOut = ARNote::kDefaultOctave; // default current octave + fTableShift = getKey (getOctaveStep(fChromaticSteps)); +} + +} diff --git a/guidoar-dev/src/operations/transposeOperation.h b/guidoar-dev/src/operations/transposeOperation.h new file mode 100644 index 000000000..8b8c47408 --- /dev/null +++ b/guidoar-dev/src/operations/transposeOperation.h @@ -0,0 +1,148 @@ +/* + Copyright � Grame 2008 + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + + Grame Research Laboratory, 9, rue du Garet 69001 Lyon - France + research@grame.fr + +*/ + +#ifndef __transposeOperation__ +#define __transposeOperation__ + +#include +#include + +#include "arexport.h" +#include "ARTypes.h" +#include "guidoelement.h" +#include "operation.h" +#include "visitor.h" + + +namespace guido +{ + +/*! +\addtogroup operations +@{ +*/ + +/*! +\brief A visitor that computes a diatonic transposition of a score. + + The transposition visitor computes a diatonic transposition of + a score. The transposition interval is specified as a number of chromatic + steps, the simplest enharmonic diatonic transposition is automatically selected. + The operation makes use of a fifth cycle table to compute transposed values. + +\todo transposing ornaments elements +*/ +class gar_export transposeOperation : + public operation, + public visitor, + public visitor, + public visitor +{ + public: + enum { kUndefinedKey = -99 }; + + typedef int Chromatic; + typedef int Diatonic; + + transposeOperation(); + virtual ~transposeOperation(); + + /*! computes a score transposition + \param score the score to transpose + \param steps the chromatic transposition step + \return a new transposed score + */ + Sguidoelement operator() ( const Sguidoelement& score, int steps ); + + /*! computes a score transposition + \param score1 the score to transpose + \param score2 a score as transposing interval specifier, + actually the difference between the first notes of the scores (uses the lowest note of chords) + \return a new transposed score + */ + SARMusic operator() ( const SARMusic& score1, const SARMusic& score2 ); + + /*! computes an octaves count from a chromatic interval + \param steps a chromatic steps count + \return the count of octaves + */ + static int getOctave ( Chromatic steps ) { return steps/12; } + + /*! computes a step number wihin an octave + \param steps a chromatic steps count + \return the step number within an octave + */ + static Chromatic getOctaveStep ( Chromatic steps ) { return steps%12; } + + /*! computes a key sign corresponding to a chromatic degree + \param steps a chromatic step + \return a numeric key signature representing a number of sharps when positive + and a number of flats when negative + */ + static int getKey ( Chromatic steps ); + + /*! converts a key string specification to a n umeric value + \param key a guido compliant key string + \return a numeric key signature representing a number of sharps when positive + and a number of flats when negative + */ + static int convertKey ( const std::string& key ); + + /*! Transpose a key expressed as a count of sharps (positive keys) or flats (negative key). + The method may do enharmonic adjustments to choose the simplest key. + \param key the key to be transposed + \param steps chromatic transposition steps + \param enharmonicChange on output, possible adjustment to enharmonic keys + \return the transposed key + */ + static int transposeKey ( int key, Chromatic steps, int& enharmonicChange ); + + protected: + std::vector > fFifthCycle; // the fifth cycle table + Chromatic fChromaticSteps; // the target transposing interval + + int fTableShift; // the current shift into the table of fifths + int fOctaveChange; // the target octave change computed from fChromaticSteps + int fCurrentOctaveIn; // the current octave of input notes (default to 1) + int fCurrentOctaveOut; // the current octave of output notes + + void initialize (); + + /*! Transpose a pitch expressed as a diatonic value + alteration + octave + \param pitch on input a diatonic pitch value (where C=1), on output the new pitch value + \param alter on input the accidental value, on output the new accidental value + \param octave on input the octave number, on output the new octave number + \param tableshift the current shift into the table of fifths + */ + void transpose ( char& pitch, int& alter, int& octave, int tableshift ) const; + + virtual void visitStart ( SARNote& elt ); + virtual void visitStart ( SARKey& elt ); + virtual void visitStart ( SARVoice& elt ); +}; + +/*! @} */ + +} // namespace MusicXML + + +#endif diff --git a/guidoar-dev/src/parser/gmnreader.h b/guidoar-dev/src/parser/gmnreader.h new file mode 100644 index 000000000..98dc483b8 --- /dev/null +++ b/guidoar-dev/src/parser/gmnreader.h @@ -0,0 +1,62 @@ +/* + GUIDO Library + Copyright (C) 2006 Grame + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + + Grame Research Laboratory, 9 rue du Garet, 69001 Lyon - France + research@grame.fr + +*/ + +#ifndef __gmnreader__ +#define __gmnreader__ + +#include + +#include "ARTypes.h" +#include "guidorational.h" + +//class rational; + +namespace guido +{ + +//class Sguidoelement; + +//______________________________________________________________________________ +/*! +\brief An abstract class supporting the parser interface. +*/ +class gmnreader // : public singleton +{ + public: + virtual ~gmnreader() {} + virtual Sguidoelement* newComment(const std::string&, bool multiline) = 0; + virtual Sguidoelement* newScore() = 0; + virtual Sguidoelement* newVoice() = 0; + virtual Sguidoelement* newChord() = 0; + virtual Sguidoelement* newRest(const rational * r, long dots) = 0; + virtual Sguidoelement* newNote(const std::string& name, long accidentals, long octave, const rational * r, long dots) = 0; + virtual Sguidoelement* newTag(const std::string&, long id) = 0; + virtual Sguidoattribute* newAttribute(long value) = 0; + virtual Sguidoattribute* newAttribute(float value) = 0; + virtual Sguidoattribute* newAttribute(const std::string& value, bool quote) = 0; + virtual int error(const char * msg, int lineno) = 0; +}; + +} // namespace + +#endif diff --git a/guidoar-dev/src/parser/guido.l b/guidoar-dev/src/parser/guido.l new file mode 100644 index 000000000..de115fb8a --- /dev/null +++ b/guidoar-dev/src/parser/guido.l @@ -0,0 +1,116 @@ +%{ + +#include +#include + +#define YY_NO_UNISTD_H +extern YYSTYPE guidoarlval; + +#define register // intended to get rid of the deprecated register warning + +static int nested; + +static char* unescape (char * str) { + size_t n = strlen(str); + for (int i=0, j=0; i <= n; i++) { + if (str[i] == '\\') { + if (str[i+1] == '\\') { + str[j++] = str[i++]; + } + else if (str[i+1] != '"') { + str[j++] = str[i]; + } + } + else str[j++] = str[i]; + } + return str; +} + +static char* unquote (char * str) { + size_t n = strlen(str); + for (int i=0; i < n; i++) + str[i] = str[i+1]; + str[n-2] = 0; + return str; +} + +static char* untag (char * str) { + size_t n = strlen(str); + for (int i=0; i < n; i++) + str[i] = str[i+1]; + return str; +} + +%} + +%option yylineno +%option never-interactive + +%x CMNTLN +%x COMMENT +%S PARAM + +DIGIT [0-9] +ID [$a-z_A-Z][a-z_A-Z0-9]* +LETTER [a-zA-Z] +NOTE [abcdefgh] +SPACE [ \t\x0a\x0d] +EOL [\x0a\x0d] + +%% +{DIGIT}+ return NUMBER; +"+"{DIGIT}+ return PNUMBER; +"-"{DIGIT}+ return NNUMBER; + +{DIGIT}*"."{DIGIT}+ return FLOAT; +"+"{DIGIT}*"."{DIGIT}+ return FLOAT; +"-"{DIGIT}*"."{DIGIT}+ return FLOAT; + +{SPACE}*"%" BEGIN CMNTLN; +.* +{EOL}+ BEGIN INITIAL; + +.|{EOL}* +"(*" nested++; +"*)" if (--nested==0) BEGIN INITIAL; +{SPACE}*"(*" nested=1; BEGIN COMMENT; + +"{" return STARTCHORD; +"}" return ENDCHORD; +"," return SEP; +":" return IDSEP; +"[" return STARTSEQ; +"]" return ENDSEQ; +"(" return STARTRANGE; +")" return ENDRANGE; +"|" return BAR; + +"." return DOT; +".." return DDOT; +"#" return SHARP; +"&" return FLAT; +"*" return MULT; +"/" return DIV; +"=" return EQUAL; + +"ms" return MLS; +"s" return SEC; +"m"|"cm"|"mm"|"in"|"pt"|"pc"|"hs"|"rl" return UNIT; + +"<" BEGIN PARAM; return STARTPARAM; +{ID} return ID; +">" BEGIN INITIAL; return ENDPARAM; + +"\\"{ID} untag(yytext); return TAGNAME; + +"do"|"re"|"mi"|"fa"|"sol"|"la"|"si"|"ti" return SOLFEGE; +"cis"|"dis"|"fis"|"gis"|"ais" return CHROMATIC; +{NOTE} return DIATONIC; +"empty" return EMPTY; +"_" return REST; + +\"(\\\\|\\.|[^\\\"])*\" unescape(yytext); unquote(yytext); return STRING; + +{SPACE}+ /* eat up space */ +. printf("guido extra text is : %s\n", yytext); return EXTRA; + diff --git a/guidoar-dev/src/parser/guido.y b/guidoar-dev/src/parser/guido.y new file mode 100644 index 000000000..ff9f0b715 --- /dev/null +++ b/guidoar-dev/src/parser/guido.y @@ -0,0 +1,281 @@ +%{ + +#include +#include +#include +#include + +#include "guidoelement.h" +#include "gmnreader.h" +#include "guidorational.h" + +#include "guidoparse.h++" +#include "guidolex.c++" + +int guidoarerror(const char*s); +int guidoarwrap() { return(1); } + +extern guido::gmnreader* gReader; + +static void vadd (std::vector* v1, std::vector* v2) +{ + for (std::vector::iterator i = v2->begin(); i != v2->end(); i++) + v1->push_back(*i); +} + +//#define parseDebug + +#ifdef parseDebug +#define debug(msg) cout << msg << endl; +#define vdebug(msg,v) cout << msg << " " << v << endl; +#else +#define debug(msg) +#define vdebug(msg, v) +#endif + +#define addElt(to,elt) (to)->push(*elt); delete elt + +using namespace std; + +namespace guido +{ + +%} + + +//%pure_parser + +%union { + long int num; + float real; + const char* token; + std::string* str; + char c; + guido::Sguidoelement * elt; + guido::Sguidoattribute* attr; + std::vector* velt; + std::vector* vattr; + guido::rational * r; +} + +/*------------------------------ numbers ------------------------------*/ +%token NUMBER +%token PNUMBER +%token NNUMBER +%token FLOAT + +/*------------------------------ markers ------------------------------*/ +%token STARTCHORD +%token ENDCHORD +%token STARTSEQ +%token ENDSEQ +%token STARTPARAM +%token ENDPARAM +%token STARTRANGE +%token ENDRANGE +%token SEP +%token IDSEP + +/*------------------------------ tags ------------------------------*/ +%token BAR +%token TAGNAME +%token ID + +/*------------------------------ notes ------------------------------*/ +%token DIATONIC +%token CHROMATIC +%token SOLFEGE +%token EMPTY +%token REST +%token DOT +%token DDOT +%token SHARP +%token FLAT + +/*------------------------------ misc ------------------------------*/ +%token MLS +%token SEC +%token UNIT +%token MULT +%token DIV +%token EQUAL +%token STRING +%token EXTRA + +%type NUMBER PNUMBER NNUMBER +%type FLOAT floatn +%type TAGNAME ID MLS SEC STRING UNIT DIATONIC CHROMATIC SOLFEGE REST +%type EMPTY DOT DDOT EXTRA +%type STARTCHORD ENDCHORD STARTSEQ ENDSEQ STARTPARAM ENDPARAM STARTRANGE ENDRANGE SEP IDSEP BAR +%type SHARP FLAT MULT DIV EQUAL + +%type notename noteid tagname id +%type dots accidentals accidental octave number pnumber nnumber signednumber +%type duration +%type score voice note rest music chord tag tagid positiontag rangetag rangechordtag +%type tagarg tagparam +%type symbols voicelist chordsymbol chordsymbols taglist tagchordsymbol +%type tagparams + +%% + +start : score {delete $1;} + ; + +//_______________________________________________ +score : STARTCHORD ENDCHORD { debug("new score"); $$ = gReader->newScore(); } + | STARTCHORD voicelist ENDCHORD { debug("score voicelist"); $$ = gReader->newScore(); addElt(*$$, $2); } + | voice { debug("score voice"); $$ = gReader->newScore(); addElt(*$$, $1); } + ; + +voicelist : voice { debug("new voicelist"); $$ = new vector; $$->push_back (*$1); delete $1; } + | voicelist SEP voice { debug("add voicelist"); $$ = $1; $$->push_back (*$3); delete $3; } + ; + +voice : STARTSEQ symbols ENDSEQ { debug("new voice"); $$ = gReader->newVoice(); addElt(*$$, $2); } + ; + +symbols : { debug("new symbols"); $$ = new vector; } + | symbols music { debug("add music"); $$ = $1; $$->push_back(*$2); delete $2; } + | symbols tag { debug("add tag"); $$ = $1; $$->push_back(*$2); delete $2; } + | symbols chord { debug("add chord"); $$ = $1; $$->push_back(*$2); delete $2; } + ; + +//_______________________________________________ +// tags description +tag : positiontag { debug("position tag "); $$ = $1; } + | rangetag { debug("range tag "); $$ = $1; } + ; + +positiontag : tagid { debug("new position tag "); $$ = $1; } + | tagid STARTPARAM tagparams ENDPARAM { debug("new tag + params"); $$ = $1; (*$1)->add (*$3); delete $3; } + ; + +rangetag : positiontag STARTRANGE symbols ENDRANGE { debug("new range tag "); $$ = $1; (*$1)->push (*$3); delete $3; } + ; + +tagname : TAGNAME { debug("tag name "); $$ = new string(guidoartext); } + ; + +tagid : tagname { vdebug("new tag", *$1); $$ = gReader->newTag(*$1, 0); delete $1; if (!$$) { guidoarerror("unknown tag"); YYERROR;} } + | tagname IDSEP NUMBER { debug("new tag::id"); $$ = gReader->newTag(*$1, $2); delete $1; if (!$$) { guidoarerror("unknown tag"); YYERROR;} } + | BAR { debug("new bar"); $$ = gReader->newTag("bar", 0); } + ; + +tagarg : signednumber { debug("new signednumber arg"); $$ = gReader->newAttribute($1); } + | floatn { debug("new FLOAT arg"); $$ = gReader->newAttribute($1); } + | signednumber UNIT { debug("new signednumber UNIT arg"); $$ = gReader->newAttribute($1); (*$$)->setUnit(guidoartext); } + | floatn UNIT { debug("new FLOAT UNIT arg"); $$ = gReader->newAttribute($1); (*$$)->setUnit(guidoartext); } + | STRING { debug("new STRING arg"); $$ = gReader->newAttribute(guidoartext, true); } + | id { debug("new ID arg"); $$ = gReader->newAttribute(*$1, false); delete $1; } + ; + +tagparam : tagarg { $$ = $1; } + | id EQUAL tagarg { $$ = $3; (*$3)->setName(*$1); delete $1; } + ; + +tagparams : tagparam { $$ = new vector; $$->push_back(*$1); delete $1; } + | tagparams SEP tagparam { $$ = $1; $$->push_back(*$3); delete $3; } + ; + + +//_______________________________________________ +// chord description + +chord : STARTCHORD chordsymbols ENDCHORD { debug("new chord"); $$ = gReader->newChord(); (*$$)->push(*$2); delete $2; } + ; + +chordsymbols: tagchordsymbol { $$ = new vector; vadd($$, $1); delete $1; } + | chordsymbols SEP tagchordsymbol { $$ = $1; vadd($$, $3); delete $3; } + ; + +tagchordsymbol: chordsymbol { $$ = $1;} + | taglist chordsymbol { $$ = $1; vadd($$, $2); delete $2; } + | chordsymbol taglist { $$ = $1; vadd($$, $2); delete $2; } + | taglist chordsymbol taglist { $$ = $1; vadd($$, $2); delete $2; vadd($$, $3); delete $3; } + ; + +chordsymbol : music { $$ = new vector; $$->push_back(*$1); delete $1; } + | rangechordtag { $$ = new vector; $$->push_back(*$1); delete $1; } + ; + +rangechordtag : positiontag STARTRANGE tagchordsymbol ENDRANGE { debug("range chord tag"); $$ = $1; (*$$)->push(*$3); delete $3; } + ; + +taglist : positiontag { debug("new taglist 1"); $$ = new vector; $$->push_back(*$1); delete $1; } + | taglist positiontag { debug("new taglist 2"); $$ = $1; $$->push_back(*$2); delete $2; } + ; + +//_______________________________________________ +// notes description + +music : note { $$ = $1; } + | rest { $$ = $1; } + ; + +rest : REST duration dots { debug("new rest 1"); $$ = gReader->newRest($2, $3); delete $2; } + | REST STARTPARAM NUMBER ENDPARAM duration dots { debug("new rest 2"); $$ = gReader->newRest($5, $6); delete $5; } + ; + +note : noteid octave duration dots { debug("new note v1"); $$ = gReader->newNote(*$1, 0, $2, $3, $4); delete $1; delete $3; } + | noteid accidentals octave duration dots { debug("new note v2"); $$ = gReader->newNote(*$1, $2, $3, $4, $5); delete $1; delete $4; } + ; + +noteid : notename { vdebug("notename", *$1); $$ = $1; } + | notename STARTPARAM NUMBER ENDPARAM { $$ = $1; } + ; + +notename : DIATONIC { debug("new diatonic note"); $$ = new string(guidoartext); } + | CHROMATIC { debug("new chromatic note"); $$ = new string(guidoartext); } + | SOLFEGE { debug("new solfege note"); $$ = new string(guidoartext); } + | EMPTY { debug("new empty note"); $$ = new string(guidoartext); } + ; + +accidentals : accidental { debug("accidental"); $$ = $1; } + | accidentals accidental { debug("accidentals"); $$ = $1 + $2; } + ; + +accidental : SHARP { debug("sharp"); $$ = 1; } + | FLAT { debug("flat"); $$ = -1; } + ; + +octave : { debug("no octave"); $$ = -1000; } // implicit duration + | signednumber { debug("octave"); $$ = $1; } + ; + +duration : { debug("implicit duration"); $$ = new rational(-1, 1); } // implicit duration + | MULT number DIV number { debug("duration ./."); $$ = new rational($2, $4); } + | MULT number { debug("duration *"); $$ = new rational($2, 1); } + | DIV number { debug("duration /"); $$ = new rational(1, $2); } + ; + +dots : { debug("dots 0"); $$ = 0; } + | DOT { debug("dots 1"); $$ = 1; } + | DDOT { debug("dots 2"); $$ = 2; } + ; + +//_______________________________________________ +// misc + +id : ID { $$ = new string(guidoartext); } + ; +number : NUMBER { vdebug("NUMBER", guidoartext); $$ = atol(guidoartext); } + ; +pnumber : PNUMBER { vdebug("NUMBER", guidoartext); $$ = atol(guidoartext); } + ; +nnumber : NNUMBER { vdebug("NUMBER", guidoartext); $$ = atol(guidoartext); } + ; +floatn : FLOAT { $$ = atof(guidoartext); } + ; +signednumber: number { $$ = $1; } + | pnumber { $$ = $1; } + | nnumber { $$ = $1; } + ; +%% + +} // namespace + +int guidoarerror(const char*s) { + YY_FLUSH_BUFFER; + return gReader->error(s, guidoarlineno); +} diff --git a/guidoar-dev/src/parser/guidolex.c++ b/guidoar-dev/src/parser/guidolex.c++ new file mode 100644 index 000000000..4471f07a1 --- /dev/null +++ b/guidoar-dev/src/parser/guidolex.c++ @@ -0,0 +1,2153 @@ +#line 2 "guidolex.c++" + +#line 4 "guidolex.c++" + +#define YY_INT_ALIGNED short int + +/* A lexical scanner generated by flex */ + +#define yy_create_buffer guidoar_create_buffer +#define yy_delete_buffer guidoar_delete_buffer +#define yy_flex_debug guidoar_flex_debug +#define yy_init_buffer guidoar_init_buffer +#define yy_flush_buffer guidoar_flush_buffer +#define yy_load_buffer_state guidoar_load_buffer_state +#define yy_switch_to_buffer guidoar_switch_to_buffer +#define yyin guidoarin +#define yyleng guidoarleng +#define yylex guidoarlex +#define yylineno guidoarlineno +#define yyout guidoarout +#define yyrestart guidoarrestart +#define yytext guidoartext +#define yywrap guidoarwrap +#define yyalloc guidoaralloc +#define yyrealloc guidoarrealloc +#define yyfree guidoarfree + +#define FLEX_SCANNER +#define YY_FLEX_MAJOR_VERSION 2 +#define YY_FLEX_MINOR_VERSION 5 +#define YY_FLEX_SUBMINOR_VERSION 35 +#if YY_FLEX_SUBMINOR_VERSION > 0 +#define FLEX_BETA +#endif + +/* First, we deal with platform-specific or compiler-specific issues. */ + +/* begin standard C headers. */ +#include +#include +#include +#include + +/* end standard C headers. */ + +/* flex integer type definitions */ + +#ifndef FLEXINT_H +#define FLEXINT_H + +/* C99 systems have . Non-C99 systems may or may not. */ + +#if defined (__STDC_VERSION__) && __STDC_VERSION__ >= 199901L + +/* C99 says to define __STDC_LIMIT_MACROS before including stdint.h, + * if you want the limit (max/min) macros for int types. + */ +#ifndef __STDC_LIMIT_MACROS +#define __STDC_LIMIT_MACROS 1 +#endif + +#include +typedef int8_t flex_int8_t; +typedef uint8_t flex_uint8_t; +typedef int16_t flex_int16_t; +typedef uint16_t flex_uint16_t; +typedef int32_t flex_int32_t; +typedef uint32_t flex_uint32_t; +typedef uint64_t flex_uint64_t; +#else +typedef signed char flex_int8_t; +typedef short int flex_int16_t; +typedef int flex_int32_t; +typedef unsigned char flex_uint8_t; +typedef unsigned short int flex_uint16_t; +typedef unsigned int flex_uint32_t; +#endif /* ! C99 */ + +/* Limits of integral types. */ +#ifndef INT8_MIN +#define INT8_MIN (-128) +#endif +#ifndef INT16_MIN +#define INT16_MIN (-32767-1) +#endif +#ifndef INT32_MIN +#define INT32_MIN (-2147483647-1) +#endif +#ifndef INT8_MAX +#define INT8_MAX (127) +#endif +#ifndef INT16_MAX +#define INT16_MAX (32767) +#endif +#ifndef INT32_MAX +#define INT32_MAX (2147483647) +#endif +#ifndef UINT8_MAX +#define UINT8_MAX (255U) +#endif +#ifndef UINT16_MAX +#define UINT16_MAX (65535U) +#endif +#ifndef UINT32_MAX +#define UINT32_MAX (4294967295U) +#endif + +#endif /* ! FLEXINT_H */ + +#ifdef __cplusplus + +/* The "const" storage-class-modifier is valid. */ +#define YY_USE_CONST + +#else /* ! __cplusplus */ + +/* C99 requires __STDC__ to be defined as 1. */ +#if defined (__STDC__) + +#define YY_USE_CONST + +#endif /* defined (__STDC__) */ +#endif /* ! __cplusplus */ + +#ifdef YY_USE_CONST +#define yyconst const +#else +#define yyconst +#endif + +/* Returned upon end-of-file. */ +#define YY_NULL 0 + +/* Promotes a possibly negative, possibly signed char to an unsigned + * integer for use as an array index. If the signed char is negative, + * we want to instead treat it as an 8-bit unsigned char, hence the + * double cast. + */ +#define YY_SC_TO_UI(c) ((unsigned int) (unsigned char) c) + +/* Enter a start condition. This macro really ought to take a parameter, + * but we do it the disgusting crufty way forced on us by the ()-less + * definition of BEGIN. + */ +#define BEGIN (yy_start) = 1 + 2 * + +/* Translate the current start state into a value that can be later handed + * to BEGIN to return to the state. The YYSTATE alias is for lex + * compatibility. + */ +#define YY_START (((yy_start) - 1) / 2) +#define YYSTATE YY_START + +/* Action number for EOF rule of a given start state. */ +#define YY_STATE_EOF(state) (YY_END_OF_BUFFER + state + 1) + +/* Special action meaning "start processing a new file". */ +#define YY_NEW_FILE guidoarrestart(guidoarin ) + +#define YY_END_OF_BUFFER_CHAR 0 + +/* Size of default input buffer. */ +#ifndef YY_BUF_SIZE +#define YY_BUF_SIZE 16384 +#endif + +/* The state buf must be large enough to hold one state per character in the main buffer. + */ +#define YY_STATE_BUF_SIZE ((YY_BUF_SIZE + 2) * sizeof(yy_state_type)) + +#ifndef YY_TYPEDEF_YY_BUFFER_STATE +#define YY_TYPEDEF_YY_BUFFER_STATE +typedef struct yy_buffer_state *YY_BUFFER_STATE; +#endif + +#ifndef YY_TYPEDEF_YY_SIZE_T +#define YY_TYPEDEF_YY_SIZE_T +typedef size_t yy_size_t; +#endif + +extern yy_size_t guidoarleng; + +extern FILE *guidoarin, *guidoarout; + +#define EOB_ACT_CONTINUE_SCAN 0 +#define EOB_ACT_END_OF_FILE 1 +#define EOB_ACT_LAST_MATCH 2 + + /* Note: We specifically omit the test for yy_rule_can_match_eol because it requires + * access to the local variable yy_act. Since yyless() is a macro, it would break + * existing scanners that call yyless() from OUTSIDE guidoarlex. + * One obvious solution it to make yy_act a global. I tried that, and saw + * a 5% performance hit in a non-guidoarlineno scanner, because yy_act is + * normally declared as a register variable-- so it is not worth it. + */ + #define YY_LESS_LINENO(n) \ + do { \ + yy_size_t yyl;\ + for ( yyl = n; yyl < guidoarleng; ++yyl )\ + if ( guidoartext[yyl] == '\n' )\ + --guidoarlineno;\ + }while(0) + +/* Return all but the first "n" matched characters back to the input stream. */ +#define yyless(n) \ + do \ + { \ + /* Undo effects of setting up guidoartext. */ \ + int yyless_macro_arg = (n); \ + YY_LESS_LINENO(yyless_macro_arg);\ + *yy_cp = (yy_hold_char); \ + YY_RESTORE_YY_MORE_OFFSET \ + (yy_c_buf_p) = yy_cp = yy_bp + yyless_macro_arg - YY_MORE_ADJ; \ + YY_DO_BEFORE_ACTION; /* set up guidoartext again */ \ + } \ + while ( 0 ) + +#define unput(c) yyunput( c, (yytext_ptr) ) + +#ifndef YY_STRUCT_YY_BUFFER_STATE +#define YY_STRUCT_YY_BUFFER_STATE +struct yy_buffer_state + { + FILE *yy_input_file; + + char *yy_ch_buf; /* input buffer */ + char *yy_buf_pos; /* current position in input buffer */ + + /* Size of input buffer in bytes, not including room for EOB + * characters. + */ + yy_size_t yy_buf_size; + + /* Number of characters read into yy_ch_buf, not including EOB + * characters. + */ + yy_size_t yy_n_chars; + + /* Whether we "own" the buffer - i.e., we know we created it, + * and can realloc() it to grow it, and should free() it to + * delete it. + */ + int yy_is_our_buffer; + + /* Whether this is an "interactive" input source; if so, and + * if we're using stdio for input, then we want to use getc() + * instead of fread(), to make sure we stop fetching input after + * each newline. + */ + int yy_is_interactive; + + /* Whether we're considered to be at the beginning of a line. + * If so, '^' rules will be active on the next match, otherwise + * not. + */ + int yy_at_bol; + + int yy_bs_lineno; /**< The line count. */ + int yy_bs_column; /**< The column count. */ + + /* Whether to try to fill the input buffer when we reach the + * end of it. + */ + int yy_fill_buffer; + + int yy_buffer_status; + +#define YY_BUFFER_NEW 0 +#define YY_BUFFER_NORMAL 1 + /* When an EOF's been seen but there's still some text to process + * then we mark the buffer as YY_EOF_PENDING, to indicate that we + * shouldn't try reading from the input source any more. We might + * still have a bunch of tokens to match, though, because of + * possible backing-up. + * + * When we actually see the EOF, we change the status to "new" + * (via guidoarrestart()), so that the user can continue scanning by + * just pointing guidoarin at a new input file. + */ +#define YY_BUFFER_EOF_PENDING 2 + + }; +#endif /* !YY_STRUCT_YY_BUFFER_STATE */ + +/* Stack of input buffers. */ +static size_t yy_buffer_stack_top = 0; /**< index of top of stack. */ +static size_t yy_buffer_stack_max = 0; /**< capacity of stack. */ +static YY_BUFFER_STATE * yy_buffer_stack = 0; /**< Stack as an array. */ + +/* We provide macros for accessing buffer states in case in the + * future we want to put the buffer states in a more general + * "scanner state". + * + * Returns the top of the stack, or NULL. + */ +#define YY_CURRENT_BUFFER ( (yy_buffer_stack) \ + ? (yy_buffer_stack)[(yy_buffer_stack_top)] \ + : NULL) + +/* Same as previous macro, but useful when we know that the buffer stack is not + * NULL or when we need an lvalue. For internal use only. + */ +#define YY_CURRENT_BUFFER_LVALUE (yy_buffer_stack)[(yy_buffer_stack_top)] + +/* yy_hold_char holds the character lost when guidoartext is formed. */ +static char yy_hold_char; +static yy_size_t yy_n_chars; /* number of characters read into yy_ch_buf */ +yy_size_t guidoarleng; + +/* Points to current character in buffer. */ +static char *yy_c_buf_p = (char *) 0; +static int yy_init = 0; /* whether we need to initialize */ +static int yy_start = 0; /* start state number */ + +/* Flag which is used to allow guidoarwrap()'s to do buffer switches + * instead of setting up a fresh guidoarin. A bit of a hack ... + */ +static int yy_did_buffer_switch_on_eof; + +void guidoarrestart (FILE *input_file ); +void guidoar_switch_to_buffer (YY_BUFFER_STATE new_buffer ); +YY_BUFFER_STATE guidoar_create_buffer (FILE *file,int size ); +void guidoar_delete_buffer (YY_BUFFER_STATE b ); +void guidoar_flush_buffer (YY_BUFFER_STATE b ); +void guidoarpush_buffer_state (YY_BUFFER_STATE new_buffer ); +void guidoarpop_buffer_state (void ); + +static void guidoarensure_buffer_stack (void ); +static void guidoar_load_buffer_state (void ); +static void guidoar_init_buffer (YY_BUFFER_STATE b,FILE *file ); + +#define YY_FLUSH_BUFFER guidoar_flush_buffer(YY_CURRENT_BUFFER ) + +YY_BUFFER_STATE guidoar_scan_buffer (char *base,yy_size_t size ); +YY_BUFFER_STATE guidoar_scan_string (yyconst char *yy_str ); +YY_BUFFER_STATE guidoar_scan_bytes (yyconst char *bytes,yy_size_t len ); + +void *guidoaralloc (yy_size_t ); +void *guidoarrealloc (void *,yy_size_t ); +void guidoarfree (void * ); + +#define yy_new_buffer guidoar_create_buffer + +#define yy_set_interactive(is_interactive) \ + { \ + if ( ! YY_CURRENT_BUFFER ){ \ + guidoarensure_buffer_stack (); \ + YY_CURRENT_BUFFER_LVALUE = \ + guidoar_create_buffer(guidoarin,YY_BUF_SIZE ); \ + } \ + YY_CURRENT_BUFFER_LVALUE->yy_is_interactive = is_interactive; \ + } + +#define yy_set_bol(at_bol) \ + { \ + if ( ! YY_CURRENT_BUFFER ){\ + guidoarensure_buffer_stack (); \ + YY_CURRENT_BUFFER_LVALUE = \ + guidoar_create_buffer(guidoarin,YY_BUF_SIZE ); \ + } \ + YY_CURRENT_BUFFER_LVALUE->yy_at_bol = at_bol; \ + } + +#define YY_AT_BOL() (YY_CURRENT_BUFFER_LVALUE->yy_at_bol) + +typedef unsigned char YY_CHAR; + +FILE *guidoarin = (FILE *) 0, *guidoarout = (FILE *) 0; + +typedef int yy_state_type; + +extern int guidoarlineno; + +int guidoarlineno = 1; + +extern char *guidoartext; +#define yytext_ptr guidoartext + +static yy_state_type yy_get_previous_state (void ); +static yy_state_type yy_try_NUL_trans (yy_state_type current_state ); +static int yy_get_next_buffer (void ); +static void yy_fatal_error (yyconst char msg[] ); + +/* Done after the current pattern has been matched and before the + * corresponding action - sets up guidoartext. + */ +#define YY_DO_BEFORE_ACTION \ + (yytext_ptr) = yy_bp; \ + guidoarleng = (yy_size_t) (yy_cp - yy_bp); \ + (yy_hold_char) = *yy_cp; \ + *yy_cp = '\0'; \ + (yy_c_buf_p) = yy_cp; + +#define YY_NUM_RULES 45 +#define YY_END_OF_BUFFER 46 +/* This struct is not used in this scanner, + but its presence is necessary. */ +struct yy_trans_info + { + flex_int32_t yy_verify; + flex_int32_t yy_nxt; + }; +static yyconst flex_int16_t yy_accept[132] = + { 0, + 0, 0, 8, 8, 10, 10, 0, 0, 46, 44, + 43, 43, 44, 25, 7, 26, 20, 21, 27, 44, + 16, 44, 23, 28, 1, 17, 33, 29, 18, 44, + 19, 41, 39, 39, 39, 39, 39, 39, 39, 39, + 44, 44, 32, 44, 44, 31, 44, 14, 22, 15, + 8, 9, 8, 10, 10, 10, 10, 34, 35, 34, + 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, + 32, 34, 34, 31, 34, 43, 7, 0, 0, 42, + 0, 13, 0, 2, 0, 3, 24, 4, 0, 1, + 36, 0, 0, 32, 0, 37, 0, 0, 0, 30, + + 0, 8, 9, 8, 10, 11, 12, 34, 34, 34, + 32, 34, 34, 34, 34, 34, 30, 34, 0, 5, + 6, 36, 38, 0, 34, 34, 0, 34, 40, 34, + 0 + } ; + +static yyconst flex_int32_t yy_ec[256] = + { 0, + 1, 1, 1, 1, 1, 1, 1, 1, 2, 3, + 1, 1, 4, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 2, 1, 5, 6, 7, 8, 9, 1, 10, + 11, 12, 13, 14, 15, 16, 17, 18, 18, 18, + 18, 18, 18, 18, 18, 18, 18, 19, 1, 20, + 21, 22, 1, 1, 23, 23, 23, 23, 23, 23, + 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, + 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, + 24, 25, 26, 1, 27, 1, 28, 29, 30, 31, + + 32, 33, 34, 35, 36, 23, 23, 37, 38, 39, + 40, 41, 23, 42, 43, 44, 23, 23, 23, 23, + 45, 23, 46, 47, 48, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1 + } ; + +static yyconst flex_int32_t yy_meta[49] = + { 0, + 1, 1, 2, 1, 1, 1, 3, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 4, 1, 1, + 1, 1, 5, 1, 1, 1, 5, 5, 5, 5, + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, + 5, 5, 5, 5, 5, 1, 1, 1 + } ; + +static yyconst flex_int16_t yy_base[139] = + { 0, + 0, 0, 46, 48, 50, 53, 59, 0, 229, 230, + 65, 68, 54, 230, 230, 230, 216, 230, 230, 67, + 230, 89, 90, 230, 93, 230, 230, 230, 230, 0, + 230, 230, 191, 230, 74, 44, 188, 85, 189, 181, + 184, 194, 79, 84, 86, 80, 185, 230, 230, 230, + 0, 121, 123, 230, 126, 208, 208, 0, 230, 0, + 182, 0, 95, 96, 179, 106, 180, 172, 175, 185, + 101, 105, 106, 105, 176, 144, 230, 199, 135, 230, + 52, 230, 192, 135, 191, 139, 230, 190, 189, 140, + 0, 163, 162, 230, 161, 230, 162, 159, 158, 230, + + 163, 0, 158, 160, 162, 230, 230, 0, 156, 155, + 0, 147, 0, 146, 126, 125, 0, 130, 145, 141, + 101, 0, 230, 30, 0, 20, 16, 13, 230, 0, + 230, 170, 175, 180, 183, 188, 190, 192 + } ; + +static yyconst flex_int16_t yy_def[139] = + { 0, + 131, 1, 132, 132, 133, 133, 1, 7, 131, 131, + 131, 131, 134, 131, 131, 131, 131, 131, 131, 131, + 131, 131, 131, 131, 131, 131, 131, 131, 131, 135, + 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, + 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, + 136, 131, 136, 131, 131, 131, 131, 137, 131, 137, + 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, + 137, 137, 137, 137, 137, 131, 131, 131, 134, 131, + 134, 131, 131, 131, 131, 131, 131, 131, 131, 131, + 138, 131, 131, 131, 131, 131, 131, 131, 131, 131, + + 131, 136, 131, 136, 131, 131, 131, 137, 137, 137, + 137, 137, 137, 137, 137, 137, 137, 137, 134, 131, + 131, 138, 131, 131, 137, 137, 131, 137, 131, 137, + 0, 131, 131, 131, 131, 131, 131, 131 + } ; + +static yyconst flex_int16_t yy_nxt[279] = + { 0, + 10, 11, 12, 11, 13, 14, 10, 15, 16, 17, + 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, + 28, 10, 10, 29, 30, 31, 32, 33, 34, 35, + 36, 37, 38, 39, 40, 41, 42, 43, 10, 10, + 44, 45, 46, 47, 10, 48, 49, 50, 52, 53, + 52, 53, 55, 55, 131, 55, 55, 130, 80, 56, + 129, 57, 56, 128, 57, 58, 76, 76, 76, 76, + 76, 76, 77, 127, 78, 77, 119, 78, 81, 95, + 59, 58, 83, 96, 84, 60, 61, 62, 63, 64, + 65, 66, 67, 68, 69, 70, 71, 58, 58, 72, + + 73, 74, 75, 58, 85, 87, 86, 88, 89, 93, + 90, 94, 96, 94, 96, 96, 94, 96, 121, 101, + 98, 100, 94, 103, 103, 103, 104, 94, 105, 105, + 110, 112, 111, 113, 111, 113, 113, 113, 111, 80, + 113, 115, 111, 117, 118, 76, 76, 76, 111, 80, + 83, 77, 84, 78, 85, 89, 86, 90, 120, 81, + 103, 103, 103, 104, 105, 105, 113, 125, 125, 81, + 51, 51, 51, 51, 51, 54, 54, 54, 54, 54, + 79, 79, 79, 79, 79, 91, 126, 91, 102, 125, + 102, 102, 102, 108, 108, 122, 122, 125, 125, 96, + + 123, 123, 124, 123, 123, 123, 88, 88, 121, 120, + 82, 113, 113, 111, 111, 116, 114, 109, 107, 106, + 96, 96, 94, 94, 99, 97, 92, 82, 131, 9, + 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, + 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, + 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, + 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, + 131, 131, 131, 131, 131, 131, 131, 131 + } ; + +static yyconst flex_int16_t yy_chk[279] = + { 0, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 3, 3, + 4, 4, 5, 5, 81, 6, 6, 128, 13, 5, + 127, 5, 6, 126, 6, 7, 11, 11, 11, 12, + 12, 12, 11, 124, 11, 12, 81, 12, 13, 36, + 7, 7, 20, 36, 20, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + + 7, 7, 7, 7, 22, 23, 22, 23, 25, 35, + 25, 35, 38, 44, 43, 46, 43, 45, 121, 46, + 38, 43, 45, 52, 52, 53, 53, 44, 55, 55, + 63, 64, 63, 66, 72, 64, 71, 73, 71, 79, + 74, 66, 73, 71, 74, 76, 76, 76, 72, 119, + 84, 76, 84, 76, 86, 90, 86, 90, 120, 79, + 103, 103, 104, 104, 105, 105, 118, 116, 115, 119, + 132, 132, 132, 132, 132, 133, 133, 133, 133, 133, + 134, 134, 134, 134, 134, 135, 114, 135, 136, 112, + 136, 136, 136, 137, 137, 138, 138, 110, 109, 101, + + 99, 98, 97, 95, 93, 92, 89, 88, 85, 83, + 78, 75, 70, 69, 68, 67, 65, 61, 57, 56, + 47, 42, 41, 40, 39, 37, 33, 17, 9, 131, + 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, + 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, + 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, + 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, + 131, 131, 131, 131, 131, 131, 131, 131 + } ; + +/* Table of booleans, true if rule could match eol. */ +static yyconst flex_int32_t yy_rule_can_match_eol[46] = + { 0, +0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 1, 1, 0, 0, }; + +static yy_state_type yy_last_accepting_state; +static char *yy_last_accepting_cpos; + +extern int guidoar_flex_debug; +int guidoar_flex_debug = 0; + +/* The intent behind this definition is that it'll catch + * any uses of REJECT which flex missed. + */ +#define REJECT reject_used_but_not_detected +#define yymore() yymore_used_but_not_detected +#define YY_MORE_ADJ 0 +#define YY_RESTORE_YY_MORE_OFFSET +char *guidoartext; +#line 1 "guido.l" +#line 2 "guido.l" + +#include +#include + +#define YY_NO_UNISTD_H +extern YYSTYPE guidoarlval; + +#define register // intended to get rid of the deprecated register warning + +static int nested; + +static char* unescape (char * str) { + size_t n = strlen(str); + for (int i=0, j=0; i <= n; i++) { + if (str[i] == '\\') { + if (str[i+1] == '\\') { + str[j++] = str[i++]; + } + else if (str[i+1] != '"') { + str[j++] = str[i]; + } + } + else str[j++] = str[i]; + } + return str; +} + +static char* unquote (char * str) { + size_t n = strlen(str); + for (int i=0; i < n; i++) + str[i] = str[i+1]; + str[n-2] = 0; + return str; +} + +static char* untag (char * str) { + size_t n = strlen(str); + for (int i=0; i < n; i++) + str[i] = str[i+1]; + return str; +} + + + + +#line 638 "guidolex.c++" + +#define INITIAL 0 +#define CMNTLN 1 +#define COMMENT 2 +#define PARAM 3 + +#ifndef YY_NO_UNISTD_H +/* Special case for "unistd.h", since it is non-ANSI. We include it way + * down here because we want the user's section 1 to have been scanned first. + * The user has a chance to override it with an option. + */ +#include +#endif + +#ifndef YY_EXTRA_TYPE +#define YY_EXTRA_TYPE void * +#endif + +static int yy_init_globals (void ); + +/* Accessor methods to globals. + These are made visible to non-reentrant scanners for convenience. */ + +int guidoarlex_destroy (void ); + +int guidoarget_debug (void ); + +void guidoarset_debug (int debug_flag ); + +YY_EXTRA_TYPE guidoarget_extra (void ); + +void guidoarset_extra (YY_EXTRA_TYPE user_defined ); + +FILE *guidoarget_in (void ); + +void guidoarset_in (FILE * in_str ); + +FILE *guidoarget_out (void ); + +void guidoarset_out (FILE * out_str ); + +yy_size_t guidoarget_leng (void ); + +char *guidoarget_text (void ); + +int guidoarget_lineno (void ); + +void guidoarset_lineno (int line_number ); + +/* Macros after this point can all be overridden by user definitions in + * section 1. + */ + +#ifndef YY_SKIP_YYWRAP +#ifdef __cplusplus +extern "C" int guidoarwrap (void ); +#else +extern int guidoarwrap (void ); +#endif +#endif + + static void yyunput (int c,char *buf_ptr ); + +#ifndef yytext_ptr +static void yy_flex_strncpy (char *,yyconst char *,int ); +#endif + +#ifdef YY_NEED_STRLEN +static int yy_flex_strlen (yyconst char * ); +#endif + +#ifndef YY_NO_INPUT + +#ifdef __cplusplus +static int yyinput (void ); +#else +static int input (void ); +#endif + +#endif + +/* Amount of stuff to slurp up with each read. */ +#ifndef YY_READ_BUF_SIZE +#define YY_READ_BUF_SIZE 8192 +#endif + +/* Copy whatever the last rule matched to the standard output. */ +#ifndef ECHO +/* This used to be an fputs(), but since the string might contain NUL's, + * we now use fwrite(). + */ +#define ECHO fwrite( guidoartext, guidoarleng, 1, guidoarout ) +#endif + +/* Gets input and stuffs it into "buf". number of characters read, or YY_NULL, + * is returned in "result". + */ +#ifndef YY_INPUT +#define YY_INPUT(buf,result,max_size) \ + if ( YY_CURRENT_BUFFER_LVALUE->yy_is_interactive ) \ + { \ + int c = '*'; \ + yy_size_t n; \ + for ( n = 0; n < max_size && \ + (c = getc( guidoarin )) != EOF && c != '\n'; ++n ) \ + buf[n] = (char) c; \ + if ( c == '\n' ) \ + buf[n++] = (char) c; \ + if ( c == EOF && ferror( guidoarin ) ) \ + YY_FATAL_ERROR( "input in flex scanner failed" ); \ + result = n; \ + } \ + else \ + { \ + errno=0; \ + while ( (result = fread(buf, 1, max_size, guidoarin))==0 && ferror(guidoarin)) \ + { \ + if( errno != EINTR) \ + { \ + YY_FATAL_ERROR( "input in flex scanner failed" ); \ + break; \ + } \ + errno=0; \ + clearerr(guidoarin); \ + } \ + }\ +\ + +#endif + +/* No semi-colon after return; correct usage is to write "yyterminate();" - + * we don't want an extra ';' after the "return" because that will cause + * some compilers to complain about unreachable statements. + */ +#ifndef yyterminate +#define yyterminate() return YY_NULL +#endif + +/* Number of entries by which start-condition stack grows. */ +#ifndef YY_START_STACK_INCR +#define YY_START_STACK_INCR 25 +#endif + +/* Report a fatal error. */ +#ifndef YY_FATAL_ERROR +#define YY_FATAL_ERROR(msg) yy_fatal_error( msg ) +#endif + +/* end tables serialization structures and prototypes */ + +/* Default declaration of generated scanner - a define so the user can + * easily add parameters. + */ +#ifndef YY_DECL +#define YY_DECL_IS_OURS 1 + +extern int guidoarlex (void); + +#define YY_DECL int guidoarlex (void) +#endif /* !YY_DECL */ + +/* Code executed at the beginning of each rule, after guidoartext and guidoarleng + * have been set up. + */ +#ifndef YY_USER_ACTION +#define YY_USER_ACTION +#endif + +/* Code executed at the end of each rule. */ +#ifndef YY_BREAK +#define YY_BREAK break; +#endif + +#define YY_RULE_SETUP \ + YY_USER_ACTION + +/** The main scanner function which does all the work. + */ +YY_DECL +{ + register yy_state_type yy_current_state; + register char *yy_cp, *yy_bp; + register int yy_act; + +#line 60 "guido.l" + +#line 825 "guidolex.c++" + + if ( !(yy_init) ) + { + (yy_init) = 1; + +#ifdef YY_USER_INIT + YY_USER_INIT; +#endif + + if ( ! (yy_start) ) + (yy_start) = 1; /* first start state */ + + if ( ! guidoarin ) + guidoarin = stdin; + + if ( ! guidoarout ) + guidoarout = stdout; + + if ( ! YY_CURRENT_BUFFER ) { + guidoarensure_buffer_stack (); + YY_CURRENT_BUFFER_LVALUE = + guidoar_create_buffer(guidoarin,YY_BUF_SIZE ); + } + + guidoar_load_buffer_state( ); + } + + while ( 1 ) /* loops until end-of-file is reached */ + { + yy_cp = (yy_c_buf_p); + + /* Support of guidoartext. */ + *yy_cp = (yy_hold_char); + + /* yy_bp points to the position in yy_ch_buf of the start of + * the current run. + */ + yy_bp = yy_cp; + + yy_current_state = (yy_start); +yy_match: + do + { + register YY_CHAR yy_c = yy_ec[YY_SC_TO_UI(*yy_cp)]; + if ( yy_accept[yy_current_state] ) + { + (yy_last_accepting_state) = yy_current_state; + (yy_last_accepting_cpos) = yy_cp; + } + while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state ) + { + yy_current_state = (int) yy_def[yy_current_state]; + if ( yy_current_state >= 132 ) + yy_c = yy_meta[(unsigned int) yy_c]; + } + yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c]; + ++yy_cp; + } + while ( yy_current_state != 131 ); + yy_cp = (yy_last_accepting_cpos); + yy_current_state = (yy_last_accepting_state); + +yy_find_action: + yy_act = yy_accept[yy_current_state]; + + YY_DO_BEFORE_ACTION; + + if ( yy_act != YY_END_OF_BUFFER && yy_rule_can_match_eol[yy_act] ) + { + yy_size_t yyl; + for ( yyl = 0; yyl < guidoarleng; ++yyl ) + if ( guidoartext[yyl] == '\n' ) + + guidoarlineno++; +; + } + +do_action: /* This label is used only to access EOF actions. */ + + switch ( yy_act ) + { /* beginning of action switch */ + case 0: /* must back up */ + /* undo the effects of YY_DO_BEFORE_ACTION */ + *yy_cp = (yy_hold_char); + yy_cp = (yy_last_accepting_cpos); + yy_current_state = (yy_last_accepting_state); + goto yy_find_action; + +case 1: +YY_RULE_SETUP +#line 61 "guido.l" +return NUMBER; + YY_BREAK +case 2: +YY_RULE_SETUP +#line 62 "guido.l" +return PNUMBER; + YY_BREAK +case 3: +YY_RULE_SETUP +#line 63 "guido.l" +return NNUMBER; + YY_BREAK +case 4: +YY_RULE_SETUP +#line 65 "guido.l" +return FLOAT; + YY_BREAK +case 5: +YY_RULE_SETUP +#line 66 "guido.l" +return FLOAT; + YY_BREAK +case 6: +YY_RULE_SETUP +#line 67 "guido.l" +return FLOAT; + YY_BREAK +case 7: +/* rule 7 can match eol */ +YY_RULE_SETUP +#line 69 "guido.l" +BEGIN CMNTLN; + YY_BREAK +case 8: +YY_RULE_SETUP +#line 70 "guido.l" + + YY_BREAK +case 9: +/* rule 9 can match eol */ +YY_RULE_SETUP +#line 71 "guido.l" +BEGIN INITIAL; + YY_BREAK +case 10: +/* rule 10 can match eol */ +YY_RULE_SETUP +#line 73 "guido.l" + + YY_BREAK +case 11: +YY_RULE_SETUP +#line 74 "guido.l" +nested++; + YY_BREAK +case 12: +YY_RULE_SETUP +#line 75 "guido.l" +if (--nested==0) BEGIN INITIAL; + YY_BREAK +case 13: +/* rule 13 can match eol */ +YY_RULE_SETUP +#line 76 "guido.l" +nested=1; BEGIN COMMENT; + YY_BREAK +case 14: +YY_RULE_SETUP +#line 78 "guido.l" +return STARTCHORD; + YY_BREAK +case 15: +YY_RULE_SETUP +#line 79 "guido.l" +return ENDCHORD; + YY_BREAK +case 16: +YY_RULE_SETUP +#line 80 "guido.l" +return SEP; + YY_BREAK +case 17: +YY_RULE_SETUP +#line 81 "guido.l" +return IDSEP; + YY_BREAK +case 18: +YY_RULE_SETUP +#line 82 "guido.l" +return STARTSEQ; + YY_BREAK +case 19: +YY_RULE_SETUP +#line 83 "guido.l" +return ENDSEQ; + YY_BREAK +case 20: +YY_RULE_SETUP +#line 84 "guido.l" +return STARTRANGE; + YY_BREAK +case 21: +YY_RULE_SETUP +#line 85 "guido.l" +return ENDRANGE; + YY_BREAK +case 22: +YY_RULE_SETUP +#line 86 "guido.l" +return BAR; + YY_BREAK +case 23: +YY_RULE_SETUP +#line 88 "guido.l" +return DOT; + YY_BREAK +case 24: +YY_RULE_SETUP +#line 89 "guido.l" +return DDOT; + YY_BREAK +case 25: +YY_RULE_SETUP +#line 90 "guido.l" +return SHARP; + YY_BREAK +case 26: +YY_RULE_SETUP +#line 91 "guido.l" +return FLAT; + YY_BREAK +case 27: +YY_RULE_SETUP +#line 92 "guido.l" +return MULT; + YY_BREAK +case 28: +YY_RULE_SETUP +#line 93 "guido.l" +return DIV; + YY_BREAK +case 29: +YY_RULE_SETUP +#line 94 "guido.l" +return EQUAL; + YY_BREAK +case 30: +YY_RULE_SETUP +#line 96 "guido.l" +return MLS; + YY_BREAK +case 31: +YY_RULE_SETUP +#line 97 "guido.l" +return SEC; + YY_BREAK +case 32: +YY_RULE_SETUP +#line 98 "guido.l" +return UNIT; + YY_BREAK +case 33: +YY_RULE_SETUP +#line 100 "guido.l" +BEGIN PARAM; return STARTPARAM; + YY_BREAK +case 34: +YY_RULE_SETUP +#line 101 "guido.l" +return ID; + YY_BREAK +case 35: +YY_RULE_SETUP +#line 102 "guido.l" +BEGIN INITIAL; return ENDPARAM; + YY_BREAK +case 36: +YY_RULE_SETUP +#line 104 "guido.l" +untag(guidoartext); return TAGNAME; + YY_BREAK +case 37: +YY_RULE_SETUP +#line 106 "guido.l" +return SOLFEGE; + YY_BREAK +case 38: +YY_RULE_SETUP +#line 107 "guido.l" +return CHROMATIC; + YY_BREAK +case 39: +YY_RULE_SETUP +#line 108 "guido.l" +return DIATONIC; + YY_BREAK +case 40: +YY_RULE_SETUP +#line 109 "guido.l" +return EMPTY; + YY_BREAK +case 41: +YY_RULE_SETUP +#line 110 "guido.l" +return REST; + YY_BREAK +case 42: +/* rule 42 can match eol */ +YY_RULE_SETUP +#line 112 "guido.l" +unescape(guidoartext); unquote(guidoartext); return STRING; + YY_BREAK +case 43: +/* rule 43 can match eol */ +YY_RULE_SETUP +#line 114 "guido.l" +/* eat up space */ + YY_BREAK +case 44: +YY_RULE_SETUP +#line 115 "guido.l" +printf("guido extra text is : %s\n", guidoartext); return EXTRA; + YY_BREAK +case 45: +YY_RULE_SETUP +#line 117 "guido.l" +ECHO; + YY_BREAK +#line 1145 "guidolex.c++" +case YY_STATE_EOF(INITIAL): +case YY_STATE_EOF(CMNTLN): +case YY_STATE_EOF(COMMENT): +case YY_STATE_EOF(PARAM): + yyterminate(); + + case YY_END_OF_BUFFER: + { + /* Amount of text matched not including the EOB char. */ + int yy_amount_of_matched_text = (int) (yy_cp - (yytext_ptr)) - 1; + + /* Undo the effects of YY_DO_BEFORE_ACTION. */ + *yy_cp = (yy_hold_char); + YY_RESTORE_YY_MORE_OFFSET + + if ( YY_CURRENT_BUFFER_LVALUE->yy_buffer_status == YY_BUFFER_NEW ) + { + /* We're scanning a new file or input source. It's + * possible that this happened because the user + * just pointed guidoarin at a new source and called + * guidoarlex(). If so, then we have to assure + * consistency between YY_CURRENT_BUFFER and our + * globals. Here is the right place to do so, because + * this is the first action (other than possibly a + * back-up) that will match for the new input source. + */ + (yy_n_chars) = YY_CURRENT_BUFFER_LVALUE->yy_n_chars; + YY_CURRENT_BUFFER_LVALUE->yy_input_file = guidoarin; + YY_CURRENT_BUFFER_LVALUE->yy_buffer_status = YY_BUFFER_NORMAL; + } + + /* Note that here we test for yy_c_buf_p "<=" to the position + * of the first EOB in the buffer, since yy_c_buf_p will + * already have been incremented past the NUL character + * (since all states make transitions on EOB to the + * end-of-buffer state). Contrast this with the test + * in input(). + */ + if ( (yy_c_buf_p) <= &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars)] ) + { /* This was really a NUL. */ + yy_state_type yy_next_state; + + (yy_c_buf_p) = (yytext_ptr) + yy_amount_of_matched_text; + + yy_current_state = yy_get_previous_state( ); + + /* Okay, we're now positioned to make the NUL + * transition. We couldn't have + * yy_get_previous_state() go ahead and do it + * for us because it doesn't know how to deal + * with the possibility of jamming (and we don't + * want to build jamming into it because then it + * will run more slowly). + */ + + yy_next_state = yy_try_NUL_trans( yy_current_state ); + + yy_bp = (yytext_ptr) + YY_MORE_ADJ; + + if ( yy_next_state ) + { + /* Consume the NUL. */ + yy_cp = ++(yy_c_buf_p); + yy_current_state = yy_next_state; + goto yy_match; + } + + else + { + yy_cp = (yy_last_accepting_cpos); + yy_current_state = (yy_last_accepting_state); + goto yy_find_action; + } + } + + else switch ( yy_get_next_buffer( ) ) + { + case EOB_ACT_END_OF_FILE: + { + (yy_did_buffer_switch_on_eof) = 0; + + if ( guidoarwrap( ) ) + { + /* Note: because we've taken care in + * yy_get_next_buffer() to have set up + * guidoartext, we can now set up + * yy_c_buf_p so that if some total + * hoser (like flex itself) wants to + * call the scanner after we return the + * YY_NULL, it'll still work - another + * YY_NULL will get returned. + */ + (yy_c_buf_p) = (yytext_ptr) + YY_MORE_ADJ; + + yy_act = YY_STATE_EOF(YY_START); + goto do_action; + } + + else + { + if ( ! (yy_did_buffer_switch_on_eof) ) + YY_NEW_FILE; + } + break; + } + + case EOB_ACT_CONTINUE_SCAN: + (yy_c_buf_p) = + (yytext_ptr) + yy_amount_of_matched_text; + + yy_current_state = yy_get_previous_state( ); + + yy_cp = (yy_c_buf_p); + yy_bp = (yytext_ptr) + YY_MORE_ADJ; + goto yy_match; + + case EOB_ACT_LAST_MATCH: + (yy_c_buf_p) = + &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars)]; + + yy_current_state = yy_get_previous_state( ); + + yy_cp = (yy_c_buf_p); + yy_bp = (yytext_ptr) + YY_MORE_ADJ; + goto yy_find_action; + } + break; + } + + default: + YY_FATAL_ERROR( + "fatal flex scanner internal error--no action found" ); + } /* end of action switch */ + } /* end of scanning one token */ +} /* end of guidoarlex */ + +/* yy_get_next_buffer - try to read in a new buffer + * + * Returns a code representing an action: + * EOB_ACT_LAST_MATCH - + * EOB_ACT_CONTINUE_SCAN - continue scanning from current position + * EOB_ACT_END_OF_FILE - end of file + */ +static int yy_get_next_buffer (void) +{ + register char *dest = YY_CURRENT_BUFFER_LVALUE->yy_ch_buf; + register char *source = (yytext_ptr); + register int number_to_move, i; + int ret_val; + + if ( (yy_c_buf_p) > &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars) + 1] ) + YY_FATAL_ERROR( + "fatal flex scanner internal error--end of buffer missed" ); + + if ( YY_CURRENT_BUFFER_LVALUE->yy_fill_buffer == 0 ) + { /* Don't try to fill the buffer, so this is an EOF. */ + if ( (yy_c_buf_p) - (yytext_ptr) - YY_MORE_ADJ == 1 ) + { + /* We matched a single character, the EOB, so + * treat this as a final EOF. + */ + return EOB_ACT_END_OF_FILE; + } + + else + { + /* We matched some text prior to the EOB, first + * process it. + */ + return EOB_ACT_LAST_MATCH; + } + } + + /* Try to read more data. */ + + /* First move last chars to start of buffer. */ + number_to_move = (int) ((yy_c_buf_p) - (yytext_ptr)) - 1; + + for ( i = 0; i < number_to_move; ++i ) + *(dest++) = *(source++); + + if ( YY_CURRENT_BUFFER_LVALUE->yy_buffer_status == YY_BUFFER_EOF_PENDING ) + /* don't do the read, it's not guaranteed to return an EOF, + * just force an EOF + */ + YY_CURRENT_BUFFER_LVALUE->yy_n_chars = (yy_n_chars) = 0; + + else + { + yy_size_t num_to_read = + YY_CURRENT_BUFFER_LVALUE->yy_buf_size - number_to_move - 1; + + while ( num_to_read <= 0 ) + { /* Not enough room in the buffer - grow it. */ + + /* just a shorter name for the current buffer */ + YY_BUFFER_STATE b = YY_CURRENT_BUFFER; + + int yy_c_buf_p_offset = + (int) ((yy_c_buf_p) - b->yy_ch_buf); + + if ( b->yy_is_our_buffer ) + { + yy_size_t new_size = b->yy_buf_size * 2; + + if ( new_size <= 0 ) + b->yy_buf_size += b->yy_buf_size / 8; + else + b->yy_buf_size *= 2; + + b->yy_ch_buf = (char *) + /* Include room in for 2 EOB chars. */ + guidoarrealloc((void *) b->yy_ch_buf,b->yy_buf_size + 2 ); + } + else + /* Can't grow it, we don't own it. */ + b->yy_ch_buf = 0; + + if ( ! b->yy_ch_buf ) + YY_FATAL_ERROR( + "fatal error - scanner input buffer overflow" ); + + (yy_c_buf_p) = &b->yy_ch_buf[yy_c_buf_p_offset]; + + num_to_read = YY_CURRENT_BUFFER_LVALUE->yy_buf_size - + number_to_move - 1; + + } + + if ( num_to_read > YY_READ_BUF_SIZE ) + num_to_read = YY_READ_BUF_SIZE; + + /* Read in more data. */ + YY_INPUT( (&YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[number_to_move]), + (yy_n_chars), num_to_read ); + + YY_CURRENT_BUFFER_LVALUE->yy_n_chars = (yy_n_chars); + } + + if ( (yy_n_chars) == 0 ) + { + if ( number_to_move == YY_MORE_ADJ ) + { + ret_val = EOB_ACT_END_OF_FILE; + guidoarrestart(guidoarin ); + } + + else + { + ret_val = EOB_ACT_LAST_MATCH; + YY_CURRENT_BUFFER_LVALUE->yy_buffer_status = + YY_BUFFER_EOF_PENDING; + } + } + + else + ret_val = EOB_ACT_CONTINUE_SCAN; + + if ((yy_size_t) ((yy_n_chars) + number_to_move) > YY_CURRENT_BUFFER_LVALUE->yy_buf_size) { + /* Extend the array by 50%, plus the number we really need. */ + yy_size_t new_size = (yy_n_chars) + number_to_move + ((yy_n_chars) >> 1); + YY_CURRENT_BUFFER_LVALUE->yy_ch_buf = (char *) guidoarrealloc((void *) YY_CURRENT_BUFFER_LVALUE->yy_ch_buf,new_size ); + if ( ! YY_CURRENT_BUFFER_LVALUE->yy_ch_buf ) + YY_FATAL_ERROR( "out of dynamic memory in yy_get_next_buffer()" ); + } + + (yy_n_chars) += number_to_move; + YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars)] = YY_END_OF_BUFFER_CHAR; + YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars) + 1] = YY_END_OF_BUFFER_CHAR; + + (yytext_ptr) = &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[0]; + + return ret_val; +} + +/* yy_get_previous_state - get the state just before the EOB char was reached */ + + static yy_state_type yy_get_previous_state (void) +{ + register yy_state_type yy_current_state; + register char *yy_cp; + + yy_current_state = (yy_start); + + for ( yy_cp = (yytext_ptr) + YY_MORE_ADJ; yy_cp < (yy_c_buf_p); ++yy_cp ) + { + register YY_CHAR yy_c = (*yy_cp ? yy_ec[YY_SC_TO_UI(*yy_cp)] : 1); + if ( yy_accept[yy_current_state] ) + { + (yy_last_accepting_state) = yy_current_state; + (yy_last_accepting_cpos) = yy_cp; + } + while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state ) + { + yy_current_state = (int) yy_def[yy_current_state]; + if ( yy_current_state >= 132 ) + yy_c = yy_meta[(unsigned int) yy_c]; + } + yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c]; + } + + return yy_current_state; +} + +/* yy_try_NUL_trans - try to make a transition on the NUL character + * + * synopsis + * next_state = yy_try_NUL_trans( current_state ); + */ + static yy_state_type yy_try_NUL_trans (yy_state_type yy_current_state ) +{ + register int yy_is_jam; + register char *yy_cp = (yy_c_buf_p); + + register YY_CHAR yy_c = 1; + if ( yy_accept[yy_current_state] ) + { + (yy_last_accepting_state) = yy_current_state; + (yy_last_accepting_cpos) = yy_cp; + } + while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state ) + { + yy_current_state = (int) yy_def[yy_current_state]; + if ( yy_current_state >= 132 ) + yy_c = yy_meta[(unsigned int) yy_c]; + } + yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c]; + yy_is_jam = (yy_current_state == 131); + + return yy_is_jam ? 0 : yy_current_state; +} + + static void yyunput (int c, register char * yy_bp ) +{ + register char *yy_cp; + + yy_cp = (yy_c_buf_p); + + /* undo effects of setting up guidoartext */ + *yy_cp = (yy_hold_char); + + if ( yy_cp < YY_CURRENT_BUFFER_LVALUE->yy_ch_buf + 2 ) + { /* need to shift things up to make room */ + /* +2 for EOB chars. */ + register yy_size_t number_to_move = (yy_n_chars) + 2; + register char *dest = &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[ + YY_CURRENT_BUFFER_LVALUE->yy_buf_size + 2]; + register char *source = + &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[number_to_move]; + + while ( source > YY_CURRENT_BUFFER_LVALUE->yy_ch_buf ) + *--dest = *--source; + + yy_cp += (int) (dest - source); + yy_bp += (int) (dest - source); + YY_CURRENT_BUFFER_LVALUE->yy_n_chars = + (yy_n_chars) = YY_CURRENT_BUFFER_LVALUE->yy_buf_size; + + if ( yy_cp < YY_CURRENT_BUFFER_LVALUE->yy_ch_buf + 2 ) + YY_FATAL_ERROR( "flex scanner push-back overflow" ); + } + + *--yy_cp = (char) c; + + if ( c == '\n' ){ + --guidoarlineno; + } + + (yytext_ptr) = yy_bp; + (yy_hold_char) = *yy_cp; + (yy_c_buf_p) = yy_cp; +} + +#ifndef YY_NO_INPUT +#ifdef __cplusplus + static int yyinput (void) +#else + static int input (void) +#endif + +{ + int c; + + *(yy_c_buf_p) = (yy_hold_char); + + if ( *(yy_c_buf_p) == YY_END_OF_BUFFER_CHAR ) + { + /* yy_c_buf_p now points to the character we want to return. + * If this occurs *before* the EOB characters, then it's a + * valid NUL; if not, then we've hit the end of the buffer. + */ + if ( (yy_c_buf_p) < &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars)] ) + /* This was really a NUL. */ + *(yy_c_buf_p) = '\0'; + + else + { /* need more input */ + yy_size_t offset = (yy_c_buf_p) - (yytext_ptr); + ++(yy_c_buf_p); + + switch ( yy_get_next_buffer( ) ) + { + case EOB_ACT_LAST_MATCH: + /* This happens because yy_g_n_b() + * sees that we've accumulated a + * token and flags that we need to + * try matching the token before + * proceeding. But for input(), + * there's no matching to consider. + * So convert the EOB_ACT_LAST_MATCH + * to EOB_ACT_END_OF_FILE. + */ + + /* Reset buffer status. */ + guidoarrestart(guidoarin ); + + /*FALLTHROUGH*/ + + case EOB_ACT_END_OF_FILE: + { + if ( guidoarwrap( ) ) + return 0; + + if ( ! (yy_did_buffer_switch_on_eof) ) + YY_NEW_FILE; +#ifdef __cplusplus + return yyinput(); +#else + return input(); +#endif + } + + case EOB_ACT_CONTINUE_SCAN: + (yy_c_buf_p) = (yytext_ptr) + offset; + break; + } + } + } + + c = *(unsigned char *) (yy_c_buf_p); /* cast for 8-bit char's */ + *(yy_c_buf_p) = '\0'; /* preserve guidoartext */ + (yy_hold_char) = *++(yy_c_buf_p); + + if ( c == '\n' ) + + guidoarlineno++; +; + + return c; +} +#endif /* ifndef YY_NO_INPUT */ + +/** Immediately switch to a different input stream. + * @param input_file A readable stream. + * + * @note This function does not reset the start condition to @c INITIAL . + */ + void guidoarrestart (FILE * input_file ) +{ + + if ( ! YY_CURRENT_BUFFER ){ + guidoarensure_buffer_stack (); + YY_CURRENT_BUFFER_LVALUE = + guidoar_create_buffer(guidoarin,YY_BUF_SIZE ); + } + + guidoar_init_buffer(YY_CURRENT_BUFFER,input_file ); + guidoar_load_buffer_state( ); +} + +/** Switch to a different input buffer. + * @param new_buffer The new input buffer. + * + */ + void guidoar_switch_to_buffer (YY_BUFFER_STATE new_buffer ) +{ + + /* TODO. We should be able to replace this entire function body + * with + * guidoarpop_buffer_state(); + * guidoarpush_buffer_state(new_buffer); + */ + guidoarensure_buffer_stack (); + if ( YY_CURRENT_BUFFER == new_buffer ) + return; + + if ( YY_CURRENT_BUFFER ) + { + /* Flush out information for old buffer. */ + *(yy_c_buf_p) = (yy_hold_char); + YY_CURRENT_BUFFER_LVALUE->yy_buf_pos = (yy_c_buf_p); + YY_CURRENT_BUFFER_LVALUE->yy_n_chars = (yy_n_chars); + } + + YY_CURRENT_BUFFER_LVALUE = new_buffer; + guidoar_load_buffer_state( ); + + /* We don't actually know whether we did this switch during + * EOF (guidoarwrap()) processing, but the only time this flag + * is looked at is after guidoarwrap() is called, so it's safe + * to go ahead and always set it. + */ + (yy_did_buffer_switch_on_eof) = 1; +} + +static void guidoar_load_buffer_state (void) +{ + (yy_n_chars) = YY_CURRENT_BUFFER_LVALUE->yy_n_chars; + (yytext_ptr) = (yy_c_buf_p) = YY_CURRENT_BUFFER_LVALUE->yy_buf_pos; + guidoarin = YY_CURRENT_BUFFER_LVALUE->yy_input_file; + (yy_hold_char) = *(yy_c_buf_p); +} + +/** Allocate and initialize an input buffer state. + * @param file A readable stream. + * @param size The character buffer size in bytes. When in doubt, use @c YY_BUF_SIZE. + * + * @return the allocated buffer state. + */ + YY_BUFFER_STATE guidoar_create_buffer (FILE * file, int size ) +{ + YY_BUFFER_STATE b; + + b = (YY_BUFFER_STATE) guidoaralloc(sizeof( struct yy_buffer_state ) ); + if ( ! b ) + YY_FATAL_ERROR( "out of dynamic memory in guidoar_create_buffer()" ); + + b->yy_buf_size = size; + + /* yy_ch_buf has to be 2 characters longer than the size given because + * we need to put in 2 end-of-buffer characters. + */ + b->yy_ch_buf = (char *) guidoaralloc(b->yy_buf_size + 2 ); + if ( ! b->yy_ch_buf ) + YY_FATAL_ERROR( "out of dynamic memory in guidoar_create_buffer()" ); + + b->yy_is_our_buffer = 1; + + guidoar_init_buffer(b,file ); + + return b; +} + +/** Destroy the buffer. + * @param b a buffer created with guidoar_create_buffer() + * + */ + void guidoar_delete_buffer (YY_BUFFER_STATE b ) +{ + + if ( ! b ) + return; + + if ( b == YY_CURRENT_BUFFER ) /* Not sure if we should pop here. */ + YY_CURRENT_BUFFER_LVALUE = (YY_BUFFER_STATE) 0; + + if ( b->yy_is_our_buffer ) + guidoarfree((void *) b->yy_ch_buf ); + + guidoarfree((void *) b ); +} + +/* Initializes or reinitializes a buffer. + * This function is sometimes called more than once on the same buffer, + * such as during a guidoarrestart() or at EOF. + */ + static void guidoar_init_buffer (YY_BUFFER_STATE b, FILE * file ) + +{ + int oerrno = errno; + + guidoar_flush_buffer(b ); + + b->yy_input_file = file; + b->yy_fill_buffer = 1; + + /* If b is the current buffer, then guidoar_init_buffer was _probably_ + * called from guidoarrestart() or through yy_get_next_buffer. + * In that case, we don't want to reset the lineno or column. + */ + if (b != YY_CURRENT_BUFFER){ + b->yy_bs_lineno = 1; + b->yy_bs_column = 0; + } + + b->yy_is_interactive = 0; + + errno = oerrno; +} + +/** Discard all buffered characters. On the next scan, YY_INPUT will be called. + * @param b the buffer state to be flushed, usually @c YY_CURRENT_BUFFER. + * + */ + void guidoar_flush_buffer (YY_BUFFER_STATE b ) +{ + if ( ! b ) + return; + + b->yy_n_chars = 0; + + /* We always need two end-of-buffer characters. The first causes + * a transition to the end-of-buffer state. The second causes + * a jam in that state. + */ + b->yy_ch_buf[0] = YY_END_OF_BUFFER_CHAR; + b->yy_ch_buf[1] = YY_END_OF_BUFFER_CHAR; + + b->yy_buf_pos = &b->yy_ch_buf[0]; + + b->yy_at_bol = 1; + b->yy_buffer_status = YY_BUFFER_NEW; + + if ( b == YY_CURRENT_BUFFER ) + guidoar_load_buffer_state( ); +} + +/** Pushes the new state onto the stack. The new state becomes + * the current state. This function will allocate the stack + * if necessary. + * @param new_buffer The new state. + * + */ +void guidoarpush_buffer_state (YY_BUFFER_STATE new_buffer ) +{ + if (new_buffer == NULL) + return; + + guidoarensure_buffer_stack(); + + /* This block is copied from guidoar_switch_to_buffer. */ + if ( YY_CURRENT_BUFFER ) + { + /* Flush out information for old buffer. */ + *(yy_c_buf_p) = (yy_hold_char); + YY_CURRENT_BUFFER_LVALUE->yy_buf_pos = (yy_c_buf_p); + YY_CURRENT_BUFFER_LVALUE->yy_n_chars = (yy_n_chars); + } + + /* Only push if top exists. Otherwise, replace top. */ + if (YY_CURRENT_BUFFER) + (yy_buffer_stack_top)++; + YY_CURRENT_BUFFER_LVALUE = new_buffer; + + /* copied from guidoar_switch_to_buffer. */ + guidoar_load_buffer_state( ); + (yy_did_buffer_switch_on_eof) = 1; +} + +/** Removes and deletes the top of the stack, if present. + * The next element becomes the new top. + * + */ +void guidoarpop_buffer_state (void) +{ + if (!YY_CURRENT_BUFFER) + return; + + guidoar_delete_buffer(YY_CURRENT_BUFFER ); + YY_CURRENT_BUFFER_LVALUE = NULL; + if ((yy_buffer_stack_top) > 0) + --(yy_buffer_stack_top); + + if (YY_CURRENT_BUFFER) { + guidoar_load_buffer_state( ); + (yy_did_buffer_switch_on_eof) = 1; + } +} + +/* Allocates the stack if it does not exist. + * Guarantees space for at least one push. + */ +static void guidoarensure_buffer_stack (void) +{ + yy_size_t num_to_alloc; + + if (!(yy_buffer_stack)) { + + /* First allocation is just for 2 elements, since we don't know if this + * scanner will even need a stack. We use 2 instead of 1 to avoid an + * immediate realloc on the next call. + */ + num_to_alloc = 1; + (yy_buffer_stack) = (struct yy_buffer_state**)guidoaralloc + (num_to_alloc * sizeof(struct yy_buffer_state*) + ); + if ( ! (yy_buffer_stack) ) + YY_FATAL_ERROR( "out of dynamic memory in guidoarensure_buffer_stack()" ); + + memset((yy_buffer_stack), 0, num_to_alloc * sizeof(struct yy_buffer_state*)); + + (yy_buffer_stack_max) = num_to_alloc; + (yy_buffer_stack_top) = 0; + return; + } + + if ((yy_buffer_stack_top) >= ((yy_buffer_stack_max)) - 1){ + + /* Increase the buffer to prepare for a possible push. */ + int grow_size = 8 /* arbitrary grow size */; + + num_to_alloc = (yy_buffer_stack_max) + grow_size; + (yy_buffer_stack) = (struct yy_buffer_state**)guidoarrealloc + ((yy_buffer_stack), + num_to_alloc * sizeof(struct yy_buffer_state*) + ); + if ( ! (yy_buffer_stack) ) + YY_FATAL_ERROR( "out of dynamic memory in guidoarensure_buffer_stack()" ); + + /* zero only the new slots.*/ + memset((yy_buffer_stack) + (yy_buffer_stack_max), 0, grow_size * sizeof(struct yy_buffer_state*)); + (yy_buffer_stack_max) = num_to_alloc; + } +} + +/** Setup the input buffer state to scan directly from a user-specified character buffer. + * @param base the character buffer + * @param size the size in bytes of the character buffer + * + * @return the newly allocated buffer state object. + */ +YY_BUFFER_STATE guidoar_scan_buffer (char * base, yy_size_t size ) +{ + YY_BUFFER_STATE b; + + if ( size < 2 || + base[size-2] != YY_END_OF_BUFFER_CHAR || + base[size-1] != YY_END_OF_BUFFER_CHAR ) + /* They forgot to leave room for the EOB's. */ + return 0; + + b = (YY_BUFFER_STATE) guidoaralloc(sizeof( struct yy_buffer_state ) ); + if ( ! b ) + YY_FATAL_ERROR( "out of dynamic memory in guidoar_scan_buffer()" ); + + b->yy_buf_size = size - 2; /* "- 2" to take care of EOB's */ + b->yy_buf_pos = b->yy_ch_buf = base; + b->yy_is_our_buffer = 0; + b->yy_input_file = 0; + b->yy_n_chars = b->yy_buf_size; + b->yy_is_interactive = 0; + b->yy_at_bol = 1; + b->yy_fill_buffer = 0; + b->yy_buffer_status = YY_BUFFER_NEW; + + guidoar_switch_to_buffer(b ); + + return b; +} + +/** Setup the input buffer state to scan a string. The next call to guidoarlex() will + * scan from a @e copy of @a str. + * @param yystr a NUL-terminated string to scan + * + * @return the newly allocated buffer state object. + * @note If you want to scan bytes that may contain NUL values, then use + * guidoar_scan_bytes() instead. + */ +YY_BUFFER_STATE guidoar_scan_string (yyconst char * yystr ) +{ + + return guidoar_scan_bytes(yystr,strlen(yystr) ); +} + +/** Setup the input buffer state to scan the given bytes. The next call to guidoarlex() will + * scan from a @e copy of @a bytes. + * @param bytes the byte buffer to scan + * @param len the number of bytes in the buffer pointed to by @a bytes. + * + * @return the newly allocated buffer state object. + */ +YY_BUFFER_STATE guidoar_scan_bytes (yyconst char * yybytes, yy_size_t _yybytes_len ) +{ + YY_BUFFER_STATE b; + char *buf; + yy_size_t n, i; + + /* Get memory for full buffer, including space for trailing EOB's. */ + n = _yybytes_len + 2; + buf = (char *) guidoaralloc(n ); + if ( ! buf ) + YY_FATAL_ERROR( "out of dynamic memory in guidoar_scan_bytes()" ); + + for ( i = 0; i < _yybytes_len; ++i ) + buf[i] = yybytes[i]; + + buf[_yybytes_len] = buf[_yybytes_len+1] = YY_END_OF_BUFFER_CHAR; + + b = guidoar_scan_buffer(buf,n ); + if ( ! b ) + YY_FATAL_ERROR( "bad buffer in guidoar_scan_bytes()" ); + + /* It's okay to grow etc. this buffer, and we should throw it + * away when we're done. + */ + b->yy_is_our_buffer = 1; + + return b; +} + +#ifndef YY_EXIT_FAILURE +#define YY_EXIT_FAILURE 2 +#endif + +static void yy_fatal_error (yyconst char* msg ) +{ + (void) fprintf( stderr, "%s\n", msg ); + exit( YY_EXIT_FAILURE ); +} + +/* Redefine yyless() so it works in section 3 code. */ + +#undef yyless +#define yyless(n) \ + do \ + { \ + /* Undo effects of setting up guidoartext. */ \ + int yyless_macro_arg = (n); \ + YY_LESS_LINENO(yyless_macro_arg);\ + guidoartext[guidoarleng] = (yy_hold_char); \ + (yy_c_buf_p) = guidoartext + yyless_macro_arg; \ + (yy_hold_char) = *(yy_c_buf_p); \ + *(yy_c_buf_p) = '\0'; \ + guidoarleng = yyless_macro_arg; \ + } \ + while ( 0 ) + +/* Accessor methods (get/set functions) to struct members. */ + +/** Get the current line number. + * + */ +int guidoarget_lineno (void) +{ + + return guidoarlineno; +} + +/** Get the input stream. + * + */ +FILE *guidoarget_in (void) +{ + return guidoarin; +} + +/** Get the output stream. + * + */ +FILE *guidoarget_out (void) +{ + return guidoarout; +} + +/** Get the length of the current token. + * + */ +yy_size_t guidoarget_leng (void) +{ + return guidoarleng; +} + +/** Get the current token. + * + */ + +char *guidoarget_text (void) +{ + return guidoartext; +} + +/** Set the current line number. + * @param line_number + * + */ +void guidoarset_lineno (int line_number ) +{ + + guidoarlineno = line_number; +} + +/** Set the input stream. This does not discard the current + * input buffer. + * @param in_str A readable stream. + * + * @see guidoar_switch_to_buffer + */ +void guidoarset_in (FILE * in_str ) +{ + guidoarin = in_str ; +} + +void guidoarset_out (FILE * out_str ) +{ + guidoarout = out_str ; +} + +int guidoarget_debug (void) +{ + return guidoar_flex_debug; +} + +void guidoarset_debug (int bdebug ) +{ + guidoar_flex_debug = bdebug ; +} + +static int yy_init_globals (void) +{ + /* Initialization is the same as for the non-reentrant scanner. + * This function is called from guidoarlex_destroy(), so don't allocate here. + */ + + /* We do not touch guidoarlineno unless the option is enabled. */ + guidoarlineno = 1; + + (yy_buffer_stack) = 0; + (yy_buffer_stack_top) = 0; + (yy_buffer_stack_max) = 0; + (yy_c_buf_p) = (char *) 0; + (yy_init) = 0; + (yy_start) = 0; + +/* Defined in main.c */ +#ifdef YY_STDINIT + guidoarin = stdin; + guidoarout = stdout; +#else + guidoarin = (FILE *) 0; + guidoarout = (FILE *) 0; +#endif + + /* For future reference: Set errno on error, since we are called by + * guidoarlex_init() + */ + return 0; +} + +/* guidoarlex_destroy is for both reentrant and non-reentrant scanners. */ +int guidoarlex_destroy (void) +{ + + /* Pop the buffer stack, destroying each element. */ + while(YY_CURRENT_BUFFER){ + guidoar_delete_buffer(YY_CURRENT_BUFFER ); + YY_CURRENT_BUFFER_LVALUE = NULL; + guidoarpop_buffer_state(); + } + + /* Destroy the stack itself. */ + guidoarfree((yy_buffer_stack) ); + (yy_buffer_stack) = NULL; + + /* Reset the globals. This is important in a non-reentrant scanner so the next time + * guidoarlex() is called, initialization will occur. */ + yy_init_globals( ); + + return 0; +} + +/* + * Internal utility routines. + */ + +#ifndef yytext_ptr +static void yy_flex_strncpy (char* s1, yyconst char * s2, int n ) +{ + register int i; + for ( i = 0; i < n; ++i ) + s1[i] = s2[i]; +} +#endif + +#ifdef YY_NEED_STRLEN +static int yy_flex_strlen (yyconst char * s ) +{ + register int n; + for ( n = 0; s[n]; ++n ) + ; + + return n; +} +#endif + +void *guidoaralloc (yy_size_t size ) +{ + return (void *) malloc( size ); +} + +void *guidoarrealloc (void * ptr, yy_size_t size ) +{ + /* The cast to (char *) in the following accommodates both + * implementations that use char* generic pointers, and those + * that use void* generic pointers. It works with the latter + * because both ANSI C and C++ allow castless assignment from + * any pointer type to void*, and deal with argument conversions + * as though doing an assignment. + */ + return (void *) realloc( (char *) ptr, size ); +} + +void guidoarfree (void * ptr ) +{ + free( (char *) ptr ); /* see guidoarrealloc() for (char *) cast */ +} + +#define YYTABLES_NAME "yytables" + +#line 117 "guido.l" diff --git a/guidoar-dev/src/parser/guidoparse.c++ b/guidoar-dev/src/parser/guidoparse.c++ new file mode 100644 index 000000000..0db2c04fc --- /dev/null +++ b/guidoar-dev/src/parser/guidoparse.c++ @@ -0,0 +1,2145 @@ +/* A Bison parser, made by GNU Bison 2.3. */ + +/* Skeleton implementation for Bison's Yacc-like parsers in C + + Copyright (C) 1984, 1989, 1990, 2000, 2001, 2002, 2003, 2004, 2005, 2006 + Free Software Foundation, Inc. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2, or (at your option) + any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin Street, Fifth Floor, + Boston, MA 02110-1301, USA. */ + +/* As a special exception, you may create a larger work that contains + part or all of the Bison parser skeleton and distribute that work + under terms of your choice, so long as that work isn't itself a + parser generator using the skeleton or a modified version thereof + as a parser skeleton. Alternatively, if you modify or redistribute + the parser skeleton itself, you may (at your option) remove this + special exception, which will cause the skeleton and the resulting + Bison output files to be licensed under the GNU General Public + License without this special exception. + + This special exception was added by the Free Software Foundation in + version 2.2 of Bison. */ + +/* C LALR(1) parser skeleton written by Richard Stallman, by + simplifying the original so-called "semantic" parser. */ + +/* All symbols defined below should begin with yy or YY, to avoid + infringing on user name space. This should be done even for local + variables, as they might otherwise be expanded by user macros. + There are some unavoidable exceptions within include files to + define necessary library symbols; they are noted "INFRINGES ON + USER NAME SPACE" below. */ + +/* Identify Bison output. */ +#define YYBISON 1 + +/* Bison version. */ +#define YYBISON_VERSION "2.3" + +/* Skeleton name. */ +#define YYSKELETON_NAME "yacc.c" + +/* Pure parsers. */ +#define YYPURE 0 + +/* Using locations. */ +#define YYLSP_NEEDED 0 + +/* Substitute the variable and function names. */ +#define yyparse guidoarparse +#define yylex guidoarlex +#define yyerror guidoarerror +#define yylval guidoarlval +#define yychar guidoarchar +#define yydebug guidoardebug +#define yynerrs guidoarnerrs + + +/* Tokens. */ +#ifndef YYTOKENTYPE +# define YYTOKENTYPE + /* Put the tokens into the symbol table, so that GDB and other debuggers + know about them. */ + enum yytokentype { + NUMBER = 258, + PNUMBER = 259, + NNUMBER = 260, + FLOAT = 261, + STARTCHORD = 262, + ENDCHORD = 263, + STARTSEQ = 264, + ENDSEQ = 265, + STARTPARAM = 266, + ENDPARAM = 267, + STARTRANGE = 268, + ENDRANGE = 269, + SEP = 270, + IDSEP = 271, + BAR = 272, + TAGNAME = 273, + ID = 274, + DIATONIC = 275, + CHROMATIC = 276, + SOLFEGE = 277, + EMPTY = 278, + REST = 279, + DOT = 280, + DDOT = 281, + SHARP = 282, + FLAT = 283, + MLS = 284, + SEC = 285, + UNIT = 286, + MULT = 287, + DIV = 288, + EQUAL = 289, + STRING = 290, + EXTRA = 291 + }; +#endif +/* Tokens. */ +#define NUMBER 258 +#define PNUMBER 259 +#define NNUMBER 260 +#define FLOAT 261 +#define STARTCHORD 262 +#define ENDCHORD 263 +#define STARTSEQ 264 +#define ENDSEQ 265 +#define STARTPARAM 266 +#define ENDPARAM 267 +#define STARTRANGE 268 +#define ENDRANGE 269 +#define SEP 270 +#define IDSEP 271 +#define BAR 272 +#define TAGNAME 273 +#define ID 274 +#define DIATONIC 275 +#define CHROMATIC 276 +#define SOLFEGE 277 +#define EMPTY 278 +#define REST 279 +#define DOT 280 +#define DDOT 281 +#define SHARP 282 +#define FLAT 283 +#define MLS 284 +#define SEC 285 +#define UNIT 286 +#define MULT 287 +#define DIV 288 +#define EQUAL 289 +#define STRING 290 +#define EXTRA 291 + + + + +/* Copy the first part of user declarations. */ +#line 1 "guido.y" + + +#include +#include +#include +#include + +#include "guidoelement.h" +#include "gmnreader.h" +#include "guidorational.h" + +#include "guidoparse.h++" +#include "guidolex.c++" + +int guidoarerror(const char*s); +int guidoarwrap() { return(1); } + +extern guido::gmnreader* gReader; + +static void vadd (std::vector* v1, std::vector* v2) +{ + for (std::vector::iterator i = v2->begin(); i != v2->end(); i++) + v1->push_back(*i); +} + +//#define parseDebug + +#ifdef parseDebug +#define debug(msg) cout << msg << endl; +#define vdebug(msg,v) cout << msg << " " << v << endl; +#else +#define debug(msg) +#define vdebug(msg, v) +#endif + +#define addElt(to,elt) (to)->push(*elt); delete elt + +using namespace std; + +namespace guido +{ + + + +/* Enabling traces. */ +#ifndef YYDEBUG +# define YYDEBUG 0 +#endif + +/* Enabling verbose error messages. */ +#ifdef YYERROR_VERBOSE +# undef YYERROR_VERBOSE +# define YYERROR_VERBOSE 1 +#else +# define YYERROR_VERBOSE 0 +#endif + +/* Enabling the token table. */ +#ifndef YYTOKEN_TABLE +# define YYTOKEN_TABLE 0 +#endif + +#if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED +typedef union YYSTYPE +#line 48 "guido.y" +{ + long int num; + float real; + const char* token; + std::string* str; + char c; + guido::Sguidoelement * elt; + guido::Sguidoattribute* attr; + std::vector* velt; + std::vector* vattr; + guido::rational * r; +} +/* Line 193 of yacc.c. */ +#line 233 "guidoparse.c++" + YYSTYPE; +# define yystype YYSTYPE /* obsolescent; will be withdrawn */ +# define YYSTYPE_IS_DECLARED 1 +# define YYSTYPE_IS_TRIVIAL 1 +#endif + + + +/* Copy the second part of user declarations. */ + + +/* Line 216 of yacc.c. */ +#line 246 "guidoparse.c++" + +#ifdef short +# undef short +#endif + +#ifdef YYTYPE_UINT8 +typedef YYTYPE_UINT8 yytype_uint8; +#else +typedef unsigned char yytype_uint8; +#endif + +#ifdef YYTYPE_INT8 +typedef YYTYPE_INT8 yytype_int8; +#elif (defined __STDC__ || defined __C99__FUNC__ \ + || defined __cplusplus || defined _MSC_VER) +typedef signed char yytype_int8; +#else +typedef short int yytype_int8; +#endif + +#ifdef YYTYPE_UINT16 +typedef YYTYPE_UINT16 yytype_uint16; +#else +typedef unsigned short int yytype_uint16; +#endif + +#ifdef YYTYPE_INT16 +typedef YYTYPE_INT16 yytype_int16; +#else +typedef short int yytype_int16; +#endif + +#ifndef YYSIZE_T +# ifdef __SIZE_TYPE__ +# define YYSIZE_T __SIZE_TYPE__ +# elif defined size_t +# define YYSIZE_T size_t +# elif ! defined YYSIZE_T && (defined __STDC__ || defined __C99__FUNC__ \ + || defined __cplusplus || defined _MSC_VER) +# include /* INFRINGES ON USER NAME SPACE */ +# define YYSIZE_T size_t +# else +# define YYSIZE_T unsigned int +# endif +#endif + +#define YYSIZE_MAXIMUM ((YYSIZE_T) -1) + +#ifndef YY_ +# if defined YYENABLE_NLS && YYENABLE_NLS +# if ENABLE_NLS +# include /* INFRINGES ON USER NAME SPACE */ +# define YY_(msgid) dgettext ("bison-runtime", msgid) +# endif +# endif +# ifndef YY_ +# define YY_(msgid) msgid +# endif +#endif + +/* Suppress unused-variable warnings by "using" E. */ +#if ! defined lint || defined __GNUC__ +# define YYUSE(e) ((void) (e)) +#else +# define YYUSE(e) /* empty */ +#endif + +/* Identity function, used to suppress warnings about constant conditions. */ +#ifndef lint +# define YYID(n) (n) +#else +#if (defined __STDC__ || defined __C99__FUNC__ \ + || defined __cplusplus || defined _MSC_VER) +static int +YYID (int i) +#else +static int +YYID (i) + int i; +#endif +{ + return i; +} +#endif + +#if ! defined yyoverflow || YYERROR_VERBOSE + +/* The parser invokes alloca or malloc; define the necessary symbols. */ + +# ifdef YYSTACK_USE_ALLOCA +# if YYSTACK_USE_ALLOCA +# ifdef __GNUC__ +# define YYSTACK_ALLOC __builtin_alloca +# elif defined __BUILTIN_VA_ARG_INCR +# include /* INFRINGES ON USER NAME SPACE */ +# elif defined _AIX +# define YYSTACK_ALLOC __alloca +# elif defined _MSC_VER +# include /* INFRINGES ON USER NAME SPACE */ +# define alloca _alloca +# else +# define YYSTACK_ALLOC alloca +# if ! defined _ALLOCA_H && ! defined _STDLIB_H && (defined __STDC__ || defined __C99__FUNC__ \ + || defined __cplusplus || defined _MSC_VER) +# include /* INFRINGES ON USER NAME SPACE */ +# ifndef _STDLIB_H +# define _STDLIB_H 1 +# endif +# endif +# endif +# endif +# endif + +# ifdef YYSTACK_ALLOC + /* Pacify GCC's `empty if-body' warning. */ +# define YYSTACK_FREE(Ptr) do { /* empty */; } while (YYID (0)) +# ifndef YYSTACK_ALLOC_MAXIMUM + /* The OS might guarantee only one guard page at the bottom of the stack, + and a page size can be as small as 4096 bytes. So we cannot safely + invoke alloca (N) if N exceeds 4096. Use a slightly smaller number + to allow for a few compiler-allocated temporary stack slots. */ +# define YYSTACK_ALLOC_MAXIMUM 4032 /* reasonable circa 2006 */ +# endif +# else +# define YYSTACK_ALLOC YYMALLOC +# define YYSTACK_FREE YYFREE +# ifndef YYSTACK_ALLOC_MAXIMUM +# define YYSTACK_ALLOC_MAXIMUM YYSIZE_MAXIMUM +# endif +# if (defined __cplusplus && ! defined _STDLIB_H \ + && ! ((defined YYMALLOC || defined malloc) \ + && (defined YYFREE || defined free))) +# include /* INFRINGES ON USER NAME SPACE */ +# ifndef _STDLIB_H +# define _STDLIB_H 1 +# endif +# endif +# ifndef YYMALLOC +# define YYMALLOC malloc +# if ! defined malloc && ! defined _STDLIB_H && (defined __STDC__ || defined __C99__FUNC__ \ + || defined __cplusplus || defined _MSC_VER) +void *malloc (YYSIZE_T); /* INFRINGES ON USER NAME SPACE */ +# endif +# endif +# ifndef YYFREE +# define YYFREE free +# if ! defined free && ! defined _STDLIB_H && (defined __STDC__ || defined __C99__FUNC__ \ + || defined __cplusplus || defined _MSC_VER) +void free (void *); /* INFRINGES ON USER NAME SPACE */ +# endif +# endif +# endif +#endif /* ! defined yyoverflow || YYERROR_VERBOSE */ + + +#if (! defined yyoverflow \ + && (! defined __cplusplus \ + || (defined YYSTYPE_IS_TRIVIAL && YYSTYPE_IS_TRIVIAL))) + +/* A type that is properly aligned for any stack member. */ +union yyalloc +{ + yytype_int16 yyss; + YYSTYPE yyvs; + }; + +/* The size of the maximum gap between one aligned stack and the next. */ +# define YYSTACK_GAP_MAXIMUM (sizeof (union yyalloc) - 1) + +/* The size of an array large to enough to hold all stacks, each with + N elements. */ +# define YYSTACK_BYTES(N) \ + ((N) * (sizeof (yytype_int16) + sizeof (YYSTYPE)) \ + + YYSTACK_GAP_MAXIMUM) + +/* Copy COUNT objects from FROM to TO. The source and destination do + not overlap. */ +# ifndef YYCOPY +# if defined __GNUC__ && 1 < __GNUC__ +# define YYCOPY(To, From, Count) \ + __builtin_memcpy (To, From, (Count) * sizeof (*(From))) +# else +# define YYCOPY(To, From, Count) \ + do \ + { \ + YYSIZE_T yyi; \ + for (yyi = 0; yyi < (Count); yyi++) \ + (To)[yyi] = (From)[yyi]; \ + } \ + while (YYID (0)) +# endif +# endif + +/* Relocate STACK from its old location to the new one. The + local variables YYSIZE and YYSTACKSIZE give the old and new number of + elements in the stack, and YYPTR gives the new location of the + stack. Advance YYPTR to a properly aligned location for the next + stack. */ +# define YYSTACK_RELOCATE(Stack) \ + do \ + { \ + YYSIZE_T yynewbytes; \ + YYCOPY (&yyptr->Stack, Stack, yysize); \ + Stack = &yyptr->Stack; \ + yynewbytes = yystacksize * sizeof (*Stack) + YYSTACK_GAP_MAXIMUM; \ + yyptr += yynewbytes / sizeof (*yyptr); \ + } \ + while (YYID (0)) + +#endif + +/* YYFINAL -- State number of the termination state. */ +#define YYFINAL 10 +/* YYLAST -- Last index in YYTABLE. */ +#define YYLAST 107 + +/* YYNTOKENS -- Number of terminals. */ +#define YYNTOKENS 37 +/* YYNNTS -- Number of nonterminals. */ +#define YYNNTS 36 +/* YYNRULES -- Number of rules. */ +#define YYNRULES 76 +/* YYNRULES -- Number of states. */ +#define YYNSTATES 112 + +/* YYTRANSLATE(YYLEX) -- Bison symbol number corresponding to YYLEX. */ +#define YYUNDEFTOK 2 +#define YYMAXUTOK 291 + +#define YYTRANSLATE(YYX) \ + ((unsigned int) (YYX) <= YYMAXUTOK ? yytranslate[YYX] : YYUNDEFTOK) + +/* YYTRANSLATE[YYLEX] -- Bison symbol number corresponding to YYLEX. */ +static const yytype_uint8 yytranslate[] = +{ + 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 1, 2, 3, 4, + 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, + 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, + 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, + 35, 36 +}; + +#if YYDEBUG +/* YYPRHS[YYN] -- Index of the first RHS symbol of rule number YYN in + YYRHS. */ +static const yytype_uint8 yyprhs[] = +{ + 0, 0, 3, 5, 8, 12, 14, 16, 20, 24, + 25, 28, 31, 34, 36, 38, 40, 45, 50, 52, + 54, 58, 60, 62, 64, 67, 70, 72, 74, 76, + 80, 82, 86, 90, 92, 96, 98, 101, 104, 108, + 110, 112, 117, 119, 122, 124, 126, 130, 137, 142, + 148, 150, 155, 157, 159, 161, 163, 165, 168, 170, + 172, 173, 175, 176, 181, 184, 187, 188, 190, 192, + 194, 196, 198, 200, 202, 204, 206 +}; + +/* YYRHS -- A `-1'-separated list of the rules' RHS. */ +static const yytype_int8 yyrhs[] = +{ + 38, 0, -1, 39, -1, 7, 8, -1, 7, 40, + 8, -1, 41, -1, 41, -1, 40, 15, 41, -1, + 9, 42, 10, -1, -1, 42, 57, -1, 42, 43, + -1, 42, 51, -1, 44, -1, 45, -1, 47, -1, + 47, 11, 50, 12, -1, 44, 13, 42, 14, -1, + 18, -1, 46, -1, 46, 16, 3, -1, 17, -1, + 72, -1, 71, -1, 72, 31, -1, 71, 31, -1, + 35, -1, 67, -1, 48, -1, 67, 34, 48, -1, + 49, -1, 50, 15, 49, -1, 7, 52, 8, -1, + 53, -1, 52, 15, 53, -1, 54, -1, 56, 54, + -1, 54, 56, -1, 56, 54, 56, -1, 57, -1, + 55, -1, 44, 13, 53, 14, -1, 44, -1, 56, + 44, -1, 59, -1, 58, -1, 24, 65, 66, -1, + 24, 11, 3, 12, 65, 66, -1, 60, 64, 65, + 66, -1, 60, 62, 64, 65, 66, -1, 61, -1, + 61, 11, 3, 12, -1, 20, -1, 21, -1, 22, + -1, 23, -1, 63, -1, 62, 63, -1, 27, -1, + 28, -1, -1, 72, -1, -1, 32, 68, 33, 68, + -1, 32, 68, -1, 33, 68, -1, -1, 25, -1, + 26, -1, 19, -1, 3, -1, 4, -1, 5, -1, + 6, -1, 68, -1, 69, -1, 70, -1 +}; + +/* YYRLINE[YYN] -- source line where rule number YYN was defined. */ +static const yytype_uint16 yyrline[] = +{ + 0, 122, 122, 126, 127, 128, 131, 132, 135, 138, + 139, 140, 141, 146, 147, 150, 151, 154, 157, 160, + 161, 162, 165, 166, 167, 168, 169, 170, 173, 174, + 177, 178, 185, 188, 189, 192, 193, 194, 195, 198, + 199, 202, 205, 206, 212, 213, 216, 217, 220, 221, + 224, 225, 228, 229, 230, 231, 234, 235, 238, 239, + 242, 243, 246, 247, 248, 249, 252, 253, 254, 260, + 262, 264, 266, 268, 270, 271, 272 +}; +#endif + +#if YYDEBUG || YYERROR_VERBOSE || YYTOKEN_TABLE +/* YYTNAME[SYMBOL-NUM] -- String name of the symbol SYMBOL-NUM. + First, the terminals, then, starting at YYNTOKENS, nonterminals. */ +static const char *const yytname[] = +{ + "$end", "error", "$undefined", "NUMBER", "PNUMBER", "NNUMBER", "FLOAT", + "STARTCHORD", "ENDCHORD", "STARTSEQ", "ENDSEQ", "STARTPARAM", "ENDPARAM", + "STARTRANGE", "ENDRANGE", "SEP", "IDSEP", "BAR", "TAGNAME", "ID", + "DIATONIC", "CHROMATIC", "SOLFEGE", "EMPTY", "REST", "DOT", "DDOT", + "SHARP", "FLAT", "MLS", "SEC", "UNIT", "MULT", "DIV", "EQUAL", "STRING", + "EXTRA", "$accept", "start", "score", "voicelist", "voice", "symbols", + "tag", "positiontag", "rangetag", "tagname", "tagid", "tagarg", + "tagparam", "tagparams", "chord", "chordsymbols", "tagchordsymbol", + "chordsymbol", "rangechordtag", "taglist", "music", "rest", "note", + "noteid", "notename", "accidentals", "accidental", "octave", "duration", + "dots", "id", "number", "pnumber", "nnumber", "floatn", "signednumber", 0 +}; +#endif + +# ifdef YYPRINT +/* YYTOKNUM[YYLEX-NUM] -- Internal token number corresponding to + token YYLEX-NUM. */ +static const yytype_uint16 yytoknum[] = +{ + 0, 256, 257, 258, 259, 260, 261, 262, 263, 264, + 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, + 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, + 285, 286, 287, 288, 289, 290, 291 +}; +# endif + +/* YYR1[YYN] -- Symbol number of symbol that rule YYN derives. */ +static const yytype_uint8 yyr1[] = +{ + 0, 37, 38, 39, 39, 39, 40, 40, 41, 42, + 42, 42, 42, 43, 43, 44, 44, 45, 46, 47, + 47, 47, 48, 48, 48, 48, 48, 48, 49, 49, + 50, 50, 51, 52, 52, 53, 53, 53, 53, 54, + 54, 55, 56, 56, 57, 57, 58, 58, 59, 59, + 60, 60, 61, 61, 61, 61, 62, 62, 63, 63, + 64, 64, 65, 65, 65, 65, 66, 66, 66, 67, + 68, 69, 70, 71, 72, 72, 72 +}; + +/* YYR2[YYN] -- Number of symbols composing right hand side of rule YYN. */ +static const yytype_uint8 yyr2[] = +{ + 0, 2, 1, 2, 3, 1, 1, 3, 3, 0, + 2, 2, 2, 1, 1, 1, 4, 4, 1, 1, + 3, 1, 1, 1, 2, 2, 1, 1, 1, 3, + 1, 3, 3, 1, 3, 1, 2, 2, 3, 1, + 1, 4, 1, 2, 1, 1, 3, 6, 4, 5, + 1, 4, 1, 1, 1, 1, 1, 2, 1, 1, + 0, 1, 0, 4, 2, 2, 0, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1 +}; + +/* YYDEFACT[STATE-NAME] -- Default rule to reduce with in state + STATE-NUM when YYTABLE doesn't specify something else to do. Zero + means the default is an error. */ +static const yytype_uint8 yydefact[] = +{ + 0, 0, 9, 0, 2, 5, 3, 0, 6, 0, + 1, 4, 0, 0, 8, 21, 18, 52, 53, 54, + 55, 62, 11, 13, 14, 19, 15, 12, 10, 45, + 44, 60, 50, 7, 42, 0, 33, 35, 40, 0, + 39, 0, 0, 0, 66, 9, 0, 0, 70, 71, + 72, 58, 59, 60, 56, 62, 74, 75, 76, 61, + 0, 0, 32, 0, 42, 37, 43, 36, 0, 64, + 65, 67, 68, 46, 0, 20, 73, 69, 26, 28, + 30, 0, 27, 23, 22, 57, 62, 66, 0, 0, + 34, 43, 38, 62, 0, 17, 16, 0, 0, 25, + 24, 66, 48, 51, 41, 66, 63, 31, 29, 27, + 49, 47 +}; + +/* YYDEFGOTO[NTERM-NUM]. */ +static const yytype_int8 yydefgoto[] = +{ + -1, 3, 4, 7, 5, 9, 22, 34, 24, 25, + 26, 79, 80, 81, 27, 35, 36, 37, 38, 39, + 40, 29, 30, 31, 32, 53, 54, 55, 44, 73, + 82, 56, 57, 58, 83, 84 +}; + +/* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing + STATE-NUM. */ +#define YYPACT_NINF -68 +static const yytype_int8 yypact[] = +{ + 52, 5, -68, 63, -68, -68, -68, 7, -68, 50, + -68, -68, 10, 58, -68, -68, -68, -68, -68, -68, + -68, -1, -68, 16, -68, 61, 73, -68, -68, -68, + -68, 13, 76, -68, 56, 40, -68, 8, -68, 58, + -68, 85, 86, 86, 19, -68, 87, 2, -68, -68, + -68, -68, -68, 13, -68, 53, -68, -68, -68, -68, + 88, 58, -68, 58, -68, 8, 56, 8, 80, 60, + -68, -68, -68, -68, 29, -68, -68, -68, -68, -68, + -68, 12, 62, 64, 66, -68, 53, 19, 82, 84, + -68, -68, 8, 53, 86, -68, -68, 2, 2, -68, + -68, 19, -68, -68, -68, 19, -68, -68, -68, -68, + -68, -68 +}; + +/* YYPGOTO[NTERM-NUM]. */ +static const yytype_int8 yypgoto[] = +{ + -68, -68, -68, -68, 11, 54, -68, -9, -68, -68, + -68, 3, 6, -68, -68, -68, 1, 65, -68, -28, + -8, -68, -68, -68, -68, -68, 47, 49, -51, -67, + 9, -40, -68, -68, -68, -20 +}; + +/* YYTABLE[YYPACT[STATE-NUM]]. What to do in state STATE-NUM. If + positive, shift that token. If negative, reduce the rule which + number is the opposite. If zero, do what YYDEFACT says. + If YYTABLE_NINF, syntax error. */ +#define YYTABLE_NINF -1 +static const yytype_uint8 yytable[] = +{ + 23, 28, 69, 70, 87, 48, 49, 50, 76, 65, + 41, 59, 8, 6, 2, 11, 48, 49, 50, 2, + 102, 77, 12, 33, 96, 15, 16, 97, 64, 45, + 66, 42, 43, 59, 110, 101, 13, 78, 111, 92, + 51, 52, 105, 95, 71, 72, 15, 16, 62, 17, + 18, 19, 20, 21, 106, 63, 91, 13, 64, 1, + 14, 2, 89, 10, 90, 23, 28, 15, 16, 61, + 17, 18, 19, 20, 21, 15, 16, 46, 17, 18, + 19, 20, 21, 91, 47, 42, 43, 60, 68, 48, + 75, 88, 93, 94, 103, 99, 98, 100, 104, 74, + 85, 108, 86, 107, 67, 0, 0, 109 +}; + +static const yytype_int8 yycheck[] = +{ + 9, 9, 42, 43, 55, 3, 4, 5, 6, 37, + 11, 31, 1, 8, 9, 8, 3, 4, 5, 9, + 87, 19, 15, 12, 12, 17, 18, 15, 37, 13, + 39, 32, 33, 53, 101, 86, 7, 35, 105, 67, + 27, 28, 93, 14, 25, 26, 17, 18, 8, 20, + 21, 22, 23, 24, 94, 15, 65, 7, 67, 7, + 10, 9, 61, 0, 63, 74, 74, 17, 18, 13, + 20, 21, 22, 23, 24, 17, 18, 16, 20, 21, + 22, 23, 24, 92, 11, 32, 33, 11, 3, 3, + 3, 3, 12, 33, 12, 31, 34, 31, 14, 45, + 53, 98, 53, 97, 39, -1, -1, 98 +}; + +/* YYSTOS[STATE-NUM] -- The (internal number of the) accessing + symbol of state STATE-NUM. */ +static const yytype_uint8 yystos[] = +{ + 0, 7, 9, 38, 39, 41, 8, 40, 41, 42, + 0, 8, 15, 7, 10, 17, 18, 20, 21, 22, + 23, 24, 43, 44, 45, 46, 47, 51, 57, 58, + 59, 60, 61, 41, 44, 52, 53, 54, 55, 56, + 57, 11, 32, 33, 65, 13, 16, 11, 3, 4, + 5, 27, 28, 62, 63, 64, 68, 69, 70, 72, + 11, 13, 8, 15, 44, 56, 44, 54, 3, 68, + 68, 25, 26, 66, 42, 3, 6, 19, 35, 48, + 49, 50, 67, 71, 72, 63, 64, 65, 3, 53, + 53, 44, 56, 12, 33, 14, 12, 15, 34, 31, + 31, 65, 66, 12, 14, 65, 68, 49, 48, 67, + 66, 66 +}; + +#define yyerrok (yyerrstatus = 0) +#define yyclearin (yychar = YYEMPTY) +#define YYEMPTY (-2) +#define YYEOF 0 + +#define YYACCEPT goto yyacceptlab +#define YYABORT goto yyabortlab +#define YYERROR goto yyerrorlab + + +/* Like YYERROR except do call yyerror. This remains here temporarily + to ease the transition to the new meaning of YYERROR, for GCC. + Once GCC version 2 has supplanted version 1, this can go. */ + +#define YYFAIL goto yyerrlab + +#define YYRECOVERING() (!!yyerrstatus) + +#define YYBACKUP(Token, Value) \ +do \ + if (yychar == YYEMPTY && yylen == 1) \ + { \ + yychar = (Token); \ + yylval = (Value); \ + yytoken = YYTRANSLATE (yychar); \ + YYPOPSTACK (1); \ + goto yybackup; \ + } \ + else \ + { \ + yyerror (YY_("syntax error: cannot back up")); \ + YYERROR; \ + } \ +while (YYID (0)) + + +#define YYTERROR 1 +#define YYERRCODE 256 + + +/* YYLLOC_DEFAULT -- Set CURRENT to span from RHS[1] to RHS[N]. + If N is 0, then set CURRENT to the empty location which ends + the previous symbol: RHS[0] (always defined). */ + +#define YYRHSLOC(Rhs, K) ((Rhs)[K]) +#ifndef YYLLOC_DEFAULT +# define YYLLOC_DEFAULT(Current, Rhs, N) \ + do \ + if (YYID (N)) \ + { \ + (Current).first_line = YYRHSLOC (Rhs, 1).first_line; \ + (Current).first_column = YYRHSLOC (Rhs, 1).first_column; \ + (Current).last_line = YYRHSLOC (Rhs, N).last_line; \ + (Current).last_column = YYRHSLOC (Rhs, N).last_column; \ + } \ + else \ + { \ + (Current).first_line = (Current).last_line = \ + YYRHSLOC (Rhs, 0).last_line; \ + (Current).first_column = (Current).last_column = \ + YYRHSLOC (Rhs, 0).last_column; \ + } \ + while (YYID (0)) +#endif + + +/* YY_LOCATION_PRINT -- Print the location on the stream. + This macro was not mandated originally: define only if we know + we won't break user code: when these are the locations we know. */ + +#ifndef YY_LOCATION_PRINT +# if defined YYLTYPE_IS_TRIVIAL && YYLTYPE_IS_TRIVIAL +# define YY_LOCATION_PRINT(File, Loc) \ + fprintf (File, "%d.%d-%d.%d", \ + (Loc).first_line, (Loc).first_column, \ + (Loc).last_line, (Loc).last_column) +# else +# define YY_LOCATION_PRINT(File, Loc) ((void) 0) +# endif +#endif + + +/* YYLEX -- calling `yylex' with the right arguments. */ + +#ifdef YYLEX_PARAM +# define YYLEX yylex (YYLEX_PARAM) +#else +# define YYLEX yylex () +#endif + +/* Enable debugging if requested. */ +#if YYDEBUG + +# ifndef YYFPRINTF +# include /* INFRINGES ON USER NAME SPACE */ +# define YYFPRINTF fprintf +# endif + +# define YYDPRINTF(Args) \ +do { \ + if (yydebug) \ + YYFPRINTF Args; \ +} while (YYID (0)) + +# define YY_SYMBOL_PRINT(Title, Type, Value, Location) \ +do { \ + if (yydebug) \ + { \ + YYFPRINTF (stderr, "%s ", Title); \ + yy_symbol_print (stderr, \ + Type, Value); \ + YYFPRINTF (stderr, "\n"); \ + } \ +} while (YYID (0)) + + +/*--------------------------------. +| Print this symbol on YYOUTPUT. | +`--------------------------------*/ + +/*ARGSUSED*/ +#if (defined __STDC__ || defined __C99__FUNC__ \ + || defined __cplusplus || defined _MSC_VER) +static void +yy_symbol_value_print (FILE *yyoutput, int yytype, YYSTYPE const * const yyvaluep) +#else +static void +yy_symbol_value_print (yyoutput, yytype, yyvaluep) + FILE *yyoutput; + int yytype; + YYSTYPE const * const yyvaluep; +#endif +{ + if (!yyvaluep) + return; +# ifdef YYPRINT + if (yytype < YYNTOKENS) + YYPRINT (yyoutput, yytoknum[yytype], *yyvaluep); +# else + YYUSE (yyoutput); +# endif + switch (yytype) + { + default: + break; + } +} + + +/*--------------------------------. +| Print this symbol on YYOUTPUT. | +`--------------------------------*/ + +#if (defined __STDC__ || defined __C99__FUNC__ \ + || defined __cplusplus || defined _MSC_VER) +static void +yy_symbol_print (FILE *yyoutput, int yytype, YYSTYPE const * const yyvaluep) +#else +static void +yy_symbol_print (yyoutput, yytype, yyvaluep) + FILE *yyoutput; + int yytype; + YYSTYPE const * const yyvaluep; +#endif +{ + if (yytype < YYNTOKENS) + YYFPRINTF (yyoutput, "token %s (", yytname[yytype]); + else + YYFPRINTF (yyoutput, "nterm %s (", yytname[yytype]); + + yy_symbol_value_print (yyoutput, yytype, yyvaluep); + YYFPRINTF (yyoutput, ")"); +} + +/*------------------------------------------------------------------. +| yy_stack_print -- Print the state stack from its BOTTOM up to its | +| TOP (included). | +`------------------------------------------------------------------*/ + +#if (defined __STDC__ || defined __C99__FUNC__ \ + || defined __cplusplus || defined _MSC_VER) +static void +yy_stack_print (yytype_int16 *bottom, yytype_int16 *top) +#else +static void +yy_stack_print (bottom, top) + yytype_int16 *bottom; + yytype_int16 *top; +#endif +{ + YYFPRINTF (stderr, "Stack now"); + for (; bottom <= top; ++bottom) + YYFPRINTF (stderr, " %d", *bottom); + YYFPRINTF (stderr, "\n"); +} + +# define YY_STACK_PRINT(Bottom, Top) \ +do { \ + if (yydebug) \ + yy_stack_print ((Bottom), (Top)); \ +} while (YYID (0)) + + +/*------------------------------------------------. +| Report that the YYRULE is going to be reduced. | +`------------------------------------------------*/ + +#if (defined __STDC__ || defined __C99__FUNC__ \ + || defined __cplusplus || defined _MSC_VER) +static void +yy_reduce_print (YYSTYPE *yyvsp, int yyrule) +#else +static void +yy_reduce_print (yyvsp, yyrule) + YYSTYPE *yyvsp; + int yyrule; +#endif +{ + int yynrhs = yyr2[yyrule]; + int yyi; + unsigned long int yylno = yyrline[yyrule]; + YYFPRINTF (stderr, "Reducing stack by rule %d (line %lu):\n", + yyrule - 1, yylno); + /* The symbols being reduced. */ + for (yyi = 0; yyi < yynrhs; yyi++) + { + fprintf (stderr, " $%d = ", yyi + 1); + yy_symbol_print (stderr, yyrhs[yyprhs[yyrule] + yyi], + &(yyvsp[(yyi + 1) - (yynrhs)]) + ); + fprintf (stderr, "\n"); + } +} + +# define YY_REDUCE_PRINT(Rule) \ +do { \ + if (yydebug) \ + yy_reduce_print (yyvsp, Rule); \ +} while (YYID (0)) + +/* Nonzero means print parse trace. It is left uninitialized so that + multiple parsers can coexist. */ +int yydebug; +#else /* !YYDEBUG */ +# define YYDPRINTF(Args) +# define YY_SYMBOL_PRINT(Title, Type, Value, Location) +# define YY_STACK_PRINT(Bottom, Top) +# define YY_REDUCE_PRINT(Rule) +#endif /* !YYDEBUG */ + + +/* YYINITDEPTH -- initial size of the parser's stacks. */ +#ifndef YYINITDEPTH +# define YYINITDEPTH 200 +#endif + +/* YYMAXDEPTH -- maximum size the stacks can grow to (effective only + if the built-in stack extension method is used). + + Do not make this value too large; the results are undefined if + YYSTACK_ALLOC_MAXIMUM < YYSTACK_BYTES (YYMAXDEPTH) + evaluated with infinite-precision integer arithmetic. */ + +#ifndef YYMAXDEPTH +# define YYMAXDEPTH 10000 +#endif + + + +#if YYERROR_VERBOSE + +# ifndef yystrlen +# if defined __GLIBC__ && defined _STRING_H +# define yystrlen strlen +# else +/* Return the length of YYSTR. */ +#if (defined __STDC__ || defined __C99__FUNC__ \ + || defined __cplusplus || defined _MSC_VER) +static YYSIZE_T +yystrlen (const char *yystr) +#else +static YYSIZE_T +yystrlen (yystr) + const char *yystr; +#endif +{ + YYSIZE_T yylen; + for (yylen = 0; yystr[yylen]; yylen++) + continue; + return yylen; +} +# endif +# endif + +# ifndef yystpcpy +# if defined __GLIBC__ && defined _STRING_H && defined _GNU_SOURCE +# define yystpcpy stpcpy +# else +/* Copy YYSRC to YYDEST, returning the address of the terminating '\0' in + YYDEST. */ +#if (defined __STDC__ || defined __C99__FUNC__ \ + || defined __cplusplus || defined _MSC_VER) +static char * +yystpcpy (char *yydest, const char *yysrc) +#else +static char * +yystpcpy (yydest, yysrc) + char *yydest; + const char *yysrc; +#endif +{ + char *yyd = yydest; + const char *yys = yysrc; + + while ((*yyd++ = *yys++) != '\0') + continue; + + return yyd - 1; +} +# endif +# endif + +# ifndef yytnamerr +/* Copy to YYRES the contents of YYSTR after stripping away unnecessary + quotes and backslashes, so that it's suitable for yyerror. The + heuristic is that double-quoting is unnecessary unless the string + contains an apostrophe, a comma, or backslash (other than + backslash-backslash). YYSTR is taken from yytname. If YYRES is + null, do not copy; instead, return the length of what the result + would have been. */ +static YYSIZE_T +yytnamerr (char *yyres, const char *yystr) +{ + if (*yystr == '"') + { + YYSIZE_T yyn = 0; + char const *yyp = yystr; + + for (;;) + switch (*++yyp) + { + case '\'': + case ',': + goto do_not_strip_quotes; + + case '\\': + if (*++yyp != '\\') + goto do_not_strip_quotes; + /* Fall through. */ + default: + if (yyres) + yyres[yyn] = *yyp; + yyn++; + break; + + case '"': + if (yyres) + yyres[yyn] = '\0'; + return yyn; + } + do_not_strip_quotes: ; + } + + if (! yyres) + return yystrlen (yystr); + + return yystpcpy (yyres, yystr) - yyres; +} +# endif + +/* Copy into YYRESULT an error message about the unexpected token + YYCHAR while in state YYSTATE. Return the number of bytes copied, + including the terminating null byte. If YYRESULT is null, do not + copy anything; just return the number of bytes that would be + copied. As a special case, return 0 if an ordinary "syntax error" + message will do. Return YYSIZE_MAXIMUM if overflow occurs during + size calculation. */ +static YYSIZE_T +yysyntax_error (char *yyresult, int yystate, int yychar) +{ + int yyn = yypact[yystate]; + + if (! (YYPACT_NINF < yyn && yyn <= YYLAST)) + return 0; + else + { + int yytype = YYTRANSLATE (yychar); + YYSIZE_T yysize0 = yytnamerr (0, yytname[yytype]); + YYSIZE_T yysize = yysize0; + YYSIZE_T yysize1; + int yysize_overflow = 0; + enum { YYERROR_VERBOSE_ARGS_MAXIMUM = 5 }; + char const *yyarg[YYERROR_VERBOSE_ARGS_MAXIMUM]; + int yyx; + +# if 0 + /* This is so xgettext sees the translatable formats that are + constructed on the fly. */ + YY_("syntax error, unexpected %s"); + YY_("syntax error, unexpected %s, expecting %s"); + YY_("syntax error, unexpected %s, expecting %s or %s"); + YY_("syntax error, unexpected %s, expecting %s or %s or %s"); + YY_("syntax error, unexpected %s, expecting %s or %s or %s or %s"); +# endif + char *yyfmt; + char const *yyf; + static char const yyunexpected[] = "syntax error, unexpected %s"; + static char const yyexpecting[] = ", expecting %s"; + static char const yyor[] = " or %s"; + char yyformat[sizeof yyunexpected + + sizeof yyexpecting - 1 + + ((YYERROR_VERBOSE_ARGS_MAXIMUM - 2) + * (sizeof yyor - 1))]; + char const *yyprefix = yyexpecting; + + /* Start YYX at -YYN if negative to avoid negative indexes in + YYCHECK. */ + int yyxbegin = yyn < 0 ? -yyn : 0; + + /* Stay within bounds of both yycheck and yytname. */ + int yychecklim = YYLAST - yyn + 1; + int yyxend = yychecklim < YYNTOKENS ? yychecklim : YYNTOKENS; + int yycount = 1; + + yyarg[0] = yytname[yytype]; + yyfmt = yystpcpy (yyformat, yyunexpected); + + for (yyx = yyxbegin; yyx < yyxend; ++yyx) + if (yycheck[yyx + yyn] == yyx && yyx != YYTERROR) + { + if (yycount == YYERROR_VERBOSE_ARGS_MAXIMUM) + { + yycount = 1; + yysize = yysize0; + yyformat[sizeof yyunexpected - 1] = '\0'; + break; + } + yyarg[yycount++] = yytname[yyx]; + yysize1 = yysize + yytnamerr (0, yytname[yyx]); + yysize_overflow |= (yysize1 < yysize); + yysize = yysize1; + yyfmt = yystpcpy (yyfmt, yyprefix); + yyprefix = yyor; + } + + yyf = YY_(yyformat); + yysize1 = yysize + yystrlen (yyf); + yysize_overflow |= (yysize1 < yysize); + yysize = yysize1; + + if (yysize_overflow) + return YYSIZE_MAXIMUM; + + if (yyresult) + { + /* Avoid sprintf, as that infringes on the user's name space. + Don't have undefined behavior even if the translation + produced a string with the wrong number of "%s"s. */ + char *yyp = yyresult; + int yyi = 0; + while ((*yyp = *yyf) != '\0') + { + if (*yyp == '%' && yyf[1] == 's' && yyi < yycount) + { + yyp += yytnamerr (yyp, yyarg[yyi++]); + yyf += 2; + } + else + { + yyp++; + yyf++; + } + } + } + return yysize; + } +} +#endif /* YYERROR_VERBOSE */ + + +/*-----------------------------------------------. +| Release the memory associated to this symbol. | +`-----------------------------------------------*/ + +/*ARGSUSED*/ +#if (defined __STDC__ || defined __C99__FUNC__ \ + || defined __cplusplus || defined _MSC_VER) +static void +yydestruct (const char *yymsg, int yytype, YYSTYPE *yyvaluep) +#else +static void +yydestruct (yymsg, yytype, yyvaluep) + const char *yymsg; + int yytype; + YYSTYPE *yyvaluep; +#endif +{ + YYUSE (yyvaluep); + + if (!yymsg) + yymsg = "Deleting"; + YY_SYMBOL_PRINT (yymsg, yytype, yyvaluep, yylocationp); + + switch (yytype) + { + + default: + break; + } +} + + +/* Prevent warnings from -Wmissing-prototypes. */ + +#ifdef YYPARSE_PARAM +#if defined __STDC__ || defined __cplusplus +int yyparse (void *YYPARSE_PARAM); +#else +int yyparse (); +#endif +#else /* ! YYPARSE_PARAM */ +#if defined __STDC__ || defined __cplusplus +int yyparse (void); +#else +int yyparse (); +#endif +#endif /* ! YYPARSE_PARAM */ + + + +/* The look-ahead symbol. */ +int yychar; + +/* The semantic value of the look-ahead symbol. */ +YYSTYPE yylval; + +/* Number of syntax errors so far. */ +int yynerrs; + + + +/*----------. +| yyparse. | +`----------*/ + +#ifdef YYPARSE_PARAM +#if (defined __STDC__ || defined __C99__FUNC__ \ + || defined __cplusplus || defined _MSC_VER) +int +yyparse (void *YYPARSE_PARAM) +#else +int +yyparse (YYPARSE_PARAM) + void *YYPARSE_PARAM; +#endif +#else /* ! YYPARSE_PARAM */ +#if (defined __STDC__ || defined __C99__FUNC__ \ + || defined __cplusplus || defined _MSC_VER) +int +yyparse (void) +#else +int +yyparse () + +#endif +#endif +{ + + int yystate; + int yyn; + int yyresult; + /* Number of tokens to shift before error messages enabled. */ + int yyerrstatus; + /* Look-ahead token as an internal (translated) token number. */ + int yytoken = 0; +#if YYERROR_VERBOSE + /* Buffer for error messages, and its allocated size. */ + char yymsgbuf[128]; + char *yymsg = yymsgbuf; + YYSIZE_T yymsg_alloc = sizeof yymsgbuf; +#endif + + /* Three stacks and their tools: + `yyss': related to states, + `yyvs': related to semantic values, + `yyls': related to locations. + + Refer to the stacks thru separate pointers, to allow yyoverflow + to reallocate them elsewhere. */ + + /* The state stack. */ + yytype_int16 yyssa[YYINITDEPTH]; + yytype_int16 *yyss = yyssa; + yytype_int16 *yyssp; + + /* The semantic value stack. */ + YYSTYPE yyvsa[YYINITDEPTH]; + YYSTYPE *yyvs = yyvsa; + YYSTYPE *yyvsp; + + + +#define YYPOPSTACK(N) (yyvsp -= (N), yyssp -= (N)) + + YYSIZE_T yystacksize = YYINITDEPTH; + + /* The variables used to return semantic value and location from the + action routines. */ + YYSTYPE yyval; + + + /* The number of symbols on the RHS of the reduced rule. + Keep to zero when no symbol should be popped. */ + int yylen = 0; + + YYDPRINTF ((stderr, "Starting parse\n")); + + yystate = 0; + yyerrstatus = 0; + yynerrs = 0; + yychar = YYEMPTY; /* Cause a token to be read. */ + + /* Initialize stack pointers. + Waste one element of value and location stack + so that they stay on the same level as the state stack. + The wasted elements are never initialized. */ + + yyssp = yyss; + yyvsp = yyvs; + + goto yysetstate; + +/*------------------------------------------------------------. +| yynewstate -- Push a new state, which is found in yystate. | +`------------------------------------------------------------*/ + yynewstate: + /* In all cases, when you get here, the value and location stacks + have just been pushed. So pushing a state here evens the stacks. */ + yyssp++; + + yysetstate: + *yyssp = yystate; + + if (yyss + yystacksize - 1 <= yyssp) + { + /* Get the current used size of the three stacks, in elements. */ + YYSIZE_T yysize = yyssp - yyss + 1; + +#ifdef yyoverflow + { + /* Give user a chance to reallocate the stack. Use copies of + these so that the &'s don't force the real ones into + memory. */ + YYSTYPE *yyvs1 = yyvs; + yytype_int16 *yyss1 = yyss; + + + /* Each stack pointer address is followed by the size of the + data in use in that stack, in bytes. This used to be a + conditional around just the two extra args, but that might + be undefined if yyoverflow is a macro. */ + yyoverflow (YY_("memory exhausted"), + &yyss1, yysize * sizeof (*yyssp), + &yyvs1, yysize * sizeof (*yyvsp), + + &yystacksize); + + yyss = yyss1; + yyvs = yyvs1; + } +#else /* no yyoverflow */ +# ifndef YYSTACK_RELOCATE + goto yyexhaustedlab; +# else + /* Extend the stack our own way. */ + if (YYMAXDEPTH <= yystacksize) + goto yyexhaustedlab; + yystacksize *= 2; + if (YYMAXDEPTH < yystacksize) + yystacksize = YYMAXDEPTH; + + { + yytype_int16 *yyss1 = yyss; + union yyalloc *yyptr = + (union yyalloc *) YYSTACK_ALLOC (YYSTACK_BYTES (yystacksize)); + if (! yyptr) + goto yyexhaustedlab; + YYSTACK_RELOCATE (yyss); + YYSTACK_RELOCATE (yyvs); + +# undef YYSTACK_RELOCATE + if (yyss1 != yyssa) + YYSTACK_FREE (yyss1); + } +# endif +#endif /* no yyoverflow */ + + yyssp = yyss + yysize - 1; + yyvsp = yyvs + yysize - 1; + + + YYDPRINTF ((stderr, "Stack size increased to %lu\n", + (unsigned long int) yystacksize)); + + if (yyss + yystacksize - 1 <= yyssp) + YYABORT; + } + + YYDPRINTF ((stderr, "Entering state %d\n", yystate)); + + goto yybackup; + +/*-----------. +| yybackup. | +`-----------*/ +yybackup: + + /* Do appropriate processing given the current state. Read a + look-ahead token if we need one and don't already have one. */ + + /* First try to decide what to do without reference to look-ahead token. */ + yyn = yypact[yystate]; + if (yyn == YYPACT_NINF) + goto yydefault; + + /* Not known => get a look-ahead token if don't already have one. */ + + /* YYCHAR is either YYEMPTY or YYEOF or a valid look-ahead symbol. */ + if (yychar == YYEMPTY) + { + YYDPRINTF ((stderr, "Reading a token: ")); + yychar = YYLEX; + } + + if (yychar <= YYEOF) + { + yychar = yytoken = YYEOF; + YYDPRINTF ((stderr, "Now at end of input.\n")); + } + else + { + yytoken = YYTRANSLATE (yychar); + YY_SYMBOL_PRINT ("Next token is", yytoken, &yylval, &yylloc); + } + + /* If the proper action on seeing token YYTOKEN is to reduce or to + detect an error, take that action. */ + yyn += yytoken; + if (yyn < 0 || YYLAST < yyn || yycheck[yyn] != yytoken) + goto yydefault; + yyn = yytable[yyn]; + if (yyn <= 0) + { + if (yyn == 0 || yyn == YYTABLE_NINF) + goto yyerrlab; + yyn = -yyn; + goto yyreduce; + } + + if (yyn == YYFINAL) + YYACCEPT; + + /* Count tokens shifted since error; after three, turn off error + status. */ + if (yyerrstatus) + yyerrstatus--; + + /* Shift the look-ahead token. */ + YY_SYMBOL_PRINT ("Shifting", yytoken, &yylval, &yylloc); + + /* Discard the shifted token unless it is eof. */ + if (yychar != YYEOF) + yychar = YYEMPTY; + + yystate = yyn; + *++yyvsp = yylval; + + goto yynewstate; + + +/*-----------------------------------------------------------. +| yydefault -- do the default action for the current state. | +`-----------------------------------------------------------*/ +yydefault: + yyn = yydefact[yystate]; + if (yyn == 0) + goto yyerrlab; + goto yyreduce; + + +/*-----------------------------. +| yyreduce -- Do a reduction. | +`-----------------------------*/ +yyreduce: + /* yyn is the number of a rule to reduce with. */ + yylen = yyr2[yyn]; + + /* If YYLEN is nonzero, implement the default value of the action: + `$$ = $1'. + + Otherwise, the following line sets YYVAL to garbage. + This behavior is undocumented and Bison + users should not rely upon it. Assigning to YYVAL + unconditionally makes the parser a bit smaller, and it avoids a + GCC warning that YYVAL may be used uninitialized. */ + yyval = yyvsp[1-yylen]; + + + YY_REDUCE_PRINT (yyn); + switch (yyn) + { + case 2: +#line 122 "guido.y" + {delete (yyvsp[(1) - (1)].elt);;} + break; + + case 3: +#line 126 "guido.y" + { debug("new score"); (yyval.elt) = gReader->newScore(); ;} + break; + + case 4: +#line 127 "guido.y" + { debug("score voicelist"); (yyval.elt) = gReader->newScore(); addElt(*(yyval.elt), (yyvsp[(2) - (3)].velt)); ;} + break; + + case 5: +#line 128 "guido.y" + { debug("score voice"); (yyval.elt) = gReader->newScore(); addElt(*(yyval.elt), (yyvsp[(1) - (1)].elt)); ;} + break; + + case 6: +#line 131 "guido.y" + { debug("new voicelist"); (yyval.velt) = new vector; (yyval.velt)->push_back (*(yyvsp[(1) - (1)].elt)); delete (yyvsp[(1) - (1)].elt); ;} + break; + + case 7: +#line 132 "guido.y" + { debug("add voicelist"); (yyval.velt) = (yyvsp[(1) - (3)].velt); (yyval.velt)->push_back (*(yyvsp[(3) - (3)].elt)); delete (yyvsp[(3) - (3)].elt); ;} + break; + + case 8: +#line 135 "guido.y" + { debug("new voice"); (yyval.elt) = gReader->newVoice(); addElt(*(yyval.elt), (yyvsp[(2) - (3)].velt)); ;} + break; + + case 9: +#line 138 "guido.y" + { debug("new symbols"); (yyval.velt) = new vector; ;} + break; + + case 10: +#line 139 "guido.y" + { debug("add music"); (yyval.velt) = (yyvsp[(1) - (2)].velt); (yyval.velt)->push_back(*(yyvsp[(2) - (2)].elt)); delete (yyvsp[(2) - (2)].elt); ;} + break; + + case 11: +#line 140 "guido.y" + { debug("add tag"); (yyval.velt) = (yyvsp[(1) - (2)].velt); (yyval.velt)->push_back(*(yyvsp[(2) - (2)].elt)); delete (yyvsp[(2) - (2)].elt); ;} + break; + + case 12: +#line 141 "guido.y" + { debug("add chord"); (yyval.velt) = (yyvsp[(1) - (2)].velt); (yyval.velt)->push_back(*(yyvsp[(2) - (2)].elt)); delete (yyvsp[(2) - (2)].elt); ;} + break; + + case 13: +#line 146 "guido.y" + { debug("position tag "); (yyval.elt) = (yyvsp[(1) - (1)].elt); ;} + break; + + case 14: +#line 147 "guido.y" + { debug("range tag "); (yyval.elt) = (yyvsp[(1) - (1)].elt); ;} + break; + + case 15: +#line 150 "guido.y" + { debug("new position tag "); (yyval.elt) = (yyvsp[(1) - (1)].elt); ;} + break; + + case 16: +#line 151 "guido.y" + { debug("new tag + params"); (yyval.elt) = (yyvsp[(1) - (4)].elt); (*(yyvsp[(1) - (4)].elt))->add (*(yyvsp[(3) - (4)].vattr)); delete (yyvsp[(3) - (4)].vattr); ;} + break; + + case 17: +#line 154 "guido.y" + { debug("new range tag "); (yyval.elt) = (yyvsp[(1) - (4)].elt); (*(yyvsp[(1) - (4)].elt))->push (*(yyvsp[(3) - (4)].velt)); delete (yyvsp[(3) - (4)].velt); ;} + break; + + case 18: +#line 157 "guido.y" + { debug("tag name "); (yyval.str) = new string(guidoartext); ;} + break; + + case 19: +#line 160 "guido.y" + { vdebug("new tag", *(yyvsp[(1) - (1)].str)); (yyval.elt) = gReader->newTag(*(yyvsp[(1) - (1)].str), 0); delete (yyvsp[(1) - (1)].str); if (!(yyval.elt)) { guidoarerror("unknown tag"); YYERROR;} ;} + break; + + case 20: +#line 161 "guido.y" + { debug("new tag::id"); (yyval.elt) = gReader->newTag(*(yyvsp[(1) - (3)].str), (yyvsp[(2) - (3)].c)); delete (yyvsp[(1) - (3)].str); if (!(yyval.elt)) { guidoarerror("unknown tag"); YYERROR;} ;} + break; + + case 21: +#line 162 "guido.y" + { debug("new bar"); (yyval.elt) = gReader->newTag("bar", 0); ;} + break; + + case 22: +#line 165 "guido.y" + { debug("new signednumber arg"); (yyval.attr) = gReader->newAttribute((yyvsp[(1) - (1)].num)); ;} + break; + + case 23: +#line 166 "guido.y" + { debug("new FLOAT arg"); (yyval.attr) = gReader->newAttribute((yyvsp[(1) - (1)].real)); ;} + break; + + case 24: +#line 167 "guido.y" + { debug("new signednumber UNIT arg"); (yyval.attr) = gReader->newAttribute((yyvsp[(1) - (2)].num)); (*(yyval.attr))->setUnit(guidoartext); ;} + break; + + case 25: +#line 168 "guido.y" + { debug("new FLOAT UNIT arg"); (yyval.attr) = gReader->newAttribute((yyvsp[(1) - (2)].real)); (*(yyval.attr))->setUnit(guidoartext); ;} + break; + + case 26: +#line 169 "guido.y" + { debug("new STRING arg"); (yyval.attr) = gReader->newAttribute(guidoartext, true); ;} + break; + + case 27: +#line 170 "guido.y" + { debug("new ID arg"); (yyval.attr) = gReader->newAttribute(*(yyvsp[(1) - (1)].str), false); delete (yyvsp[(1) - (1)].str); ;} + break; + + case 28: +#line 173 "guido.y" + { (yyval.attr) = (yyvsp[(1) - (1)].attr); ;} + break; + + case 29: +#line 174 "guido.y" + { (yyval.attr) = (yyvsp[(3) - (3)].attr); (*(yyvsp[(3) - (3)].attr))->setName(*(yyvsp[(1) - (3)].str)); delete (yyvsp[(1) - (3)].str); ;} + break; + + case 30: +#line 177 "guido.y" + { (yyval.vattr) = new vector; (yyval.vattr)->push_back(*(yyvsp[(1) - (1)].attr)); delete (yyvsp[(1) - (1)].attr); ;} + break; + + case 31: +#line 178 "guido.y" + { (yyval.vattr) = (yyvsp[(1) - (3)].vattr); (yyval.vattr)->push_back(*(yyvsp[(3) - (3)].attr)); delete (yyvsp[(3) - (3)].attr); ;} + break; + + case 32: +#line 185 "guido.y" + { debug("new chord"); (yyval.elt) = gReader->newChord(); (*(yyval.elt))->push(*(yyvsp[(2) - (3)].velt)); delete (yyvsp[(2) - (3)].velt); ;} + break; + + case 33: +#line 188 "guido.y" + { (yyval.velt) = new vector; vadd((yyval.velt), (yyvsp[(1) - (1)].velt)); delete (yyvsp[(1) - (1)].velt); ;} + break; + + case 34: +#line 189 "guido.y" + { (yyval.velt) = (yyvsp[(1) - (3)].velt); vadd((yyval.velt), (yyvsp[(3) - (3)].velt)); delete (yyvsp[(3) - (3)].velt); ;} + break; + + case 35: +#line 192 "guido.y" + { (yyval.velt) = (yyvsp[(1) - (1)].velt);;} + break; + + case 36: +#line 193 "guido.y" + { (yyval.velt) = (yyvsp[(1) - (2)].velt); vadd((yyval.velt), (yyvsp[(2) - (2)].velt)); delete (yyvsp[(2) - (2)].velt); ;} + break; + + case 37: +#line 194 "guido.y" + { (yyval.velt) = (yyvsp[(1) - (2)].velt); vadd((yyval.velt), (yyvsp[(2) - (2)].velt)); delete (yyvsp[(2) - (2)].velt); ;} + break; + + case 38: +#line 195 "guido.y" + { (yyval.velt) = (yyvsp[(1) - (3)].velt); vadd((yyval.velt), (yyvsp[(2) - (3)].velt)); delete (yyvsp[(2) - (3)].velt); vadd((yyval.velt), (yyvsp[(3) - (3)].velt)); delete (yyvsp[(3) - (3)].velt); ;} + break; + + case 39: +#line 198 "guido.y" + { (yyval.velt) = new vector; (yyval.velt)->push_back(*(yyvsp[(1) - (1)].elt)); delete (yyvsp[(1) - (1)].elt); ;} + break; + + case 40: +#line 199 "guido.y" + { (yyval.velt) = new vector; (yyval.velt)->push_back(*(yyvsp[(1) - (1)].elt)); delete (yyvsp[(1) - (1)].elt); ;} + break; + + case 41: +#line 202 "guido.y" + { debug("range chord tag"); (yyval.elt) = (yyvsp[(1) - (4)].elt); (*(yyval.elt))->push(*(yyvsp[(3) - (4)].velt)); delete (yyvsp[(3) - (4)].velt); ;} + break; + + case 42: +#line 205 "guido.y" + { debug("new taglist 1"); (yyval.velt) = new vector; (yyval.velt)->push_back(*(yyvsp[(1) - (1)].elt)); delete (yyvsp[(1) - (1)].elt); ;} + break; + + case 43: +#line 206 "guido.y" + { debug("new taglist 2"); (yyval.velt) = (yyvsp[(1) - (2)].velt); (yyval.velt)->push_back(*(yyvsp[(2) - (2)].elt)); delete (yyvsp[(2) - (2)].elt); ;} + break; + + case 44: +#line 212 "guido.y" + { (yyval.elt) = (yyvsp[(1) - (1)].elt); ;} + break; + + case 45: +#line 213 "guido.y" + { (yyval.elt) = (yyvsp[(1) - (1)].elt); ;} + break; + + case 46: +#line 216 "guido.y" + { debug("new rest 1"); (yyval.elt) = gReader->newRest((yyvsp[(2) - (3)].r), (yyvsp[(3) - (3)].num)); delete (yyvsp[(2) - (3)].r); ;} + break; + + case 47: +#line 217 "guido.y" + { debug("new rest 2"); (yyval.elt) = gReader->newRest((yyvsp[(5) - (6)].r), (yyvsp[(6) - (6)].num)); delete (yyvsp[(5) - (6)].r); ;} + break; + + case 48: +#line 220 "guido.y" + { debug("new note v1"); (yyval.elt) = gReader->newNote(*(yyvsp[(1) - (4)].str), 0, (yyvsp[(2) - (4)].num), (yyvsp[(3) - (4)].r), (yyvsp[(4) - (4)].num)); delete (yyvsp[(1) - (4)].str); delete (yyvsp[(3) - (4)].r); ;} + break; + + case 49: +#line 221 "guido.y" + { debug("new note v2"); (yyval.elt) = gReader->newNote(*(yyvsp[(1) - (5)].str), (yyvsp[(2) - (5)].num), (yyvsp[(3) - (5)].num), (yyvsp[(4) - (5)].r), (yyvsp[(5) - (5)].num)); delete (yyvsp[(1) - (5)].str); delete (yyvsp[(4) - (5)].r); ;} + break; + + case 50: +#line 224 "guido.y" + { vdebug("notename", *(yyvsp[(1) - (1)].str)); (yyval.str) = (yyvsp[(1) - (1)].str); ;} + break; + + case 51: +#line 225 "guido.y" + { (yyval.str) = (yyvsp[(1) - (4)].str); ;} + break; + + case 52: +#line 228 "guido.y" + { debug("new diatonic note"); (yyval.str) = new string(guidoartext); ;} + break; + + case 53: +#line 229 "guido.y" + { debug("new chromatic note"); (yyval.str) = new string(guidoartext); ;} + break; + + case 54: +#line 230 "guido.y" + { debug("new solfege note"); (yyval.str) = new string(guidoartext); ;} + break; + + case 55: +#line 231 "guido.y" + { debug("new empty note"); (yyval.str) = new string(guidoartext); ;} + break; + + case 56: +#line 234 "guido.y" + { debug("accidental"); (yyval.num) = (yyvsp[(1) - (1)].num); ;} + break; + + case 57: +#line 235 "guido.y" + { debug("accidentals"); (yyval.num) = (yyvsp[(1) - (2)].num) + (yyvsp[(2) - (2)].num); ;} + break; + + case 58: +#line 238 "guido.y" + { debug("sharp"); (yyval.num) = 1; ;} + break; + + case 59: +#line 239 "guido.y" + { debug("flat"); (yyval.num) = -1; ;} + break; + + case 60: +#line 242 "guido.y" + { debug("no octave"); (yyval.num) = -1000; ;} + break; + + case 61: +#line 243 "guido.y" + { debug("octave"); (yyval.num) = (yyvsp[(1) - (1)].num); ;} + break; + + case 62: +#line 246 "guido.y" + { debug("implicit duration"); (yyval.r) = new rational(-1, 1); ;} + break; + + case 63: +#line 247 "guido.y" + { debug("duration ./."); (yyval.r) = new rational((yyvsp[(2) - (4)].num), (yyvsp[(4) - (4)].num)); ;} + break; + + case 64: +#line 248 "guido.y" + { debug("duration *"); (yyval.r) = new rational((yyvsp[(2) - (2)].num), 1); ;} + break; + + case 65: +#line 249 "guido.y" + { debug("duration /"); (yyval.r) = new rational(1, (yyvsp[(2) - (2)].num)); ;} + break; + + case 66: +#line 252 "guido.y" + { debug("dots 0"); (yyval.num) = 0; ;} + break; + + case 67: +#line 253 "guido.y" + { debug("dots 1"); (yyval.num) = 1; ;} + break; + + case 68: +#line 254 "guido.y" + { debug("dots 2"); (yyval.num) = 2; ;} + break; + + case 69: +#line 260 "guido.y" + { (yyval.str) = new string(guidoartext); ;} + break; + + case 70: +#line 262 "guido.y" + { vdebug("NUMBER", guidoartext); (yyval.num) = atol(guidoartext); ;} + break; + + case 71: +#line 264 "guido.y" + { vdebug("NUMBER", guidoartext); (yyval.num) = atol(guidoartext); ;} + break; + + case 72: +#line 266 "guido.y" + { vdebug("NUMBER", guidoartext); (yyval.num) = atol(guidoartext); ;} + break; + + case 73: +#line 268 "guido.y" + { (yyval.real) = atof(guidoartext); ;} + break; + + case 74: +#line 270 "guido.y" + { (yyval.num) = (yyvsp[(1) - (1)].num); ;} + break; + + case 75: +#line 271 "guido.y" + { (yyval.num) = (yyvsp[(1) - (1)].num); ;} + break; + + case 76: +#line 272 "guido.y" + { (yyval.num) = (yyvsp[(1) - (1)].num); ;} + break; + + +/* Line 1267 of yacc.c. */ +#line 1923 "guidoparse.c++" + default: break; + } + YY_SYMBOL_PRINT ("-> $$ =", yyr1[yyn], &yyval, &yyloc); + + YYPOPSTACK (yylen); + yylen = 0; + YY_STACK_PRINT (yyss, yyssp); + + *++yyvsp = yyval; + + + /* Now `shift' the result of the reduction. Determine what state + that goes to, based on the state we popped back to and the rule + number reduced by. */ + + yyn = yyr1[yyn]; + + yystate = yypgoto[yyn - YYNTOKENS] + *yyssp; + if (0 <= yystate && yystate <= YYLAST && yycheck[yystate] == *yyssp) + yystate = yytable[yystate]; + else + yystate = yydefgoto[yyn - YYNTOKENS]; + + goto yynewstate; + + +/*------------------------------------. +| yyerrlab -- here on detecting error | +`------------------------------------*/ +yyerrlab: + /* If not already recovering from an error, report this error. */ + if (!yyerrstatus) + { + ++yynerrs; +#if ! YYERROR_VERBOSE + yyerror (YY_("syntax error")); +#else + { + YYSIZE_T yysize = yysyntax_error (0, yystate, yychar); + if (yymsg_alloc < yysize && yymsg_alloc < YYSTACK_ALLOC_MAXIMUM) + { + YYSIZE_T yyalloc = 2 * yysize; + if (! (yysize <= yyalloc && yyalloc <= YYSTACK_ALLOC_MAXIMUM)) + yyalloc = YYSTACK_ALLOC_MAXIMUM; + if (yymsg != yymsgbuf) + YYSTACK_FREE (yymsg); + yymsg = (char *) YYSTACK_ALLOC (yyalloc); + if (yymsg) + yymsg_alloc = yyalloc; + else + { + yymsg = yymsgbuf; + yymsg_alloc = sizeof yymsgbuf; + } + } + + if (0 < yysize && yysize <= yymsg_alloc) + { + (void) yysyntax_error (yymsg, yystate, yychar); + yyerror (yymsg); + } + else + { + yyerror (YY_("syntax error")); + if (yysize != 0) + goto yyexhaustedlab; + } + } +#endif + } + + + + if (yyerrstatus == 3) + { + /* If just tried and failed to reuse look-ahead token after an + error, discard it. */ + + if (yychar <= YYEOF) + { + /* Return failure if at end of input. */ + if (yychar == YYEOF) + YYABORT; + } + else + { + yydestruct ("Error: discarding", + yytoken, &yylval); + yychar = YYEMPTY; + } + } + + /* Else will try to reuse look-ahead token after shifting the error + token. */ + goto yyerrlab1; + + +/*---------------------------------------------------. +| yyerrorlab -- error raised explicitly by YYERROR. | +`---------------------------------------------------*/ +yyerrorlab: + + /* Pacify compilers like GCC when the user code never invokes + YYERROR and the label yyerrorlab therefore never appears in user + code. */ + if (/*CONSTCOND*/ 0) + goto yyerrorlab; + + /* Do not reclaim the symbols of the rule which action triggered + this YYERROR. */ + YYPOPSTACK (yylen); + yylen = 0; + YY_STACK_PRINT (yyss, yyssp); + yystate = *yyssp; + goto yyerrlab1; + + +/*-------------------------------------------------------------. +| yyerrlab1 -- common code for both syntax error and YYERROR. | +`-------------------------------------------------------------*/ +yyerrlab1: + yyerrstatus = 3; /* Each real token shifted decrements this. */ + + for (;;) + { + yyn = yypact[yystate]; + if (yyn != YYPACT_NINF) + { + yyn += YYTERROR; + if (0 <= yyn && yyn <= YYLAST && yycheck[yyn] == YYTERROR) + { + yyn = yytable[yyn]; + if (0 < yyn) + break; + } + } + + /* Pop the current state because it cannot handle the error token. */ + if (yyssp == yyss) + YYABORT; + + + yydestruct ("Error: popping", + yystos[yystate], yyvsp); + YYPOPSTACK (1); + yystate = *yyssp; + YY_STACK_PRINT (yyss, yyssp); + } + + if (yyn == YYFINAL) + YYACCEPT; + + *++yyvsp = yylval; + + + /* Shift the error token. */ + YY_SYMBOL_PRINT ("Shifting", yystos[yyn], yyvsp, yylsp); + + yystate = yyn; + goto yynewstate; + + +/*-------------------------------------. +| yyacceptlab -- YYACCEPT comes here. | +`-------------------------------------*/ +yyacceptlab: + yyresult = 0; + goto yyreturn; + +/*-----------------------------------. +| yyabortlab -- YYABORT comes here. | +`-----------------------------------*/ +yyabortlab: + yyresult = 1; + goto yyreturn; + +#ifndef yyoverflow +/*-------------------------------------------------. +| yyexhaustedlab -- memory exhaustion comes here. | +`-------------------------------------------------*/ +yyexhaustedlab: + yyerror (YY_("memory exhausted")); + yyresult = 2; + /* Fall through. */ +#endif + +yyreturn: + if (yychar != YYEOF && yychar != YYEMPTY) + yydestruct ("Cleanup: discarding lookahead", + yytoken, &yylval); + /* Do not reclaim the symbols of the rule which action triggered + this YYABORT or YYACCEPT. */ + YYPOPSTACK (yylen); + YY_STACK_PRINT (yyss, yyssp); + while (yyssp != yyss) + { + yydestruct ("Cleanup: popping", + yystos[*yyssp], yyvsp); + YYPOPSTACK (1); + } +#ifndef yyoverflow + if (yyss != yyssa) + YYSTACK_FREE (yyss); +#endif +#if YYERROR_VERBOSE + if (yymsg != yymsgbuf) + YYSTACK_FREE (yymsg); +#endif + /* Make sure YYID is used. */ + return YYID (yyresult); +} + + +#line 274 "guido.y" + + +} // namespace + +int guidoarerror(const char*s) { + YY_FLUSH_BUFFER; + return gReader->error(s, guidoarlineno); +} + diff --git a/guidoar-dev/src/parser/guidoparse.h++ b/guidoar-dev/src/parser/guidoparse.h++ new file mode 100644 index 000000000..1eff953c4 --- /dev/null +++ b/guidoar-dev/src/parser/guidoparse.h++ @@ -0,0 +1,141 @@ +/* A Bison parser, made by GNU Bison 2.3. */ + +/* Skeleton interface for Bison's Yacc-like parsers in C + + Copyright (C) 1984, 1989, 1990, 2000, 2001, 2002, 2003, 2004, 2005, 2006 + Free Software Foundation, Inc. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2, or (at your option) + any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin Street, Fifth Floor, + Boston, MA 02110-1301, USA. */ + +/* As a special exception, you may create a larger work that contains + part or all of the Bison parser skeleton and distribute that work + under terms of your choice, so long as that work isn't itself a + parser generator using the skeleton or a modified version thereof + as a parser skeleton. Alternatively, if you modify or redistribute + the parser skeleton itself, you may (at your option) remove this + special exception, which will cause the skeleton and the resulting + Bison output files to be licensed under the GNU General Public + License without this special exception. + + This special exception was added by the Free Software Foundation in + version 2.2 of Bison. */ + +/* Tokens. */ +#ifndef YYTOKENTYPE +# define YYTOKENTYPE + /* Put the tokens into the symbol table, so that GDB and other debuggers + know about them. */ + enum yytokentype { + NUMBER = 258, + PNUMBER = 259, + NNUMBER = 260, + FLOAT = 261, + STARTCHORD = 262, + ENDCHORD = 263, + STARTSEQ = 264, + ENDSEQ = 265, + STARTPARAM = 266, + ENDPARAM = 267, + STARTRANGE = 268, + ENDRANGE = 269, + SEP = 270, + IDSEP = 271, + BAR = 272, + TAGNAME = 273, + ID = 274, + DIATONIC = 275, + CHROMATIC = 276, + SOLFEGE = 277, + EMPTY = 278, + REST = 279, + DOT = 280, + DDOT = 281, + SHARP = 282, + FLAT = 283, + MLS = 284, + SEC = 285, + UNIT = 286, + MULT = 287, + DIV = 288, + EQUAL = 289, + STRING = 290, + EXTRA = 291 + }; +#endif +/* Tokens. */ +#define NUMBER 258 +#define PNUMBER 259 +#define NNUMBER 260 +#define FLOAT 261 +#define STARTCHORD 262 +#define ENDCHORD 263 +#define STARTSEQ 264 +#define ENDSEQ 265 +#define STARTPARAM 266 +#define ENDPARAM 267 +#define STARTRANGE 268 +#define ENDRANGE 269 +#define SEP 270 +#define IDSEP 271 +#define BAR 272 +#define TAGNAME 273 +#define ID 274 +#define DIATONIC 275 +#define CHROMATIC 276 +#define SOLFEGE 277 +#define EMPTY 278 +#define REST 279 +#define DOT 280 +#define DDOT 281 +#define SHARP 282 +#define FLAT 283 +#define MLS 284 +#define SEC 285 +#define UNIT 286 +#define MULT 287 +#define DIV 288 +#define EQUAL 289 +#define STRING 290 +#define EXTRA 291 + + + + +#if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED +typedef union YYSTYPE +#line 48 "guido.y" +{ + long int num; + float real; + const char* token; + std::string* str; + char c; + guido::Sguidoelement * elt; + guido::Sguidoattribute* attr; + std::vector* velt; + std::vector* vattr; + guido::rational * r; +} +/* Line 1529 of yacc.c. */ +#line 134 "guidoparse.h++" + YYSTYPE; +# define yystype YYSTYPE /* obsolescent; will be withdrawn */ +# define YYSTYPE_IS_DECLARED 1 +# define YYSTYPE_IS_TRIVIAL 1 +#endif + +extern YYSTYPE guidoarlval; + diff --git a/guidoar-dev/src/parser/guidoparser.cpp b/guidoar-dev/src/parser/guidoparser.cpp new file mode 100644 index 000000000..a1fa24d3d --- /dev/null +++ b/guidoar-dev/src/parser/guidoparser.cpp @@ -0,0 +1,180 @@ +/* + GUIDO Library + Copyright (C) 2006 Grame + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + + Grame Research Laboratory, 9 rue du Garet, 69001 Lyon - France + research@grame.fr + +*/ + +#ifdef WIN32 +# pragma warning (disable : 4786) +#endif + +#include +#include + +#include "guidoparser.h" +#include "guidoelement.h" +#include "ARFactory.h" +#include "ARChord.h" +#include "ARNote.h" +#include "AROthers.h" +#include "ARTag.h" + +using namespace std; + +namespace guido +{ + +#if 0 +#define debug(str,val) cout << str << " - " << val << endl +#else +#define debug(str,val) +#endif + +extern bool readfile (FILE * , gmnreader * ); +extern bool readfile (const char * , gmnreader * ); +extern bool readstring (const char * , gmnreader * ); + +//______________________________________________________________________________ +Sguidoelement* guidoparser::newComment(const string& comment, bool multiline) +{ + return 0; +} + +//______________________________________________________________________________ +Sguidoelement* guidoparser::newScore() +{ +// cout << "create new score" << endl; + Sguidoelement* score = new Sguidoelement; + fMusic = ARFactory::instance().createMusic(); + *score = fMusic; + return score; +} + +Sguidoelement* guidoparser::newVoice() +{ +// cout << "create new voice" << endl; + Sguidoelement* voice = new Sguidoelement; + *voice = ARFactory::instance().createVoice(); + return voice; +} + +Sguidoelement* guidoparser::newChord() +{ +// cout << "create new chord" << endl; + Sguidoelement* chord = new Sguidoelement; + *chord = ARFactory::instance().createChord(); + return chord; +} + +Sguidoelement* guidoparser::newRest(const rational * r, long dots) +{ +// cout << "create new rest " << string(*r) << " dots: " << dots << endl; + Sguidoelement* notep = new Sguidoelement; + SARNote note = ARFactory::instance().createNote("_"); + if (r->getNumerator() >= 0) (*note) = *r; + if (dots > 0) note->SetDots (int(dots)); + *notep = note; + return notep; +} + +Sguidoelement* guidoparser::newNote(const std::string& name, long accidentals, long octave, const rational * r, long dots) +{ +// cout << "create new note " << name << " acc: " << accidentals << " oct: " << octave << " - " << string(*r) << " dots: " << dots << endl; + Sguidoelement* notep = new Sguidoelement; + SARNote note = ARFactory::instance().createNote(name); + if (accidentals) note->SetAccidental (int(accidentals)); + if (octave != -1000) note->SetOctave (int(octave)); + if (r->getNumerator() >= 0) (*note) = *r; + if (dots > 0) note->SetDots (int(dots)); + *notep = note; + return notep; +} + +Sguidoelement* guidoparser::newTag(const std::string& name, long id) +{ +// cout << "create new tag " << name << " id: " << id << endl; + Sguidoelement tag = ARFactory::instance().createTag(name, id); + if (!tag) return 0; + Sguidoelement* tagp = new Sguidoelement; + *tagp = tag; + return tagp; +} + +Sguidoattribute* guidoparser::newAttribute(long value) +{ +// cout << "create new attribute with value " << value << endl; + Sguidoattribute* attr = new Sguidoattribute; + *attr = guidoattribute::create(); + (*attr)->setValue(value); + return attr; +} + +Sguidoattribute* guidoparser::newAttribute(float value) +{ +// cout << "create new attribute with value " << value << endl; + Sguidoattribute* attr = new Sguidoattribute; + *attr = guidoattribute::create(); + (*attr)->setValue(value); + return attr; +} + +Sguidoattribute* guidoparser::newAttribute(const std::string& value, bool quote) +{ +// cout << "create new attribute with value " << value << " - quote: " << quote << endl; + Sguidoattribute* attr = new Sguidoattribute; + *attr = guidoattribute::create(); + (*attr)->setValue(value, quote); + return attr; +} + +int guidoparser::error(const char * msg, int lineno) +{ + cerr << msg << " on line " << lineno << endl; + return 0; +} + +//______________________________________________________________________________ +SARMusic guidoparser::parseFile(FILE* fd) +{ + setlocale(LC_NUMERIC, "C"); + readfile (fd, this); + setlocale(LC_NUMERIC, 0); + return fMusic; +} + +//______________________________________________________________________________ +SARMusic guidoparser::parseFile(const char* file) +{ + setlocale(LC_NUMERIC, "C"); + readfile (file, this); + setlocale(LC_NUMERIC, 0); + return fMusic; +} + +//______________________________________________________________________________ +SARMusic guidoparser::parseString(const char* str) +{ + setlocale(LC_NUMERIC, "C"); + readstring (str, this); + setlocale(LC_NUMERIC, 0); + return fMusic; +} + +} // namespace diff --git a/guidoar-dev/src/parser/guidoparser.h b/guidoar-dev/src/parser/guidoparser.h new file mode 100644 index 000000000..72eea7423 --- /dev/null +++ b/guidoar-dev/src/parser/guidoparser.h @@ -0,0 +1,63 @@ +/* + GUIDO Library + Copyright (C) 2006 Grame + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + + Grame Research Laboratory, 9 rue du Garet, 69001 Lyon - France + research@grame.fr + +*/ + +#ifndef __guidoparser__ +#define __guidoparser__ + +#include +#include "arexport.h" +#include "gmnreader.h" +#include "ARTypes.h" +#include "guidorational.h" + +namespace guido +{ + +class gar_export guidoparser : public gmnreader +{ + SARMusic fMusic; + + public: + guidoparser() {} + virtual ~guidoparser() {} + + SARMusic parseFile (FILE* fd); + SARMusic parseFile (const char* file); + SARMusic parseString(const char* string); + + virtual Sguidoelement* newComment(const std::string&, bool multiline); + virtual Sguidoelement* newScore(); + virtual Sguidoelement* newVoice(); + virtual Sguidoelement* newChord(); + virtual Sguidoelement* newRest(const rational * r, long dots); + virtual Sguidoelement* newNote(const std::string& name, long accidentals, long octave, const rational * r, long dots); + virtual Sguidoelement* newTag(const std::string&, long id); + virtual Sguidoattribute* newAttribute(long value); + virtual Sguidoattribute* newAttribute(float value); + virtual Sguidoattribute* newAttribute(const std::string& value, bool quote); + virtual int error(const char * msg, int lineno); +}; + +} // namespace + +#endif diff --git a/guidoar-dev/src/parser/makefile b/guidoar-dev/src/parser/makefile new file mode 100644 index 000000000..8fa5bd6ad --- /dev/null +++ b/guidoar-dev/src/parser/makefile @@ -0,0 +1,19 @@ + +OUT = guidolex.c++ guidoparse.c++ guidoparse.h++ +YACC = bison +LEX = flex +PREFIX := guidoar + +code : $(OUT) + +guidoparse.c++ : guido.y + $(YACC) -d -o guidoparse.c++ -p $(PREFIX) guido.y + +guidoparse.h++ : guido.y + $(YACC) -d -o guidoparse.c++ -p $(PREFIX) guido.y + +guidolex.c++ : guido.l guidoparse.h++ + $(LEX) -oguidolex.c++ -I -P$(PREFIX) guido.l + +clean: + rm -f $(OUT) diff --git a/guidoar-dev/src/parser/parser.cpp b/guidoar-dev/src/parser/parser.cpp new file mode 100644 index 000000000..369bdf631 --- /dev/null +++ b/guidoar-dev/src/parser/parser.cpp @@ -0,0 +1,177 @@ +/* + GUIDO Library + Copyright (C) 2006 Grame + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + + Grame Research Laboratory, 9 rue du Garet, 69001 Lyon - France + research@grame.fr + +*/ + +#ifdef WIN32 +# pragma warning (disable : 4786 4244 4018 4065) +# pragma warning (disable : 4996) +# pragma warning (disable : 4102) +#endif + +#include + +#include "gmnreader.h" +guido::gmnreader * gReader; + +#define yyleng guidoarleng +#define yyin guidoarin +#define yyrestart guidoarrestart +#define yy_current_buffer guidoar_current_buffer +#define yy_delete_buffer guidoar_delete_buffer +#define yy_scan_string guidoar_scan_string + +//#define yyDebug +#ifdef yyDebug +#define YYDEBUG 1 +extern int yydebug; +#endif +#include "guidoparse.c++" +#include "unicode.c++" + +using namespace std; + +void convert_from_unicode (const char *filename); + +namespace guido +{ + +static int parse (FILE *fd) +{ + if (!fd) { + gReader->error("Invalid file descriptor", 0 ); + return(-1); + } + yyin = fd; +#ifdef yyDebug + yydebug = 1; +#endif + int res = yyparse(); + + yyrestart(yyin); + BEGIN(INITIAL); + return res; +} + +static int parse (const char *filename) +{ + int res; + if( !filename ) return -1; // parse error + FILE * fd = fopen(filename,"r"); + if (fd == NULL){ + gReader->error("Cannot not open file", 0 ); + return(-1); + } + + res = parse(fd); + fclose(fd); + return res; +} + +bool readstring (const char * buffer, gmnreader * r) +{ + gReader = r; + + if (!*buffer) return false; // error for empty buffers + + YY_BUFFER_STATE b; + /*Copy string into new buffer and Switch buffers*/ + b = yy_scan_string (buffer); + + /*Parse the string*/ + int ret = yyparse(); + + /*Delete the new buffer*/ + yy_delete_buffer(b); + + BEGIN(INITIAL); + return ret==0; +} + +bool readfile (FILE* fd, gmnreader * r) +{ + gReader = r; + int ret = parse (fd); + return ret==0; +} + +bool readfile (const char * file, gmnreader * r) +{ + gReader = r; + convert_from_unicode (file); + int ret = parse (file); + return ret==0; +} + +#ifdef MAIN + +class testreader : public gmnreader +{ + public: + void noteInit (const char *id){ cout << "noteInit " << id << endl; } + void noteAcc (int n) { cout << "noteAcc " << n << endl; } + void noteOct (int n) { cout << "noteOct " << n << endl; } + void noteEnum (long int n) { cout << "noteEnum " << n << endl; } + void noteDenom (long int n) { cout << "noteDenom " << n << endl; } + void noteDot (void) { cout << "noteDot " << endl; } + void noteDdot (void) { cout << "noteDdot " << endl; } + void noteAbsDur (long int n) { cout << "noteAbsDur " << n << endl; } + void seqAppendNote (void) { cout << "seqAppendNote " << endl; } + + void chordInit (void) { cout << "chordInit " << endl; } + void chordInitNote (void) { cout << "chordInitNote " << endl; } + void chordAppendNote(void) { cout << "chordAppendNote " << endl; } + void seqAppendChord (void) { cout << "seqAppendChord " << endl; } + + void seqInit (void) { cout << "seqInit " << endl; } + void seqExit (void) { cout << "seqExit " << endl; } + + void segmInit (void) { cout << "segmInit " << endl; } + void segmExit (void) { cout << "segmExit " << endl; } + void segmAppendSeq(void) { cout << "segmAppendSeq " << endl; } + + void tagStart (const char* id, long int no) { cout << "tagStart " << id << " - " << no << endl; } + void tagIntArg (long int n) { cout << "tagIntArg " << n << endl; } + void tagFloatArg (double r) { cout << "tagFloatArg " << r << endl; } + void tagArgUnit (const char* unit) { cout << "tagArgUnit " << unit << endl; } + void tagStrArg (char *s) { cout << "tagStrArg " << s << endl; } + void tagAdd (void) { cout << "tagAdd " << endl; } + void tagAddArg (const char *s) { cout << "tagAddArg " << s << endl; } + void tagEnd (void) { cout << "tagEnd " << endl; } + + void tagRange() { cout << "tagRange " << endl; } + int error (const char* msg, int lineno, int charno) + { cerr << msg << " on line " << lineno << " near character " << charno << endl; return 0; } +}; + + +int main (int argc, char * argv[]) +{ + if (argc > 1) { + testreader r; + return readfile (argv[1], &r) ? 0 : 1; + } + return 0; +} +#endif + +} // namespace + diff --git a/guidoar-dev/src/parser/unicode.c++ b/guidoar-dev/src/parser/unicode.c++ new file mode 100644 index 000000000..84eb71fb7 --- /dev/null +++ b/guidoar-dev/src/parser/unicode.c++ @@ -0,0 +1,77 @@ +/* + GUIDO Library + Copyright (C) 2006 Grame + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + + Grame Research Laboratory, 9 rue du Garet, 69001 Lyon - France + research@grame.fr + +*/ + +#include + +enum { kNotUnicode, kUTF16BigEndian, kUTF16LittleEndian }; + +static int is_unicode (FILE * fd) +{ + int c1, c2; + rewind (fd); + c1 = getc( fd ); + c2 = getc( fd ); + if ((c1 == 0xff) && (c2 == 0xfe)) + return kUTF16LittleEndian; + else if ((c1 == 0xfe) && (c2 == 0xff)) + return kUTF16BigEndian; + return kNotUnicode; +} + +static long file_length (FILE * fd) +{ + if (fseek (fd, 0, SEEK_END) == -1) + return 0; + return ftell(fd); +} + +void convert_from_unicode (const char *filename) +{ + FILE *fd = fopen (filename,"rb"); + if (!fd) return; + long n , len, i; + unsigned char * content = 0; + + int ucode = is_unicode (fd); + if (!ucode) goto end; + + len = file_length(fd); + if (!len) goto end; + + content = new unsigned char[len]; + if (!content) goto end; + n = fread (content, len, 1, fd); + if (n != len) goto free; + fclose( fd ); + + // write content back + fd = fopen (filename,"wt"); + for (i = ((ucode==kUTF16LittleEndian) ? 2 : 3); i < len; i+=2 ) { + fputc (content[i], fd); + } +free: + delete content; +end: + fclose(fd); + return; +} diff --git a/guidoar-dev/src/visitors/basevisitor.h b/guidoar-dev/src/visitors/basevisitor.h new file mode 100644 index 000000000..e224d8afb --- /dev/null +++ b/guidoar-dev/src/visitors/basevisitor.h @@ -0,0 +1,38 @@ +/* + Copyright © Grame 2006 + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + + Grame Research Laboratory, 9, rue du Garet 69001 Lyon - France + research@grame.fr + +*/ + +#ifndef __basevisitor__ +#define __basevisitor__ + +namespace guido +{ + +class basevisitor +{ + public: + virtual ~basevisitor() {} +}; + +} + + +#endif diff --git a/guidoar-dev/src/visitors/clonevisitor.cpp b/guidoar-dev/src/visitors/clonevisitor.cpp new file mode 100644 index 000000000..150f7fdf2 --- /dev/null +++ b/guidoar-dev/src/visitors/clonevisitor.cpp @@ -0,0 +1,164 @@ +/* + + MusicXML Library + Copyright (C) 2006,2007 Grame + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + + Grame Research Laboratory, 9 rue du Garet, 69001 Lyon - France + research@grame.fr + +*/ + +#ifdef WIN32 +#pragma warning (disable : 4786) +#endif + +#include + +#include "ARFactory.h" +#include "ARChord.h" +#include "ARNote.h" +#include "AROthers.h" +#include "ARTag.h" +#include "clonevisitor.h" +#include "guidoelement.h" +#include "tree_browser.h" + +using namespace std; + +namespace guido +{ + +//______________________________________________________________________________ +Sguidoelement clonevisitor::clone(const Sguidoelement& elt) +{ + if (elt) { + tree_browser tb(this); + tb.browse (*elt); + Sguidoelement copy = fStack.top(); + fStack.pop(); + return copy; + } + return elt; +} + +//______________________________________________________________________________ +void clonevisitor::copyAttributes (const Sguidoelement& src, Sguidoelement& dst ) const +{ + Sguidoattributes attr = src->attributes(); + Sguidoattributes::const_iterator iter; + for (iter=attr.begin(); iter != attr.end(); iter++) { + Sguidoattribute ac = guidoattribute::create(); + ac->setName ( (*iter)->getName()); + ac->setValue( (*iter)->getValue(), (*iter)->quoteVal()); + ac->setUnit ( (*iter)->getUnit()); + dst->add( ac ); + } +} + +//______________________________________________________________________________ +Sguidoelement clonevisitor::copy (const Sguidoelement& src, Sguidoelement& dst) const +{ + if (dst) { + dst->setName( src->getName()); + dst->setAuto( src->getAuto()); + copyAttributes (src, dst); + } + return dst; +} + +//______________________________________________________________________________ +SARNote clonevisitor::copy( const SARNote& elt ) const +{ + SARNote note = ARFactory::instance().createNote(elt->getName()); + if (note) { + note->SetOctave (elt->GetOctave()); + note->SetAccidental (elt->GetAccidental()); + note->SetDots (elt->GetDots()); + *note = elt->duration(); + const Sguidoelement src = elt; + Sguidoelement dst = note; + copy (src, dst); + } + return note; +} + +//______________________________________________________________________________ +void clonevisitor::push( const SARNote& note, bool stack ) +{ + Sguidoelement elt = note; + push (elt, stack); +} + +//______________________________________________________________________________ +void clonevisitor::push( const Sguidoelement& elt, bool stack ) +{ + if (fStack.empty()) + fStack.push(elt); + else fStack.top()->push(elt); + if (stack) fStack.push (elt); +} + +//______________________________________________________________________________ +// the visit methods +//______________________________________________________________________________ +void clonevisitor::visitStart( SARMusic& elt ) +{ + fStack.push (ARFactory::instance().createMusic()); +} + +//______________________________________________________________________________ +void clonevisitor::visitStart( SARVoice& elt ) +{ + if (copy()) { + Sguidoelement cc = ARFactory::instance().createVoice(); + push( copy (elt, cc) ); + } +} + +//______________________________________________________________________________ +void clonevisitor::visitStart( SARChord& elt ) +{ + if (copy()) { + Sguidoelement cc = ARFactory::instance().createChord(); + push( copy (elt, cc) ); + } +} + +//______________________________________________________________________________ +void clonevisitor::visitStart( SARNote& elt ) +{ + if (copy()) { + push( copy(elt), false ); + } +} + +//______________________________________________________________________________ +void clonevisitor::visitStart( Sguidotag& elt ) +{ + if (copy()) { + Sguidoelement cc = ARFactory::instance().createTag(elt->getName(), elt->getID() ); + push( copy (elt, cc), elt->size() ? true : false ); + } +} + +//______________________________________________________________________________ +void clonevisitor::visitEnd ( SARVoice& elt ) { if (copy()) fStack.pop(); } +void clonevisitor::visitEnd ( SARChord& elt ) { if (copy()) fStack.pop(); } +void clonevisitor::visitEnd ( Sguidotag& elt ) { if (copy() && elt->size()) fStack.pop(); } + + +} diff --git a/guidoar-dev/src/visitors/clonevisitor.h b/guidoar-dev/src/visitors/clonevisitor.h new file mode 100644 index 000000000..7f23f1c8d --- /dev/null +++ b/guidoar-dev/src/visitors/clonevisitor.h @@ -0,0 +1,87 @@ +/* + GUIDO Library + Copyright (C) 2006 Grame + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + + Grame Research Laboratory, 9 rue du Garet, 69001 Lyon - France + research@grame.fr + +*/ + +#ifndef __cloneVisitor__ +#define __cloneVisitor__ + +#include +#include + +#include "arexport.h" +#include "ARTypes.h" +#include "visitor.h" + +namespace guido +{ + +/*! +\addtogroup visitors +@{ +*/ + +//______________________________________________________________________________ +/*! +\brief A visitor to print the gmn description +*/ +class gar_export clonevisitor : + public visitor, + public visitor, + public visitor, + public visitor, + public visitor +{ + public: + clonevisitor() {} + virtual ~clonevisitor() {} + + virtual Sguidoelement clone(const Sguidoelement&); + virtual Sguidoelement result() { Sguidoelement res = fStack.top(); fStack.pop(); return res; } + + protected: + virtual void visitStart( SARMusic& elt ); + virtual void visitStart( SARVoice& elt ); + virtual void visitStart( SARChord& elt ); + virtual void visitStart( SARNote& elt ); + virtual void visitStart( Sguidotag& elt ); + + virtual void visitEnd ( SARVoice& elt ); + virtual void visitEnd ( SARChord& elt ); + virtual void visitEnd ( Sguidotag& elt ); + + // the copy method may be used by derived classes to filter the elements + virtual bool copy () const { return true; } + + virtual void push (const SARNote& elt, bool stack=false); + virtual void push (const Sguidoelement& elt, bool stack=true); + virtual void copyAttributes (const Sguidoelement& src, Sguidoelement& dst) const; + virtual Sguidoelement copy (const Sguidoelement& elt, Sguidoelement& dst) const; + virtual SARNote copy (const SARNote& elt) const; + + std::stack fStack; +}; + +/*! @} */ + +} // namespace + +#endif diff --git a/guidoar-dev/src/visitors/counteventsvisitor.cpp b/guidoar-dev/src/visitors/counteventsvisitor.cpp new file mode 100644 index 000000000..e190c27d2 --- /dev/null +++ b/guidoar-dev/src/visitors/counteventsvisitor.cpp @@ -0,0 +1,74 @@ +/* + + MusicXML Library + Copyright (C) 2006,2007 Grame + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + + Grame Research Laboratory, 9 rue du Garet, 69001 Lyon - France + research@grame.fr + +*/ + +#include + +#include "ARChord.h" +#include "ARNote.h" +#include "counteventsvisitor.h" +#include "tree_browser.h" + +using namespace std; + +namespace guido +{ + +//______________________________________________________________________________ +int counteventsvisitor::count(const Sguidoelement& elt) +{ + fInChord = false; + fCount = 0; + if (elt) fBrowser.browse (*elt); + return fCount; +} + +void counteventsvisitor::visitStart(SARNote& elt) { if (!fInChord) fCount++; } +void counteventsvisitor::visitStart(SARChord& elt) { fInChord = true; } +void counteventsvisitor::visitEnd (SARChord& elt) { fInChord = false; fCount++; } + + +//______________________________________________________________________________ +int countvoiceseventsvisitor::count(const Sguidoelement& elt, unsigned int voice) +{ + reset(); + fTargetVoice = voice; + counteventsvisitor::count(elt); + return fVoiceCount; +} + +void countvoiceseventsvisitor::visitStart(SARVoice& elt) { + if (fCurrentVoice == fTargetVoice) { + fCount = 0; + } + else fBrowser.stop(); +} +void countvoiceseventsvisitor::visitEnd (SARVoice& elt) { + if (fCurrentVoice == fTargetVoice) + fVoiceCount = fCount; + fBrowser.stop(false); + fCurrentVoice++; +} + + +} diff --git a/guidoar-dev/src/visitors/counteventsvisitor.h b/guidoar-dev/src/visitors/counteventsvisitor.h new file mode 100644 index 000000000..9fd6b9cb3 --- /dev/null +++ b/guidoar-dev/src/visitors/counteventsvisitor.h @@ -0,0 +1,100 @@ +/* + GUIDO Library + Copyright (C) 2006 Grame + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + + Grame Research Laboratory, 9 rue du Garet, 69001 Lyon - France + research@grame.fr + +*/ + +#ifndef __countEventsVisitor__ +#define __countEventsVisitor__ + +#include + +#include "arexport.h" +#include "guidoelement.h" +#include "ARTypes.h" +#include "tree_browser.h" +#include "visitor.h" + +namespace guido +{ + +/*! +\addtogroup visitors +@{ +*/ + +//_______________________________________________________________________________ +/*! +\brief a visitor to count the number of notes and chords. + A chord counts for 1 and notes inside a chord are ignored. +*/ +class gar_export counteventsvisitor : + public visitor, + public visitor +{ + public: + counteventsvisitor() { fBrowser.set(this); } + virtual ~counteventsvisitor() {} + + int count (const Sguidoelement&); + int currentCount () const { return fCount; } + + virtual void reset() { fCount=0; fInChord=false; } + + virtual void visitStart( SARNote& elt ); + virtual void visitStart( SARChord& elt ); + virtual void visitEnd ( SARChord& elt ); + + protected: + tree_browser fBrowser; + bool fInChord; + int fCount; +}; + +//_______________________________________________________________________________ +/*! +\brief a visitor to count the number of notes and chords per voice. +*/ +class gar_export countvoiceseventsvisitor : + public counteventsvisitor, + public visitor +{ + public: + countvoiceseventsvisitor() {} + virtual ~countvoiceseventsvisitor() {} + + int count (const Sguidoelement&, unsigned int voice); + + virtual void reset() { fCurrentVoice = fTargetVoice = 0; fVoiceCount=-1; counteventsvisitor::reset(); } + + protected: + virtual void visitStart ( SARVoice& elt ); + virtual void visitEnd ( SARVoice& elt ); + + unsigned int fTargetVoice; + unsigned int fCurrentVoice; + int fVoiceCount; +}; + +/*! @} */ + +} // namespace + +#endif diff --git a/guidoar-dev/src/visitors/countvisitor.h b/guidoar-dev/src/visitors/countvisitor.h new file mode 100644 index 000000000..d86ce9769 --- /dev/null +++ b/guidoar-dev/src/visitors/countvisitor.h @@ -0,0 +1,81 @@ +/* + GUIDO Library + Copyright (C) 2006 Grame + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + + Grame Research Laboratory, 9 rue du Garet, 69001 Lyon - France + research@grame.fr + +*/ + +#ifndef __countVisitor__ +#define __countVisitor__ + +#include "arexport.h" +#include "guidoelement.h" +#include "ARTypes.h" +#include "tree_browser.h" +#include "visitor.h" + +namespace guido +{ + +/*! +\addtogroup visitors +@{ +*/ + +//_______________________________________________________________________________ +/*! +\brief a visitor to count the number of notes and chords. + A chord counts for 1 and notes inside a chord are ignored. +*/ +template class gar_export countvisitor : public visitor +{ + public: + countvisitor() { fBrowser.set(this); } + virtual ~countvisitor() {} + + int count (const Sguidoelement& elt) { + fCount = 0; + fCurrentVoice = fTargetVoice = 0; + if (elt) fBrowser.browse (*elt); + return fCount; + } + + int count (const Sguidoelement& elt, unsigned int voice) { + fCount = 0; + fCurrentVoice = 0; + fTargetVoice = voice; + if (elt) fBrowser.browse (*elt); + return fCount; + } + + virtual void visitStart( C& elt ) { if (fCurrentVoice == fTargetVoice) fCount++; } + virtual void visitStart ( SARVoice& elt ) { fCurrentVoice++; } + + protected: + tree_browser fBrowser; + unsigned int fTargetVoice; + unsigned int fCurrentVoice; + int fCount; +}; + +/*! @} */ + +} // namespace + +#endif diff --git a/guidoar-dev/src/visitors/durationvisitor.cpp b/guidoar-dev/src/visitors/durationvisitor.cpp new file mode 100644 index 000000000..b502f28f7 --- /dev/null +++ b/guidoar-dev/src/visitors/durationvisitor.cpp @@ -0,0 +1,97 @@ +/* + + MusicXML Library + Copyright (C) 2006,2007 Grame + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + + Grame Research Laboratory, 9 rue du Garet, 69001 Lyon - France + research@grame.fr + +*/ + +#include + +#include "ARChord.h" +#include "ARNote.h" +#include "AROthers.h" +#include "durationvisitor.h" +#include "tree_browser.h" + +using namespace std; + +namespace guido +{ + +//______________________________________________________________________________ +rational durationvisitor::duration(const Sguidoelement& elt) +{ + fDuration = rational(0,1); + reset(); + if (elt) fBrowser.browse (*elt); + return fDuration; +} + +//______________________________________________________________________________ +void durationvisitor::reset() +{ + fInChord = false; + fCurrentChordDuration = fCurrentVoiceDuration = rational(0,1); + fCurrentNoteDuration = ARNote::getDefaultDuration(); + fCurrentDots = 0; +} + +//______________________________________________________________________________ +// the visit methods +//______________________________________________________________________________ +void durationvisitor::visitStart( SARVoice& elt ) { reset(); } + +//______________________________________________________________________________ +void durationvisitor::visitStart( SARChord& elt ) +{ + fCurrentChordDuration = rational(0,1); + fInChord = true; +} + +//______________________________________________________________________________ +void durationvisitor::visitStart( SARNote& elt ) +{ + rational duration = elt->totalduration(fCurrentNoteDuration, fCurrentDots); + if ( fInChord ) { + if (duration > fCurrentChordDuration) + fCurrentChordDuration = duration; + } + else { + fCurrentVoiceDuration += duration; + fCurrentVoiceDuration.rationalise(); + } +} + +//______________________________________________________________________________ +void durationvisitor::visitEnd ( SARVoice& elt ) +{ + if (fCurrentVoiceDuration > fDuration) + fDuration = fCurrentVoiceDuration; +} + +//______________________________________________________________________________ +void durationvisitor::visitEnd ( SARChord& elt ) +{ + fCurrentVoiceDuration += fCurrentChordDuration; + fInChord = false; +} + + +} diff --git a/guidoar-dev/src/visitors/durationvisitor.h b/guidoar-dev/src/visitors/durationvisitor.h new file mode 100644 index 000000000..877c5a537 --- /dev/null +++ b/guidoar-dev/src/visitors/durationvisitor.h @@ -0,0 +1,95 @@ +/* + GUIDO Library + Copyright (C) 2006 Grame + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + + Grame Research Laboratory, 9 rue du Garet, 69001 Lyon - France + research@grame.fr + +*/ + +#ifndef __durationVisitor__ +#define __durationVisitor__ + +#include + +#include "arexport.h" +#include "guidoelement.h" +#include "ARTypes.h" +#include "guidorational.h" +#include "tree_browser.h" +#include "visitor.h" + +namespace guido +{ + +/*! +\addtogroup visitors +@{ +*/ + +//______________________________________________________________________________ +/*! +\brief A visitor to print the gmn description +*/ +class gar_export durationvisitor : + public visitor, + public visitor, + public visitor +{ + public: + durationvisitor() { fBrowser.set(this); } + virtual ~durationvisitor() {} + + /*! + \brief computes the duration of a score + \param score an input score + \return the total duration of the input score expressed as a rational (where 1 is a whole note) + */ + virtual rational duration(const Sguidoelement& score); + + virtual void reset(); + bool inChord() const { return fInChord; } + + virtual void visitStart( SARVoice& elt ); + virtual void visitStart( SARChord& elt ); + virtual void visitStart( SARNote& elt ); + + virtual void visitEnd ( SARVoice& elt ); + virtual void visitEnd ( SARChord& elt ); + + virtual rational currentVoiceDate() const { return fCurrentVoiceDuration; } + virtual rational currentNoteDuration() const { return fCurrentNoteDuration; } + virtual int currentDots() const { return fCurrentDots; } + + protected: + virtual void stop (bool state=true) { fBrowser.stop (state); } + + rational fCurrentVoiceDuration; + rational fCurrentChordDuration; + rational fCurrentNoteDuration; + int fCurrentDots; + rational fDuration; + bool fInChord; + + tree_browser fBrowser; +}; + +/*! @} */ + +} // namespace + +#endif diff --git a/guidoar-dev/src/visitors/event2timevisitor.cpp b/guidoar-dev/src/visitors/event2timevisitor.cpp new file mode 100644 index 000000000..2c949e166 --- /dev/null +++ b/guidoar-dev/src/visitors/event2timevisitor.cpp @@ -0,0 +1,137 @@ +/* + + MusicXML Library + Copyright (C) 2006,2007 Grame + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + + Grame Research Laboratory, 9 rue du Garet, 69001 Lyon - France + research@grame.fr + +*/ + +#include + +#include "ARChord.h" +#include "ARNote.h" +#include "event2timevisitor.h" +#include "tree_browser.h" + +using namespace std; + +namespace guido +{ + +//______________________________________________________________________________ +rational event2timevisitor::event2time (const Sguidoelement& score, unsigned int evIndex, unsigned int voiceIndex) +{ + fTargetVoice = voiceIndex; + fTargetDate.set(-1,1); + fTargetEvent = evIndex; + init(); + fBrowser.browse(*score); + return fDone ? currentVoiceDate().rationalise() : rational(-1,1); +} + +//______________________________________________________________________________ +int event2timevisitor::time2event (const Sguidoelement& score, const rational& time, unsigned int voiceIndex) +{ + fTargetVoice = voiceIndex; + fTargetDate = time; + fTargetEvent = -1; + init(); + fBrowser.browse(*score); + int evIndex = -1; + if (fDone) + // target found in the normal curse of browsing + evIndex = fCountVisitor.currentCount(); + // but also check for the last event of the voice that may extend over the target time + else if (currentVoiceDate() > fTargetDate) + evIndex = fCountVisitor.currentCount() - 1; + return evIndex; +} + +//______________________________________________________________________________ +void event2timevisitor::init () +{ + fCurrentVoice = 0; + fDone = false; + durationvisitor::reset(); + fCountVisitor.reset(); +} + +//______________________________________________________________________________ +bool event2timevisitor::done () +{ + fDone = false; + if (fTargetEvent >= 0) fDone = (fCountVisitor.currentCount() == (int)fTargetEvent); + else fDone = (currentVoiceDate() > fTargetDate); + return fDone; +} + +//________________________________________________________________________ +// The visit methods +//________________________________________________________________________ +void event2timevisitor::visitStart ( SARVoice& elt ) +{ + if (fCurrentVoice == fTargetVoice) { + durationvisitor::visitStart(elt); + } + else { + fBrowser.stop(); // this is to visit only the target voice + } +} + +//________________________________________________________________________ +void event2timevisitor::visitEnd ( SARVoice& elt ) +{ + if (fCurrentVoice == fTargetVoice) { + durationvisitor::visitEnd(elt); + } + fBrowser.stop(false); + fCurrentVoice++; +} + +//______________________________________________________________________________ +void event2timevisitor::visitStart( SARChord& elt ) +{ + if (done()) fBrowser.stop(); + else { + durationvisitor::visitStart(elt); + fCountVisitor.visitStart(elt); + } +} + +//______________________________________________________________________________ +void event2timevisitor::visitStart( SARNote& elt ) +{ + if (!fInChord && done()) fBrowser.stop(); + else { + durationvisitor::visitStart(elt); + fCountVisitor.visitStart(elt); + } +} + +//______________________________________________________________________________ +void event2timevisitor::visitEnd ( SARChord& elt ) +{ + if (done()) fBrowser.stop(); + else { + durationvisitor::visitEnd(elt); + fCountVisitor.visitEnd(elt); + } +} + +} diff --git a/guidoar-dev/src/visitors/event2timevisitor.h b/guidoar-dev/src/visitors/event2timevisitor.h new file mode 100644 index 000000000..cd1acbe7b --- /dev/null +++ b/guidoar-dev/src/visitors/event2timevisitor.h @@ -0,0 +1,97 @@ +/* + GUIDO Library + Copyright (C) 2006 Grame + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + + Grame Research Laboratory, 9 rue du Garet, 69001 Lyon - France + research@grame.fr + +*/ + +#ifndef __event2timeVisitor__ +#define __event2timeVisitor__ + +#include "arexport.h" +#include "durationvisitor.h" +#include "counteventsvisitor.h" +#include "guidoelement.h" +#include "visitor.h" + +namespace guido +{ + +/*! +\addtogroup visitors +@{ +*/ + +//_______________________________________________________________________________ +/*! +\brief a visitor to convert events indexes to time and time to event index + + \\empty events are ignored when looking for the target event or position. + Chords account for one event. +*/ +class gar_export event2timevisitor : public durationvisitor +{ + public: + event2timevisitor() {} + virtual ~event2timevisitor() {} + + /*! + \brief computes the duration of a score at a given event location + \param score an input score + \param evIndex the index of the target event + \param voice the voice where to look for the target event + \return the duration of the input score at the target event location, expressed as a rational (where 1 is a whole note) + \note \\empty events are ignored when looking for the target event + */ + rational event2time (const Sguidoelement& score, unsigned int evIndex, unsigned int voiceIndex=0); + + /*! + \brief computes the duration of a score at a given event location + \param score an input score + \param time a time position + \param voice the voice where to look for the target event + \return the index of the event at the target time position + \note \\empty events are ignored when looking for the target event + */ + int time2event (const Sguidoelement& score, const rational& time, unsigned int voiceIndex=0); + + protected: + rational fTargetDate; + int fTargetEvent; + unsigned int fTargetVoice; + unsigned int fCurrentVoice; + bool fDone; + counteventsvisitor fCountVisitor; + + bool done (); + void init (); + + virtual void visitStart ( SARVoice& elt ); + virtual void visitStart ( SARNote& elt ); + virtual void visitStart ( SARChord& elt ); + + virtual void visitEnd ( SARVoice& elt ); + virtual void visitEnd ( SARChord& elt ); +}; + +/*! @} */ + +} // namespace + +#endif diff --git a/guidoar-dev/src/visitors/firstpitchvisitor.cpp b/guidoar-dev/src/visitors/firstpitchvisitor.cpp new file mode 100644 index 000000000..1e13c3013 --- /dev/null +++ b/guidoar-dev/src/visitors/firstpitchvisitor.cpp @@ -0,0 +1,81 @@ +/* + + Copyright (C) 2007 Grame + + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + + Grame Research Laboratory, 9, rue du Garet 69001 Lyon - France + research@grame.fr + +*/ + +#ifdef WIN32 +# pragma warning (disable : 4786) +#endif + +#include +#include + +#include "ARNote.h" +#include "ARFactory.h" +#include "AROthers.h" +#include "ARTag.h" +#include "clonevisitor.h" +#include "firstpitchvisitor.h" +#include "tree_browser.h" + +using namespace std; + +namespace guido +{ + +//______________________________________________________________________________ +int firstpitchvisitor::firstPitch (const Sguidoelement& score) { + fInChord = fDone = false; + fPitch = 9999; // set to a high value since the lowest pitch is collected + fCurrentOctave = ARNote::kDefaultOctave; // the default octave + browse (*score); + return done() ? fPitch : -1; +} +void firstpitchvisitor::visitStart( SARChord& elt ) { fInChord=true; } +void firstpitchvisitor::visitEnd ( SARChord& elt ) { fInChord=false; fDone = true; } + +//______________________________________________________________________________ +void firstpitchvisitor::visitStart( SARNote& elt ) +{ + int octave = elt->GetOctave(); + if (!ARNote::implicitOctave(octave)) fCurrentOctave = octave; + + int midi = elt->midiPitch (fCurrentOctave); + if (midi >= 0) { + if (midi < fPitch) fPitch = midi; + if (!fInChord) fDone = true; + } + +// int alter; int midi = -1; +// ARNote::pitch pitch = elt->GetPitch (alter); +// if (pitch != ARNote::kNoPitch) { +// // offset in octave numeration between guido and midi is 3 +// int midioctave = (fCurrentOctave + 3) * 12; +// midi = midioctave + (pitch*2) + alter; +// if (pitch > ARNote::E) midi--; +// if (midi < fPitch) fPitch = midi; +// if (!fInChord) fDone = true; +// } +} + + +} diff --git a/guidoar-dev/src/visitors/firstpitchvisitor.h b/guidoar-dev/src/visitors/firstpitchvisitor.h new file mode 100644 index 000000000..77a180d73 --- /dev/null +++ b/guidoar-dev/src/visitors/firstpitchvisitor.h @@ -0,0 +1,72 @@ +/* + Copyright � Grame 2008 + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + + Grame Research Laboratory, 9, rue du Garet 69001 Lyon - France + research@grame.fr + +*/ + +#ifndef __firstpitchvisitor__ +#define __firstpitchvisitor__ + +#include "arexport.h" +#include "ARTypes.h" +#include "visitor.h" +#include "tree_browser.h" + + +namespace guido +{ + +/*! +\addtogroup visitors +@{ +*/ + + +//______________________________________________________________________________ +/*! +\brief A visitor to retrieve the pitch of the first note (first voice, lowest note) +*/ +class gar_export firstpitchvisitor : + public tree_browser, + public visitor, + public visitor +{ + public: + firstpitchvisitor() { set(this); } + virtual ~firstpitchvisitor() {} + + int firstPitch (const Sguidoelement& score); + + protected: + bool done () const { return fDone; } + + virtual void visitStart( SARChord& elt ); + virtual void visitStart( SARNote& elt ); + virtual void visitEnd ( SARChord& elt ); + int fPitch, fCurrentOctave; + bool fInChord, fDone; +}; + + +/*! @} */ + +} // namespace MusicXML + + +#endif diff --git a/guidoar-dev/src/visitors/gmnvisitor.cpp b/guidoar-dev/src/visitors/gmnvisitor.cpp new file mode 100644 index 000000000..f64b9d633 --- /dev/null +++ b/guidoar-dev/src/visitors/gmnvisitor.cpp @@ -0,0 +1,160 @@ +/* + GUIDO Library + Copyright (C) 2006 Grame + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + + Grame Research Laboratory, 9 rue du Garet, 69001 Lyon - France + research@grame.fr + +*/ + +#ifdef WIN32 +#pragma warning (disable : 4786) +#endif + +#include + +#include "gmnvisitor.h" +#include "ARChord.h" +#include "ARNote.h" +#include "AROthers.h" +#include "ARTag.h" + +using namespace std; + +namespace guido +{ + +//_______________________________________________________________________________ +struct count_notes { + bool operator () (const Sguidoelement elt) const { + return dynamic_cast((guidoelement*)elt)!=0; + } +}; + +//______________________________________________________________________________ +void gmnvisitor::visitStart ( Sguidotag& tag ) +{ + if (tag->getAuto() && !fVisitAuto) return; // auto elements are not printed + fOut << string(*tag); + fOut.pbreak(); + if (tag->size() > 0) { + fOut << '('; + if (fChordNotes > 1) fInsideTag++; + } + fOut << ' '; +} + +//______________________________________________________________________________ +void gmnvisitor::visitEnd ( Sguidotag& tag ) +{ + if (tag->getAuto() && !fVisitAuto) return; // auto elements are not printed + if (tag->size() > 0) { + fOut << ") "; + fOut.pbreak(); + if (fInsideTag) fInsideTag--; + // here we check whether the container is inside a chord and whether + // we need to print a note separator + if (!fInsideTag && (fChordNotes > 1)) { + fOut << ", "; + fChordNotes--; + } + } +} + +//______________________________________________________________________________ +void gmnvisitor::visitStart ( SARNote& note ) +{ + if (note->getAuto() && !fVisitAuto) return; // auto elements are not printed + if (note->size() && fVisitAuto) return; // the note has been automatically splitted + + fOut << string(*note); + // inside a chord, notes are separated by a comma (',') + // but when the note is inside a container tag, the comma is printed when + // the container is closed (ie after the ')' + if ((fChordNotes > 1) && !fInsideTag) { + fChordNotes--; + fOut << ", "; + } + fOut << ' '; + fOut.pbreak(); +} + +//______________________________________________________________________________ +void gmnvisitor::barline ( Sguidotag& bar ) +{ + if (bar->getAuto() && !fVisitAuto) return; // auto elements are not printed + fOut << "\n| "; +} + +//______________________________________________________________________________ +void gmnvisitor::visitStart ( SARBar& bar ) { Sguidotag t(bar); barline(t); } +void gmnvisitor::visitStart ( SARRepeatBegin& bar ) { fOut << "\n " << string(*bar) << " "; } +void gmnvisitor::visitStart ( SARRepeatEnd& bar ) { fOut << "\n " << string(*bar) << " "; } + +//______________________________________________________________________________ +void gmnvisitor::visitStart ( SARMusic& music ) +{ + fVoicesCount = music->size(); + fOut << "{"; + if (fVoicesCount >= 1) + fOut++ << "\n"; +} + +//______________________________________________________________________________ +void gmnvisitor::visitEnd ( SARMusic& music ) +{ + if (music->size() >= 1) { + fOut--; + } + fOut << "}"; +} + +//______________________________________________________________________________ +void gmnvisitor::visitStart ( SARChord& chord ) +{ + if (chord->getAuto() && !fVisitAuto) return; + count_notes p; + fChordNotes = count_if(chord->begin(), chord->end(), p); + fOut << "{ "; +} + +//______________________________________________________________________________ +void gmnvisitor::visitEnd ( SARChord& chord ) +{ + if (chord->getAuto() && !fVisitAuto) return; + fChordNotes = 0; + fOut << "} "; + fOut.pbreak(); +} + +//______________________________________________________________________________ +void gmnvisitor::visitStart ( SARVoice& voice ) +{ + fOut << "["; + if (voice->size () > 10) fOut++ << '\n'; +} + +//______________________________________________________________________________ +void gmnvisitor::visitEnd ( SARVoice& voice ) +{ + if (voice->size () > 10) --fOut << '\n'; + fOut << ']'; + if (--fVoicesCount) fOut << ",\n\n"; + else --fOut << "\n" ; +} + +} // namespace diff --git a/guidoar-dev/src/visitors/gmnvisitor.h b/guidoar-dev/src/visitors/gmnvisitor.h new file mode 100644 index 000000000..f91dd5010 --- /dev/null +++ b/guidoar-dev/src/visitors/gmnvisitor.h @@ -0,0 +1,92 @@ +/* + GUIDO Library + Copyright (C) 2006 Grame + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + + Grame Research Laboratory, 9 rue du Garet, 69001 Lyon - France + research@grame.fr + +*/ + +#ifndef __gmnvisitor__ +#define __gmnvisitor__ + +#include + +#include "arexport.h" +#include "ARTypes.h" +#include "streambeautifuller.h" +#include "visitor.h" + +namespace guido +{ + +/*! +\addtogroup visitors +@{ +*/ + +//______________________________________________________________________________ +/*! +\brief A visitor to print the gmn description +*/ +class gar_export gmnvisitor : + public visitor, + public visitor, + public visitor, + public visitor, + public visitor, + public visitor, + public visitor, + public visitor +{ + private: + streambeautifuller fOut; ///< the decorated output stream + long fChordNotes; ///< count of notes, should always be 0 outside a chord, used for notes separator + long fVoicesCount; ///< count of voices, used for voices separator + int fInsideTag; ///< only used inside a chord for notes separator purpose + bool fVisitAuto; ///< control auto elements visite + + enum { kMaxLine=70 }; ///< the maximum length of a line + + void barline ( Sguidotag& tag ); + + public: + gmnvisitor(std::ostream& stream, bool visitauto=false) + : fOut(stream, kMaxLine), fChordNotes(0), + fVoicesCount(1), fInsideTag(0), fVisitAuto(visitauto) {} + + virtual void visitStart ( Sguidotag& tag ); + virtual void visitStart ( SARNote& tag ); + virtual void visitStart ( SARMusic& tag ); + virtual void visitStart ( SARChord& tag ); + virtual void visitStart ( SARVoice& tag ); + virtual void visitStart ( SARBar& tag ); + virtual void visitStart ( SARRepeatBegin& tag ); + virtual void visitStart ( SARRepeatEnd& tag ); + + virtual void visitEnd ( Sguidotag& tag ); + virtual void visitEnd ( SARMusic& tag ); + virtual void visitEnd ( SARChord& tag ); + virtual void visitEnd ( SARVoice& tag ); + +}; + +/*! @} */ + +} // namespace + +#endif diff --git a/guidoar-dev/src/visitors/midicontextvisitor.cpp b/guidoar-dev/src/visitors/midicontextvisitor.cpp new file mode 100644 index 000000000..0e8a85678 --- /dev/null +++ b/guidoar-dev/src/visitors/midicontextvisitor.cpp @@ -0,0 +1,451 @@ +/* + Copyright � Grame 2003,2007 + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + + Grame Research Laboratory, 9, rue du Garet 69001 Lyon - France + research@grame.fr + +*/ + +#ifdef WIN32 +# pragma warning (disable : 4786) +# define _CRT_SECURE_NO_DEPRECATE +#endif + +#include +#include +#include + +#include "ARChord.h" +#include "ARNote.h" +#include "AROthers.h" +#include "ARTag.h" +#include "midicontextvisitor.h" +#include "transposeOperation.h" +#include "unrolled_guido_browser.h" + +using namespace std; +namespace guido { + +//________________________________________________________________________ +// midicontextvisitor +//________________________________________________________________________ +midicontextvisitor::~midicontextvisitor() {} + +//________________________________________________________________________ +midicontextvisitor::midicontextvisitor(long tpq, midiwriter* writer) +{ + fTPQ = tpq; + fMidiWriter = writer; + reset (); +} + +//________________________________________________________________________ +void midicontextvisitor::visit(Sguidoelement& elt) +{ + reset(); + fEndTie = elt->end(); + unrolled_guido_browser tb(this); + tb.browse (elt); +} + +//________________________________________________________________________ +void midicontextvisitor::reset() +{ + fInChord = fInSlur = fInStaccato = fInGrace = false; + fTieState = kNoTie; + // reset to the default guido implicit values + fCurrentDate = fChordDuration = 0; + fCurrentDuration = rational (1,4); + fTranspose = fCurrentDots = 0; + fCurrentOctave = 1; + fCurrentVel = 90; + fTiedMap.clear(); +} + +//________________________________________________________________________ +int midicontextvisitor::moveTime(int dur) +{ + if (!fInChord) return dur; + if (dur > fChordDuration) fChordDuration = dur; + return 0; +} + +//________________________________________________________________________ +int midicontextvisitor::rational2ticks(const rational& dur) const +{ + // dur is expressed in whole note fraction + float fdur = float(dur * 4); + return int(fdur * fTPQ); +} + +//________________________________________________________________________ +/* +int midicontextvisitor::midiPitch (const SARNote& elt) const +{ + int alter; int midi = -1; + ARNote::pitch pitch = elt->GetPitch (alter); + if (pitch != ARNote::kNoPitch) { + // offset in octave numeration between guido and midi is 4 + int midioctave = (fCurrentOctave + 4) * 12; + midi = midioctave + (pitch*2) + alter; + if (pitch > ARNote::E) midi--; + } + return midi; +} +*/ + +//________________________________________________________________________ +rational midicontextvisitor::noteduration (const SARNote& elt, rational& currentDuration, int& currentDots ) const +{ + rational dur = elt->duration(); + if (!ARNote::implicitDuration (dur)) { + currentDuration = dur; + currentDots = 0; + } + int dots = elt->GetDots(); + if (dots) currentDots = dots; + dur = currentDuration; + dots = currentDots; + rational dotdur = dur; + while (dots--) { + dotdur /= 2; + dotdur.rationalise(); + dur += dotdur; + dur.rationalise(); + } + return dur; +} + +//________________________________________________________________________ +// the various play methods +//________________________________________________________________________ +void midicontextvisitor::playTempoChange (long bpm) +{ + if (fMidiWriter && bpm) + fMidiWriter->tempoChange (fCurrentDate, bpm); +} + +void midicontextvisitor::playProgChange (long prog) +{ + if (fMidiWriter) + fMidiWriter->progChange (fCurrentDate, prog); +} + +//________________________________________________________________________ +void midicontextvisitor::playNote (long date, int pitch, int duration) +{ + if (fMidiWriter) { + int articulation = midiwriter::kNone; + if (fInSlur) articulation += midiwriter::kSlur; + if (fInStaccato) articulation += midiwriter::kStaccato; + fMidiWriter->newNote (date, pitch + fTranspose, fCurrentVel, duration, articulation); + } +} + +//________________________________________________________________________ +void midicontextvisitor::playMidiInstrument (int progChange) +{ + if (fMidiWriter) { + fMidiWriter->progChange (fCurrentDate, progChange); + } +} + +//________________________________________________________________________ +void midicontextvisitor::playMeterChange (unsigned int num, unsigned int denum) +{ + if (fMidiWriter) { + fMidiWriter->timeSignChange (fCurrentDate, num, denum); + } +} + +//________________________________________________________________________ +void midicontextvisitor::playKeySignChange (int sign, bool major) +{ + if (fMidiWriter) { + fMidiWriter->keySignChange (fCurrentDate, sign, major); + } +} + + +//________________________________________________________________________ +// ties management +//________________________________________________________________________ +void midicontextvisitor::startTie(Sguidoelement tie, bool storeEnd) +{ + fTiedMap.clear(); + fTieState = kInTie; + if (storeEnd) { + guidoIterator i = find(fCurrentVoice->begin(), fCurrentVoice->end(), tie); + i.rightShift(); + fEndTie = i; + } + else fEndTie = fCurrentVoice->end(); +} + +//________________________________________________________________________ +void midicontextvisitor::stopTie() +{ + fTiedMap.clear(); + fTieState = kNoTie; +} + +//________________________________________________________________________ +void midicontextvisitor::storeNotes( SARChord& elt, ARNotes& dest ) +{ + guidoIterator i; + for (i = elt->begin(); i != elt->end(); i++) { + SARNote note = dynamic_cast((guidoelement*)(*i)); + if (note) dest.push_back(note); + } +} + +//________________________________________________________________________ +// note: similar pitch from different name space are different (like g and sol) +// this is to comply with the current layout result +bool midicontextvisitor::equalPitch (const SARNote& n1, const SARNote& n2) const +{ + int octave1 = n1->GetOctave(); + if (ARNote::implicitOctave(octave1)) octave1 = fCurrentOctave; + int octave2 = n2->GetOctave(); + if (ARNote::implicitOctave(octave2)) octave2 = fCurrentOctave; + + return (n1->getName() == n2->getName()) && + (octave1 == octave2) && + (n1->GetAccidental() == n2->GetAccidental()); +} + +//________________________________________________________________________ +rational midicontextvisitor::totalDuration( const ARNotes& list ) const +{ + rational listDuration (0,1); + rational currentDuration = fCurrentDuration; + int currentDots = fCurrentDots; + for (ARNotes::const_iterator i = list.begin(); i != list.end(); i++) { + listDuration += noteduration(*i, currentDuration, currentDots); + listDuration.rationalise(); + } + return listDuration; +} + +//________________________________________________________________________ +void midicontextvisitor::lookupTied(guidoIterator start, guidoIterator end, const SARNote& note, ARNotes& list) +{ + int chordnotes = 0; + while (start != end) { + // end of a tie depends on the end iterator or on the \tieEnd tag + SARTieEnd tieEnd = dynamic_cast* >((guidoelement*)(*start)); + if (tieEnd) break; + + SARNote next = dynamic_cast((guidoelement*)(*start)); + if (next) { + if (chordnotes) chordnotes--; // notes inside a chord are handled below + else if ( equalPitch(note, next) ) { + list.push_back(next); + fTiedMap[next] = 1; + } + else { + fTieState = kInTie; // return to tie begin state + break; // which allows for further ties to operate + } + } + + SARChord chord = dynamic_cast((guidoelement*)(*start)); + if (chord) { + ARNotes clist; + storeNotes (chord, clist); // get the notes from the chord + chordnotes = clist.size(); // stores the notes count (to be ignored above) + bool chordTied = false; // a flag to check for effective tied notes + for (ARNotes::const_iterator i = clist.begin(); i != clist.end(); i++) { + if ( equalPitch(note, *i) ) { + list.push_back(*i); + fTiedMap[*i] = 1; + chordTied = true; + } + } + if (!chordTied) break; // chords without a tie breaks the tie processing + } + start++; + } +} + +//________________________________________________________________________ +// the visitxxx methods +//________________________________________________________________________ +void midicontextvisitor::visitStart ( SARVoice& elt ) +{ + reset (); + fCurrentVoice = elt; + if (fMidiWriter) fMidiWriter->startVoice(); +} +void midicontextvisitor::visitEnd ( SARVoice& elt ) { if (fMidiWriter) fMidiWriter->endVoice (fCurrentDate); } + +//________________________________________________________________________ +void midicontextvisitor::visitStart( SARNote& elt ) +{ + int noteDuration = rational2ticks (noteduration(elt, fCurrentDuration, fCurrentDots)); + if (fTiedMap[elt]) { + fCurrentDate += moveTime (noteDuration); // moves the current time + return; // but skip already tied notes + } + +// int octave = elt->GetOctave(); +// if (octave != ARNote::kUndefined) fCurrentOctave = octave; + int dur = 0; + + if (fTieState == kInTie) { // we've just entered a tie + fTieState = kTiedNote; + + ARNotes list; + list.push_back(elt); + // + guidoIterator i = find(fCurrentVoice->begin(), fCurrentVoice->end(), elt); + if (i != fCurrentVoice->end()) { + lookupTied (++i, fEndTie, elt, list); // get the list of tied notes + dur = rational2ticks (totalDuration(list)); // and compute the total duration + } + } + else dur = noteDuration; +// int pitch = midiPitch(elt); + int pitch = elt->midiPitch(fCurrentOctave); + if (pitch >= 0) { + if (fInGrace) { + // play grace notes ahead of current position + playNote (fCurrentDate - (noteDuration/2), pitch, dur); + // and do not move time + noteDuration = 0; + } + else + playNote (fCurrentDate, pitch, dur); + } + fCurrentDate += moveTime (noteDuration); +} + +//________________________________________________________________________ +void midicontextvisitor::visitStart( SARTie& elt ) { startTie(elt, true); } +void midicontextvisitor::visitEnd ( SARTie& elt ) { stopTie(); } +void midicontextvisitor::visitStart( SARTieBegin& elt ) { startTie(elt); } +void midicontextvisitor::visitStart( SARTieEnd& elt ) { stopTie(); } + +//________________________________________________________________________ +void midicontextvisitor::visitStart( SARChord& elt ) { + fChordDuration = 0; + fInChord = true; + if (fTieState == kInTie) { + fTieState = kTiedChord; + ARNotes cnotes; + storeNotes (elt, cnotes); + guidoIterator i = find(fCurrentVoice->begin(), fCurrentVoice->end(), elt); + if (i == fCurrentVoice->end()) return; + + for (ARNotes::const_iterator note = cnotes.begin(); note != cnotes.end(); note++) { + if (fTiedMap[*note]) continue; + + ARNotes list; + lookupTied (i, fEndTie, *note, list); + int dur = rational2ticks (totalDuration(list)); +// int pitch = midiPitch(*note); + int pitch = (*note)->midiPitch(fCurrentOctave); + if (pitch >= 0) playNote (fCurrentDate, pitch, dur); + } + } +} +void midicontextvisitor::visitEnd ( SARChord& elt ) { fInChord = false; fCurrentDate += moveTime (fChordDuration); } + +//________________________________________________________________________ +void midicontextvisitor::visitStart( SARTempo& elt ) +{ + string val = elt->getAttributeValue(0); + int num, denum, tempo; + int n = sscanf ( val.c_str(), "%d/%d=%d", &num, &denum, &tempo); + if (n != 3) { + val = elt->getAttributeValue(1); + n = sscanf ( val.c_str(), "%d/%d=%d", &num, &denum, &tempo); + } + if (n == 3) { + rational beat(num, denum); + rational quarter(1,4); + rational mult = beat / quarter; + tempo *= mult.getNumerator(); + tempo /= mult.getDenominator(); + playTempoChange (tempo); + } +} + +//________________________________________________________________________ +void midicontextvisitor::visitStart( SARIntens& elt ) +{ + float intens = elt->getAttributeFloatValue (1, 0.); + if (intens) fCurrentVel = int(127 * intens); +} + +//________________________________________________________________________ +void midicontextvisitor::visitStart( SAROct& elt ) +{ + fTranspose = int(elt->getAttributeFloatValue (0, 0) * 12); +} +void midicontextvisitor::visitEnd( SAROct& elt ) +{ + if (elt->size()) fTranspose = 0; +} + +//________________________________________________________________________ +void midicontextvisitor::visitStart( SARInstr& elt ) +{ + string midi = elt->getAttributeValue (1); + int prog; + if (sscanf ( midi.c_str(), "MIDI %d", &prog) == 1) + playProgChange (prog); +} + +//________________________________________________________________________ +void midicontextvisitor::visitStart( SARKey& elt ) +{ + Sguidoattribute attr = elt->getAttribute(0); + if (attr) { + if (attr->quoteVal()) { // key is specified as a string + string val = attr->getValue(); + int key = transposeOperation::convertKey (val); + if (key != transposeOperation::kUndefinedKey) { + playKeySignChange (key, isupper (val[0]) ? true : false); + } + } + else playKeySignChange (int(*attr)); + } +} + +//________________________________________________________________________ +void midicontextvisitor::visitStart( SARMeter& elt ) +{ + const string val = elt->getAttributeValue(0); + unsigned int num, denum; + if (val == "C") + num = denum = 4; + else if ((val == "C/") || (val == "c/")) + num = denum = 2; + else if (sscanf ( val.c_str(), "%d/%d", &num, &denum) != 2) + return; + // now converts the denominator into midifile compliant representation + unsigned int mfdenum = 0; + while (denum > 1) { + mfdenum++; + denum /= 2; + } + playMeterChange (num, mfdenum); +} + + +} // end namespace diff --git a/guidoar-dev/src/visitors/midicontextvisitor.h b/guidoar-dev/src/visitors/midicontextvisitor.h new file mode 100644 index 000000000..403286ddb --- /dev/null +++ b/guidoar-dev/src/visitors/midicontextvisitor.h @@ -0,0 +1,188 @@ +/* + + MusicXML Library + Copyright (C) 2006,2007 Grame + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + + Grame Research Laboratory, 9 rue du Garet, 69001 Lyon - France + research@grame.fr + +*/ + +#ifndef __midiContextVisitor__ +#define __midiContextVisitor__ + +#include + +#include "arexport.h" +#include "guidoelement.h" +#include "AROthers.h" +#include "ARTypes.h" +#include "guidorational.h" +#include "visitor.h" + +namespace guido +{ + +/*! +\addtogroup visitors +@{ +*/ + +/*! +\brief An abstract interface to be used with midicontextvisitor +*/ +class midiwriter { + public: + enum { kNone, kSlur, kStaccato=kSlur*2 }; + + virtual ~midiwriter() {} + + virtual void startVoice () = 0; + virtual void endVoice (long date) = 0; + + virtual void newNote (long date, int pitch, int vel, int duration, int art) = 0; + virtual void tempoChange (long date, int bpm) = 0; + virtual void progChange (long date, int prog) = 0; + virtual void timeSignChange (long date, unsigned int num, unsigned int denom) = 0; + virtual void keySignChange (long date, int signature, bool major=true) = 0; +}; + + +/*! +\brief A Visitor that maintains a context for MIDI generation. +*/ + +class gar_export midicontextvisitor : + // time management + public visitor, + public visitor, + public visitor, + public visitor, + public visitor, + public visitor, + public visitor, + public visitor, + public visitor, + public visitor, + + // score information + public visitor, + public visitor, + + // nuances rendering + public visitor, + + // notes and voices + public visitor, + public visitor, + public visitor, + public visitor, + public visitor, + public visitor +{ + protected: + typedef ctree::iterator guidoIterator; + typedef std::vector ARNotes; + + private: + enum { kNoTie, kInTie, kTiedNote, kTiedChord }; + std::map fTiedMap; // used to store tied notes in a single tie sequence + guidoIterator fEndTie; // end iterator for tie container browsing + SARVoice fCurrentVoice; + bool fInChord, fInSlur, fInStaccato, fInGrace; + int fTieState; + + void reset (); + void startTie (Sguidoelement tie, bool storeEnd = false); + void stopTie (); + void storeNotes ( SARChord& elt, ARNotes& dest ); + void lookupTied (guidoIterator start, guidoIterator end, const SARNote& note, ARNotes&); + rational totalDuration ( const ARNotes& list ) const; + + protected: + + midiwriter* fMidiWriter; + long fCurrentDate; // current date + rational fCurrentDuration; // current notes duration + int fChordDuration; // current chord duration (available at chord exit) + int fCurrentOctave; // current notes octave + int fCurrentVel; // current notes velocity + int fCurrentDots; // current notes dots + int fTranspose; // current transpose value + long fTPQ; // ticks-per-quater value for date conversion + + int moveTime (int dur); + bool equalPitch (const SARNote&, const SARNote&) const; + rational noteduration (const SARNote& elt, rational& currentDuration, int& currentDots ) const; // computes a note duration + int rational2ticks (const rational& dur) const; // converts guido rational time into ticks + int midiPitch (const SARNote& elt) const; + + virtual void playMidiInstrument (int progChange); + virtual void playNote (long date, int pitch, int duration); + virtual void playTempoChange (long bmp); + virtual void playProgChange (long prog); + virtual void playMeterChange (unsigned int num, unsigned int denum); + virtual void playKeySignChange (int sign, bool major=true); + + virtual void visitStart( SARChord& elt ); + virtual void visitEnd ( SARChord& elt ); + virtual void visitStart( SARVoice& elt ); + virtual void visitEnd ( SARVoice& elt ); + virtual void visitStart( SARNote& elt ); + virtual void visitStart( SARInstr& elt ); + virtual void visitStart( SAROct& elt ); + virtual void visitEnd ( SAROct& elt ); + virtual void visitStart( SARGrace& ) { fInGrace = true; } + virtual void visitEnd ( SARGrace& ) { fInGrace = false; } + + // time management + virtual void visitStart( SARTempo& elt ); + + virtual void visitStart( SARSlur& ) { fInSlur = true; } + virtual void visitEnd ( SARSlur& ) { fInSlur = false; } + virtual void visitStart( SARSlurBegin& ) { fInSlur = true; } + virtual void visitStart( SARSlurEnd& ) { fInSlur = false; } + + virtual void visitStart( SARStacc& ) { fInStaccato = true; } + virtual void visitEnd ( SARStacc& ) { fInStaccato = false; } + virtual void visitStart( SARStaccBegin& ) { fInStaccato = true; } + virtual void visitStart( SARStaccEnd& ) { fInStaccato = false; } + + virtual void visitStart( SARTie& elt ); + virtual void visitEnd ( SARTie& elt ); + virtual void visitStart( SARTieBegin& elt ); + virtual void visitStart( SARTieEnd& elt ); + + // nuances rendering + virtual void visitStart( SARIntens& elt ); + + // score information + virtual void visitStart( SARKey& elt ); + virtual void visitStart( SARMeter& elt ); + + public: + midicontextvisitor(long tpq, midiwriter* writer=0); + virtual ~midicontextvisitor(); + + virtual void visit(Sguidoelement& elt); +}; + +/*! @} */ + +} + +#endif diff --git a/guidoar-dev/src/visitors/pitchvisitor.cpp b/guidoar-dev/src/visitors/pitchvisitor.cpp new file mode 100644 index 000000000..7905a9f75 --- /dev/null +++ b/guidoar-dev/src/visitors/pitchvisitor.cpp @@ -0,0 +1,137 @@ +/* + + MusicXML Library + Copyright (C) 2006-2009 Grame + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + + Grame Research Laboratory, 9 rue du Garet, 69001 Lyon - France + research@grame.fr + +*/ + +#include + +#include "ARChord.h" +#include "ARNote.h" +#include "AROthers.h" +#include "pitchvisitor.h" +#include "tree_browser.h" + +using namespace std; + +namespace guido +{ + +//______________________________________________________________________________ +void pitchvisitor::pitch(const Sguidoelement& score, int voice, std::vector* outpitch) +{ + fInChord = false; + fTargetVoice = voice; + fCurrentVoice = 0; + fCurrentOctave = 1; + fPitch = outpitch; + if (score) fBrowser.browse (*score); +} + +//______________________________________________________________________________ +// the visit methods +//______________________________________________________________________________ +void pitchvisitor::visitStart( SARVoice& elt ) +{ + stop(fCurrentVoice != fTargetVoice); + fCurrentOctave = 1; + fInChord = false; +} + +//______________________________________________________________________________ +void pitchvisitor::visitEnd ( SARVoice& elt ) +{ + fCurrentVoice++; + stop(fCurrentVoice > fTargetVoice); +} + +//______________________________________________________________________________ +void pitchvisitor::visitStart( SARChord& elt ) +{ + fInChord = true; + fCurrentChordPitch.fName = ""; + fCurrentChordPitch.fOctave = ARNote::getImplicitOctave(); + fCurrentChordPitch.fAlter = 0; + fCurrentChordMidiPitch = (fCMode == kUseHighest ? -1 : 999); +} + +//______________________________________________________________________________ +void pitchvisitor::visitEnd ( SARChord& elt ) +{ + fInChord=false; + fPitch->push_back(fCurrentChordPitch); +} + +//______________________________________________________________________________ +void pitchvisitor::storePitch( SARNote& elt, TPitch& dst ) +{ + dst.fName = elt->getName(); + int octave = elt->GetOctave(); + if (ARNote::implicitOctave (octave)) + octave = fCurrentOctave; + else + fCurrentOctave = octave; + dst.fOctave = octave; + dst.fAlter = elt->GetAccidental(); +} + +//______________________________________________________________________________ +void pitchvisitor::visitStart( SARNote& elt ) +{ + if (!fInChord) { + TPitch pitch; + storePitch(elt, pitch); + fPitch->push_back(pitch); + } + else { + int pitch = elt->midiPitch(fCurrentOctave); + switch (fCMode) { + case kUseHighest: + if (pitch > fCurrentChordMidiPitch) { + storePitch(elt, fCurrentChordPitch); + fCurrentChordMidiPitch = pitch; + } + break; + case kUseLowest: + if (pitch < fCurrentChordMidiPitch) { + storePitch(elt, fCurrentChordPitch); + fCurrentChordMidiPitch = pitch; + } + break; + } + } +} + +//______________________________________________________________________________ +int pitchvisitor::midiPitch( const TPitch& pitch ) +{ + SARNote note = ARNote::create(); + if (note) { + int octave = pitch.fOctave; + note->setName(pitch.fName); + note->SetOctave(octave); + note->SetAccidental(pitch.fAlter); + return note->midiPitch (octave); + } + return -1; +} + +} diff --git a/guidoar-dev/src/visitors/pitchvisitor.h b/guidoar-dev/src/visitors/pitchvisitor.h new file mode 100644 index 000000000..2b72de250 --- /dev/null +++ b/guidoar-dev/src/visitors/pitchvisitor.h @@ -0,0 +1,97 @@ +/* + GUIDO Library + Copyright (C) 2006 Grame + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + + Grame Research Laboratory, 9 rue du Garet, 69001 Lyon - France + research@grame.fr + +*/ + +#ifndef __pitchvisitor__ +#define __pitchvisitor__ + +#include + +#include "arexport.h" +#include "guidoelement.h" +#include "ARTypes.h" +#include "libguidoar.h" +#include "guidorational.h" +#include "tree_browser.h" +#include "visitor.h" + +namespace guido +{ + +/*! +\addtogroup visitors +@{ +*/ + +//______________________________________________________________________________ +/*! +\brief A visitor to extract the pitch of a score voice +*/ +class gar_export pitchvisitor : + public visitor, + public visitor, + public visitor +{ + public: + struct TPitch { + std::string fName; + int fOctave; + int fAlter; + }; + + pitchvisitor(chordPitchMode mode) : fPitch(0), fCMode(mode) { fBrowser.set(this); } + virtual ~pitchvisitor() {} + + /*! + \brief collects the pitches of a score voice + \param score a score + \param voice the voice index (0 based) + \param outpitch a vector that collects the pitch values + */ + virtual void pitch(const Sguidoelement& score, int voice, std::vector* outpitch); + static int midiPitch (const TPitch& pitch); + + protected: + virtual void storePitch( SARNote& elt, TPitch& dst ); + virtual void visitStart( SARVoice& elt ); + virtual void visitStart( SARChord& elt ); + virtual void visitStart( SARNote& elt ); + virtual void visitEnd ( SARVoice& elt ); + virtual void visitEnd ( SARChord& elt ); + virtual void stop (bool state=true) { fBrowser.stop (state); } + + int fTargetVoice, fCurrentVoice; + std::vector* fPitch; + TPitch fCurrentChordPitch; + bool fInChord; + chordPitchMode fCMode; + int fCurrentOctave; + int fCurrentChordMidiPitch; + + tree_browser fBrowser; +}; + +/*! @} */ + +} // namespace + +#endif diff --git a/guidoar-dev/src/visitors/rythmvisitor.cpp b/guidoar-dev/src/visitors/rythmvisitor.cpp new file mode 100644 index 000000000..a86c1e9f2 --- /dev/null +++ b/guidoar-dev/src/visitors/rythmvisitor.cpp @@ -0,0 +1,81 @@ +/* + + MusicXML Library + Copyright (C) 2006-2009 Grame + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + + Grame Research Laboratory, 9 rue du Garet, 69001 Lyon - France + research@grame.fr + +*/ + +#include + +#include "ARChord.h" +#include "ARNote.h" +#include "AROthers.h" +#include "rythmvisitor.h" +#include "tree_browser.h" + +using namespace std; + +namespace guido +{ + +//______________________________________________________________________________ +void rythmvisitor::rythm(const Sguidoelement& score, int voice, std::vector* outrythm) +{ + fInChord = false; + fTargetVoice = voice; + fCurrentVoice = 0; + fRythm = outrythm; + fCurrentNoteDuration = ARNote::getDefaultDuration(); + fCurrentDots = 0; + if (score) fBrowser.browse (*score); +} + +//______________________________________________________________________________ +// the visit methods +//______________________________________________________________________________ +void rythmvisitor::visitStart( SARVoice& elt ) +{ + stop(fCurrentVoice != fTargetVoice); + fInChord = false; + fCurrentNoteDuration = ARNote::getDefaultDuration(); + fCurrentDots = 0; +} + +//______________________________________________________________________________ +void rythmvisitor::visitEnd ( SARVoice& elt ) +{ + fCurrentVoice++; + stop(fCurrentVoice > fTargetVoice); +} + +//______________________________________________________________________________ +void rythmvisitor::visitStart( SARChord& elt ) { fInChord = true; } +void rythmvisitor::visitEnd ( SARChord& elt ) { stop(fInChord=false); } + +//______________________________________________________________________________ +void rythmvisitor::visitStart( SARNote& elt ) +{ + rational duration = elt->totalduration(fCurrentNoteDuration, fCurrentDots); + fRythm->push_back(duration); + if ( fInChord ) stop(true); // done for chords: get the first note duration only +} + + +} diff --git a/guidoar-dev/src/visitors/rythmvisitor.h b/guidoar-dev/src/visitors/rythmvisitor.h new file mode 100644 index 000000000..02770e6b0 --- /dev/null +++ b/guidoar-dev/src/visitors/rythmvisitor.h @@ -0,0 +1,86 @@ +/* + GUIDO Library + Copyright (C) 2006 Grame + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + + Grame Research Laboratory, 9 rue du Garet, 69001 Lyon - France + research@grame.fr + +*/ + +#ifndef __rythmvisitor__ +#define __rythmvisitor__ + +#include + +#include "arexport.h" +#include "guidoelement.h" +#include "ARTypes.h" +#include "guidorational.h" +#include "tree_browser.h" +#include "visitor.h" + +namespace guido +{ + +/*! +\addtogroup visitors +@{ +*/ + +//______________________________________________________________________________ +/*! +\brief A visitor to extract the rythm of a score voice +*/ +class gar_export rythmvisitor : + public visitor, + public visitor, + public visitor +{ + public: + rythmvisitor() : fRythm(0) { fBrowser.set(this); } + virtual ~rythmvisitor() {} + + /*! + \brief collects the rythm of a score voice + \param score a score + \param voice the voice index (0 based) + \param outrythm a vector that collects the rythm values + */ + virtual void rythm(const Sguidoelement& score, int voice, std::vector* outrythm); + + protected: + virtual void visitStart( SARVoice& elt ); + virtual void visitStart( SARChord& elt ); + virtual void visitStart( SARNote& elt ); + virtual void visitEnd ( SARVoice& elt ); + virtual void visitEnd ( SARChord& elt ); + virtual void stop (bool state=true) { fBrowser.stop (state); } + + int fTargetVoice, fCurrentVoice; + std::vector* fRythm; + bool fInChord; + rational fCurrentNoteDuration; + int fCurrentDots; + + tree_browser fBrowser; +}; + +/*! @} */ + +} // namespace + +#endif diff --git a/guidoar-dev/src/visitors/unrolled_guido_browser.cpp b/guidoar-dev/src/visitors/unrolled_guido_browser.cpp new file mode 100644 index 000000000..b9cceb5d7 --- /dev/null +++ b/guidoar-dev/src/visitors/unrolled_guido_browser.cpp @@ -0,0 +1,207 @@ +/* + + MusicXML Library + Copyright (C) 2006 Grame + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + + Grame Research Laboratory, 9 rue du Garet, 69001 Lyon - France + research@grame.fr + +*/ + +#ifdef WIN32 +# pragma warning (disable : 4786) +#endif + +#include +#include + +#include "ARNote.h" +#include "AROthers.h" +#include "ARTag.h" +#include "guidoelement.h" +#include "unrolled_guido_browser.h" + +using namespace std; +namespace guido +{ + +//______________________________________________________________________________ +unrolled_guido_browser::unrolled_guido_browser(basevisitor* v) : fVisitor(v) { reset(); } +void unrolled_guido_browser::enter (Sguidoelement& t) { t->acceptIn(*fVisitor); } +void unrolled_guido_browser::leave (Sguidoelement& t) { t->acceptOut(*fVisitor); } + +//______________________________________________________________________________ +void unrolled_guido_browser::reset() +{ + fRepeatMap.clear(); // clear the map of backward repeat measures + fJumpsMap.clear(); // clear the map of jumps locations + fWriteImplicit = true; // for repeat bars to the top of the score + fCurrentNoteState.duration = rational(1,4); + fCurrentNoteState.dots = 0; + fCurrentNoteState.octave = 1; +} + +//______________________________________________________________________________ +void unrolled_guido_browser::browse (Sguidoelement& elt) { elt->acceptIn(*this); } + +void unrolled_guido_browser::visitStart( Sguidoelement& elt) +{ + enter(elt); + ctree::literator iter; + for (iter = elt->lbegin(); iter != elt->lend(); iter++) + browse(*iter); + leave(elt); +} + +//______________________________________________________________________________ +// we need to force writing implicit notes values (duration, dots, octave) at each +// possible jump point in order to avoid incorrect current notes status at jump time +void unrolled_guido_browser::visitStart( SARNote& elt) +{ + int octave = elt->GetOctave(); + if (!ARNote::implicitOctave(octave)) fCurrentNoteState.octave = octave; + rational dur = elt->duration(); + if (!ARNote::implicitDuration (dur)) { + fCurrentNoteState.duration = dur; + fCurrentNoteState.dots = 0; + } + int dots = elt->GetDots(); + if (dots) fCurrentNoteState.dots = dots; + + if (fWriteImplicit) { + elt->SetOctave( fCurrentNoteState.octave ); + elt->SetDots( fCurrentNoteState.dots ); + *(elt) = fCurrentNoteState.duration; + fWriteImplicit = false; + } + elt->acceptIn(*fVisitor); +} + +//______________________________________________________________________________ +void unrolled_guido_browser::visitStart( SARRepeatBegin& elt) +{ + fStoreIterator = &fForwardRepeat; + fWriteImplicit = true; // force writing implicit note values (duration, octave and dots) +} + +//______________________________________________________________________________ +void unrolled_guido_browser::visitStart( SARRepeatEnd& elt) +{ + if (fRepeatMap[elt] == 0) { + fNextIterator = fForwardRepeat; // jump to fForwardRepeat at next iteration + fRepeatMap[elt] = 1; + } +} + +//______________________________________________________________________________ +bool unrolled_guido_browser::jump(ctree::literator where, Sguidoelement elt) +{ + if (fJumpsMap[elt] == 0) { + fRepeatMap.clear(); // reset repeat sections + fNextIterator = where; // set next iteration + fJumpsMap[elt] = 1; + return true; + } + return false; +} + +//______________________________________________________________________________ +void unrolled_guido_browser::visitStart( SARDaCapo& elt) +{ + jump (fFirstMeasure, elt); +} + +//______________________________________________________________________________ +void unrolled_guido_browser::visitStart( SARDaCoda& elt) +{ + if (fCodaIterator != fEndIterator) + jump (fCodaIterator, elt); // only if coda sign has already been met +} + +//______________________________________________________________________________ +void unrolled_guido_browser::visitStart( SARDalSegno& elt) +{ + if (fSegnoIterator != fEndIterator) + jump (fSegnoIterator, elt); // only if segno sign has already been met +} + +//______________________________________________________________________________ +void unrolled_guido_browser::visitStart( SARDalSegnoAlFine& elt) +{ + if ( (fSegnoIterator != fEndIterator) && (jump (fSegnoIterator, elt))) + fEndIterator = fFineIterator; +} + +//______________________________________________________________________________ +void unrolled_guido_browser::visitStart( SARDaCapoAlFine& elt) +{ + if (jump (fFirstMeasure, elt)) + fEndIterator = fFineIterator; +} + +//______________________________________________________________________________ +void unrolled_guido_browser::visitStart( SARSegno& elt ) + { fStoreIterator = &fSegnoIterator; fWriteImplicit = true; } + +//______________________________________________________________________________ +void unrolled_guido_browser::visitStart( SARCoda& elt ) + { fStoreIterator = &fCodaIterator; fWriteImplicit = true; } + +//______________________________________________________________________________ +void unrolled_guido_browser::visitStart( SARFine& elt ) { fStoreIterator = &fFineIterator; } + + +//______________________________________________________________________________ +// control all of the tree browsing is in charge of the SARVoice visit. +// +// Jumps are under control of fNextIterator which could be modified by the +// measure visit. Anchor points for future jumps (like segno) are stored +// at SARVoice level using fStoreIterator pointer. +// +// visit methods can use the fStoreIterator pointer to store the current iterator +// to any ctree::literator. +// +void unrolled_guido_browser::visitStart( SARVoice& elt) +{ + // first initializes the iterators used to broswe the tree + // segno and coda are initialized to the end of the measures list + fEndIterator = fFineIterator = elt->elements().end(); + fSegnoIterator= fCodaIterator = fEndIterator; + // stores the first measures and makes a provision for the forward repeat location + ctree::literator iter = elt->elements().begin(); + fFirstMeasure = fForwardRepeat = iter; + fStoreIterator = 0; + + reset(); + + Sguidoelement gelt = elt; + enter(gelt); // normal visit of the part (pass thru) + // while we're not at the end location (elements().end() is checked for safety reasons only) + while ((iter != fEndIterator) && (iter != elt->elements().end())) { + fNextIterator = iter; + fNextIterator++; // default value for next iterator is the next measure + browse(*iter); // browse the measure + if (fStoreIterator) { // check if we need to store the current iterator + *fStoreIterator = ++iter; // actually stores the next item (jumps items are skipped) + fStoreIterator = 0; + } + iter = fNextIterator; // switch to next iterator (which may be changed by the measure visit) + } + leave(gelt); // normal visit of the part (pass thru) +} + +} diff --git a/guidoar-dev/src/visitors/unrolled_guido_browser.h b/guidoar-dev/src/visitors/unrolled_guido_browser.h new file mode 100644 index 000000000..d58207023 --- /dev/null +++ b/guidoar-dev/src/visitors/unrolled_guido_browser.h @@ -0,0 +1,134 @@ +/* + + MusicXML Library + Copyright � Grame 2007 + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + + Grame Research Laboratory, 9, rue du Garet 69001 Lyon - France + research@grame.fr + +*/ + +#ifndef __unrolled_guido_browser__ +#define __unrolled_guido_browser__ + +#include + +#include "ARTypes.h" +#include "browser.h" +#include "arexport.h" +#include "guidorational.h" +#include "visitor.h" + +namespace guido +{ + +/*! +\addtogroup visitors +@{ +*/ + +//______________________________________________________________________________ +/*! +\brief An guido AR tree browser that "unroll" the score. + + To "unroll" the score, structural information denoted by \b repeat, + \b ending, \b coda and \b segno signs is interpreted and the score + is visited similarly to a musician that would play the score ie: + for example a section repeated twice is visited twice. + + The unrolled_guido_browser makes use of iterators collected along the visit + and makes arbitrary jumps to these iterators to modify the tree visit. + + When visiting measures, forwarding the visit to the embedded visitor depends on the current state. + In particular, it is verified that the current time a given measure is played corresponds to the expected + time (if any), and that we're not currently jumping to a coda, which location could be unknown at the + time of the jump. +*/ +class gar_export unrolled_guido_browser : public browser, + public visitor, + public visitor, + public visitor, + public visitor, + public visitor, + public visitor, + public visitor, + public visitor, + public visitor, + public visitor, + public visitor, + public visitor, + public visitor, + public visitor, + public visitor, + public visitor +{ + private: + typedef struct { rational duration; int dots; int octave; } notestate; // current implicit notes state + + std::map fRepeatMap; // used to avoid loops in scores + std::map fJumpsMap; // used to avoid loops in scores + bool fWriteImplicit; ///< a boolean to control implicit notes values (for jumps and repeated sections) + notestate fCurrentNoteState; + + void reset(); + bool jump(ctree::literator where, Sguidoelement elt); + + protected: + basevisitor* fVisitor; + + ctree::literator fFirstMeasure; ///< the first measure iterator + ctree::literator fForwardRepeat; ///< the forward repeat location + ctree::literator fEndIterator; ///< indicates the end of to visit + ctree::literator fNextIterator; ///< indicates the next elt to visit + ctree::literator fSegnoIterator; ///< the segno location + ctree::literator fCodaIterator; ///< the segno location + ctree::literator fFineIterator; ///< the fine location + ctree::literator* fStoreIterator; ///< a pointer to store the current iterator + + virtual void visitStart( SARRepeatBegin& elt ); + virtual void visitStart( SARRepeatEnd& elt ); + virtual void visitStart( SARDaCapo& elt ); + virtual void visitStart( SARDaCapoAlFine& elt ); + virtual void visitStart( SARDaCoda& elt ); + virtual void visitStart( SARDalSegno& elt ); + virtual void visitStart( SARDalSegnoAlFine& elt); + virtual void visitStart( SARSegno& elt ); + virtual void visitStart( SARCoda& elt ); + virtual void visitStart( SARFine& elt ); + virtual void visitStart( SARVolta& elt ) {} + virtual void visitStart( SARVoltaBegin& elt ) {} + virtual void visitStart( SARVoltaEnd& elt ) {} + virtual void visitStart( SARNote& elt ); + virtual void visitStart( SARVoice& elt ); + virtual void visitStart( Sguidoelement& elt ); + + + public: + unrolled_guido_browser(basevisitor* v); + virtual ~unrolled_guido_browser() {} + + virtual void browse (Sguidoelement& t); + virtual void enter (Sguidoelement& t); + virtual void leave (Sguidoelement& t); +}; + +/*! @} */ + +} // namespace MusicXML + + +#endif diff --git a/guidoar-dev/src/visitors/visitable.h b/guidoar-dev/src/visitors/visitable.h new file mode 100644 index 000000000..69c75e0e2 --- /dev/null +++ b/guidoar-dev/src/visitors/visitable.h @@ -0,0 +1,45 @@ +/* + Copyright © Grame 2006 + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + + Grame Research Laboratory, 9, rue du Garet 69001 Lyon - France + research@grame.fr + +*/ + +#ifndef __visitable__ +#define __visitable__ + +#include "basevisitor.h" + +namespace guido +{ + +/*! + * \brief base class for visitable objects + */ +class visitable +{ + public: + virtual ~visitable() {} + virtual void acceptIn(basevisitor&) {} + virtual void acceptOut(basevisitor&) {} +}; + +} // namespace + + +#endif diff --git a/guidoar-dev/src/visitors/visitor.h b/guidoar-dev/src/visitors/visitor.h new file mode 100644 index 000000000..a93408954 --- /dev/null +++ b/guidoar-dev/src/visitors/visitor.h @@ -0,0 +1,53 @@ +/* + Copyright � Grame 2006 + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + + Grame Research Laboratory, 9, rue du Garet 69001 Lyon - France + research@grame.fr + +*/ + +#ifndef __visitor__ +#define __visitor__ + +#include "basevisitor.h" + +#ifdef APPLE +#pragma clang diagnostic ignored "-Woverloaded-virtual" +#endif + +namespace guido +{ + +/*! +\addtogroup visitors +@{ +*/ + +template class visitor : virtual public basevisitor +{ + public: + virtual ~visitor() {} + virtual void visitStart( C& ) {}; + virtual void visitEnd ( C& ) {}; +}; + +/*! @} */ + +} // namespace + + +#endif diff --git a/guidoar-dev/tools/Makefile b/guidoar-dev/tools/Makefile new file mode 100644 index 000000000..509e7045d --- /dev/null +++ b/guidoar-dev/tools/Makefile @@ -0,0 +1,99 @@ + + +system := $(shell uname -s) +ifeq ($(system), Darwin) + lib = -F../cmake/Release/ -framework guidoar +else +ifeq ($(system), MINGW32_NT-6.1) + lib = ../cmake/Release/guidoar.lib +else + lib = -lguidoar +endif +endif + + +DESC = $(wildcard desc/*.h) +TOOLS = $(patsubst desc/%.h, bin/%, $(DESC)) guidoduration +SRC = $(patsubst bin/%, %.cpp, $(TOOLS)) +CXXFLAGS = -I../src/interface $(lib) + +makebase = sed -e 's/__desc__/$(1)/' template.cxx | sed -e 's/__T__/$(2)/' | sed -e 's/__operator__/$(3)/' +makecpp = $(call makebase,$(1),$(2),$(3)) | sed -e 's/__strict__/strict_/' > $(1).cpp +makerelaxedcpp = $(call makebase,$(1),$(2),$(3)) | sed -e 's/__strict__//' > $(1).cpp + +all: $(TOOLS) + +src: $(SRC) + +guidomirror.cpp : template.cxx desc/guidomirror.h + $(call makecpp,guidomirror,const char*,guidoGMirror) + +guidotranspose.cpp : template.cxx desc/guidotranspose.h + $(call makecpp,guidotranspose,const char*,guidoGTranpose) + +guidotransposei.cpp : template.cxx desc/guidotransposei.h + $(call makecpp,guidotransposei,int,guidoVTranpose) + +guidotop.cpp : template.cxx desc/guidotop.h + $(call makecpp,guidotop,const char*,guidoGTop) + +guidotopn.cpp : template.cxx desc/guidotopn.h + $(call makecpp,guidotopn,int,guidoVTop) + +guidobottom.cpp : template.cxx desc/guidobottom.h + $(call makecpp,guidobottom,const char*,guidoGBottom) + +guidobottomn.cpp : template.cxx desc/guidobottomn.h + $(call makecpp,guidobottomn,int,guidoVBottom) + +guidohead.cpp : template.cxx desc/guidohead.h + $(call makecpp,guidohead,const char*,guidoGHead) + +guidoheadt.cpp : template.cxx desc/guidoheadt.h + $(call makecpp,guidoheadt,rational,guidoVHead) + +guidotail.cpp : template.cxx desc/guidotail.h + $(call makecpp,guidotail,const char*,guidoGTail) + +guidotailt.cpp : template.cxx desc/guidotailt.h + $(call makecpp,guidotailt,rational,guidoVTail) + +guidoevhead.cpp : template.cxx desc/guidoevhead.h + $(call makecpp,guidoevhead,const char*,guidoGEHead) + +guidoevheadn.cpp : template.cxx desc/guidoevheadn.h + $(call makecpp,guidoevheadn,int,guidoVEHead) + +guidoevtail.cpp : template.cxx desc/guidoevtail.h + $(call makecpp,guidoevtail,const char*,guidoGETail) + +guidoevtailn.cpp : template.cxx desc/guidoevtailn.h + $(call makecpp,guidoevtailn,int,guidoVETail) + +guidoseq.cpp : template.cxx desc/guidoseq.h + $(call makerelaxedcpp,guidoseq,const char*,guidoGSeq) + +guidopar.cpp : template.cxx desc/guidopar.h + $(call makerelaxedcpp,guidopar,const char*,guidoGPar) + +guidoparright.cpp : template.cxx desc/guidoparright.h + $(call makecpp,guidoparright,const char*,guidoGRPar) + +guidosetduration.cpp : template.cxx desc/guidosetduration.h + $(call makecpp,guidosetduration,const char*,guidoGSetDuration) + +guidosetdurationd.cpp : template.cxx desc/guidosetdurationd.h + $(call makecpp,guidosetdurationd,rational,guidoVSetDuration) + +guidomultduration.cpp : template.cxx desc/guidomultduration.h + $(call makecpp,guidomultduration,float,guidoVMultDuration) + +install: + cp bin/* $(HOME)/bin + +clean: + rm -f $(SRC) $(TOOLS) + +bin/%: %.cpp + @[ -d bin ] || mkdir bin + g++ -I../src/interface $(lib) $< -o $@ diff --git a/guidoar-dev/tools/common.cxx b/guidoar-dev/tools/common.cxx new file mode 100644 index 000000000..0817bd021 --- /dev/null +++ b/guidoar-dev/tools/common.cxx @@ -0,0 +1,114 @@ + +#include +#include +#include +#include + +#ifdef WIN32 +# pragma warning (disable : 4786 4996) +static const char* basename (const char* name) { + const char * sep = strrchr (name, '\\'); + return sep ? ++sep : name; +} +# define _CRT_SECURE_NO_DEPRECATE +#else +# include +#endif + + +#include "libguidoar.h" + +using namespace std; +using namespace guido; + +static const char* scoredesc = "score may refer to a file, standard input when '-' or litteral gmn code"; + +//_______________________________________________________________________________ +bool floatVal (const char* str, float& val) +{ + int n = sscanf(str, "%f", &val); + return n == 1; +} + +//_______________________________________________________________________________ +bool intVal (const char* str, int& val) +{ + int n = sscanf(str, "%d", &val); + return n == 1; +} + +//_______________________________________________________________________________ +bool rationalVal (const char* str, rational& val) +{ + int num, denom; + int n = sscanf(str, "%d/%d", &num, &denom); + if (n==2) { + val.set (num, denom); + return true; + } + return false; +} + +//_______________________________________________________________________________ +static bool checkfile (const char* file) +{ + FILE* fd = fopen(file, "r"); + if (fd) { + fclose (fd); + return true; + } + return false; +} + +//_______________________________________________________________________________ +static bool readfile (FILE * fd, string& content) +{ + if (!fd) return false; + do { + int c = getc(fd); + if (feof(fd) || ferror(fd)) break; + content += c; + } while (true); + return ferror(fd) == 0; +} + +//_______________________________________________________________________________ +void error(garErr err) +{ + switch (err) { + case kNoErr: + cerr << "no error" << endl; + break; + case kInvalidFile: + cerr << "invalid file" << endl; + break; + case kInvalidArgument: + cerr << "invalid argument" << endl; + break; + case kOperationFailed: + cerr << "operation failed" << endl; + break; + } +} + +//_______________________________________________________________________________ +static bool gmnVal (const char* str, string& val, string& _stdin) +{ + string pipe ("-"); + if (pipe == str) { // value to be read from stdin + if (_stdin.empty() && !readfile (stdin, _stdin)) goto err; + val = _stdin; + } + else if (checkfile (str)) { // value to be read from a file + FILE* fd = fopen(str, "r"); + bool ret = readfile (fd, val); + fclose (fd); + if (!ret) goto err; + } + else val = str; // not a file, assume it is gmn code + return true; + +err: + cerr << "error while reading score \"" << str << "\"" << endl; + return false; +} diff --git a/guidoar-dev/tools/desc/guidobottom.h b/guidoar-dev/tools/desc/guidobottom.h new file mode 100644 index 000000000..ea123a5ac --- /dev/null +++ b/guidoar-dev/tools/desc/guidobottom.h @@ -0,0 +1,4 @@ + +static const char* gDesc = "cut bottom voices of score"; +static const char* gArg = "voicescore"; +static const char* gArgDesc = "a score used as voices specifier"; diff --git a/guidoar-dev/tools/desc/guidobottomn.h b/guidoar-dev/tools/desc/guidobottomn.h new file mode 100644 index 000000000..bac85abe5 --- /dev/null +++ b/guidoar-dev/tools/desc/guidobottomn.h @@ -0,0 +1,4 @@ + +static const char* gDesc = "cut bottom voices of score"; +static const char* gArg = "n"; +static const char* gArgDesc = "a voices count"; diff --git a/guidoar-dev/tools/desc/guidoevhead.h b/guidoar-dev/tools/desc/guidoevhead.h new file mode 100644 index 000000000..7dcb329da --- /dev/null +++ b/guidoar-dev/tools/desc/guidoevhead.h @@ -0,0 +1,4 @@ + +static const char* gDesc = "cut head events of score"; +static const char* gArg = "headscore"; +static const char* gArgDesc = "a score used as events count specifier"; diff --git a/guidoar-dev/tools/desc/guidoevheadn.h b/guidoar-dev/tools/desc/guidoevheadn.h new file mode 100644 index 000000000..06cad91ea --- /dev/null +++ b/guidoar-dev/tools/desc/guidoevheadn.h @@ -0,0 +1,4 @@ + +static const char* gDesc = "cut head events of score"; +static const char* gArg = "n"; +static const char* gArgDesc = "events count."; diff --git a/guidoar-dev/tools/desc/guidoevtail.h b/guidoar-dev/tools/desc/guidoevtail.h new file mode 100644 index 000000000..0224c9705 --- /dev/null +++ b/guidoar-dev/tools/desc/guidoevtail.h @@ -0,0 +1,4 @@ + +static const char* gDesc = "cut tail events of score"; +static const char* gArg = "tailscore"; +static const char* gArgDesc = "a score used as events count specifier"; diff --git a/guidoar-dev/tools/desc/guidoevtailn.h b/guidoar-dev/tools/desc/guidoevtailn.h new file mode 100644 index 000000000..793abe99c --- /dev/null +++ b/guidoar-dev/tools/desc/guidoevtailn.h @@ -0,0 +1,4 @@ + +static const char* gDesc = "cut tail events of score"; +static const char* gArg = "n"; +static const char* gArgDesc = "events count."; diff --git a/guidoar-dev/tools/desc/guidohead.h b/guidoar-dev/tools/desc/guidohead.h new file mode 100644 index 000000000..69a2972e6 --- /dev/null +++ b/guidoar-dev/tools/desc/guidohead.h @@ -0,0 +1,4 @@ + +static const char* gDesc = "cut the head of score"; +static const char* gArg = "headscore"; +static const char* gArgDesc = "a score used as duration specifier"; diff --git a/guidoar-dev/tools/desc/guidoheadt.h b/guidoar-dev/tools/desc/guidoheadt.h new file mode 100644 index 000000000..bcbaf4967 --- /dev/null +++ b/guidoar-dev/tools/desc/guidoheadt.h @@ -0,0 +1,4 @@ + +static const char* gDesc = "cut the head of score"; +static const char* gArg = "time"; +static const char* gArgDesc = "a date expressed as a rational (i.e. 'n/d') where 1 is a whole note."; diff --git a/guidoar-dev/tools/desc/guidomirror.h b/guidoar-dev/tools/desc/guidomirror.h new file mode 100644 index 000000000..9df3f611d --- /dev/null +++ b/guidoar-dev/tools/desc/guidomirror.h @@ -0,0 +1,4 @@ + +static const char* gDesc = "mirror score pitches around a fixed pitch"; +static const char* gArg = "pitchcore"; +static const char* gArgDesc = "a score used as fixed pitch specifier (first voice, first note)"; diff --git a/guidoar-dev/tools/desc/guidomultduration.h b/guidoar-dev/tools/desc/guidomultduration.h new file mode 100644 index 000000000..f81f43530 --- /dev/null +++ b/guidoar-dev/tools/desc/guidomultduration.h @@ -0,0 +1,4 @@ + +static const char* gDesc = "scale score duration"; +static const char* gArg = "f"; +static const char* gArgDesc = "a scaling factor expressed as a float value."; diff --git a/guidoar-dev/tools/desc/guidopar.h b/guidoar-dev/tools/desc/guidopar.h new file mode 100644 index 000000000..55a42346a --- /dev/null +++ b/guidoar-dev/tools/desc/guidopar.h @@ -0,0 +1,4 @@ + +static const char* gDesc = "put score and scores in parallel"; +static const char* gArg = "[scores...]"; +static const char* gArgDesc = "a list of scores"; diff --git a/guidoar-dev/tools/desc/guidoparright.h b/guidoar-dev/tools/desc/guidoparright.h new file mode 100644 index 000000000..e168c8389 --- /dev/null +++ b/guidoar-dev/tools/desc/guidoparright.h @@ -0,0 +1,4 @@ + +static const char* gDesc = "put score and score2 in parallel, right aligned"; +static const char* gArg = "score2"; +static const char* gArgDesc = "a score"; diff --git a/guidoar-dev/tools/desc/guidoseq.h b/guidoar-dev/tools/desc/guidoseq.h new file mode 100644 index 000000000..7c01915f0 --- /dev/null +++ b/guidoar-dev/tools/desc/guidoseq.h @@ -0,0 +1,4 @@ + +static const char* gDesc = "put score and scores in sequence"; +static const char* gArg = "[scores...]"; +static const char* gArgDesc = "a list of scores"; diff --git a/guidoar-dev/tools/desc/guidosetduration.h b/guidoar-dev/tools/desc/guidosetduration.h new file mode 100644 index 000000000..9ea2595ba --- /dev/null +++ b/guidoar-dev/tools/desc/guidosetduration.h @@ -0,0 +1,4 @@ + +static const char* gDesc = "stretch score to a duration d"; +static const char* gArg = "dscore"; +static const char* gArgDesc = "a score used as duration specifier."; diff --git a/guidoar-dev/tools/desc/guidosetdurationd.h b/guidoar-dev/tools/desc/guidosetdurationd.h new file mode 100644 index 000000000..b1123f978 --- /dev/null +++ b/guidoar-dev/tools/desc/guidosetdurationd.h @@ -0,0 +1,4 @@ + +static const char* gDesc = "stretch score to a duration d"; +static const char* gArg = "d"; +static const char* gArgDesc = "a duration expressed as a rational (i.e. 'n/d') where 1 is a whole note."; diff --git a/guidoar-dev/tools/desc/guidotail.h b/guidoar-dev/tools/desc/guidotail.h new file mode 100644 index 000000000..b08e82f9f --- /dev/null +++ b/guidoar-dev/tools/desc/guidotail.h @@ -0,0 +1,4 @@ + +static const char* gDesc = "cut the tail of score"; +static const char* gArg = "headscore"; +static const char* gArgDesc = "a score used as duration specifier"; diff --git a/guidoar-dev/tools/desc/guidotailt.h b/guidoar-dev/tools/desc/guidotailt.h new file mode 100644 index 000000000..05277e734 --- /dev/null +++ b/guidoar-dev/tools/desc/guidotailt.h @@ -0,0 +1,4 @@ + +static const char* gDesc = "cut the tail of score"; +static const char* gArg = "time"; +static const char* gArgDesc = "a date expressed as a rational (i.e. 'n/d') where 1 is a whole note."; diff --git a/guidoar-dev/tools/desc/guidotop.h b/guidoar-dev/tools/desc/guidotop.h new file mode 100644 index 000000000..562c57d19 --- /dev/null +++ b/guidoar-dev/tools/desc/guidotop.h @@ -0,0 +1,4 @@ + +static const char* gDesc = "cut top voices of score"; +static const char* gArg = "voicescore"; +static const char* gArgDesc = "a score used as voices specifier"; diff --git a/guidoar-dev/tools/desc/guidotopn.h b/guidoar-dev/tools/desc/guidotopn.h new file mode 100644 index 000000000..5474b4bf7 --- /dev/null +++ b/guidoar-dev/tools/desc/guidotopn.h @@ -0,0 +1,4 @@ + +static const char* gDesc = "cut top voices of score"; +static const char* gArg = "n"; +static const char* gArgDesc = "a voices count"; diff --git a/guidoar-dev/tools/desc/guidotranspose.h b/guidoar-dev/tools/desc/guidotranspose.h new file mode 100644 index 000000000..f7a00c6e4 --- /dev/null +++ b/guidoar-dev/tools/desc/guidotranspose.h @@ -0,0 +1,4 @@ + +static const char* gDesc = "transpose the input score"; +static const char* gArg = "pitchscore"; +static const char* gArgDesc = "a score used as pitch specifier using first voice, first note, lowest pitch"; diff --git a/guidoar-dev/tools/desc/guidotransposei.h b/guidoar-dev/tools/desc/guidotransposei.h new file mode 100644 index 000000000..fada7bfd6 --- /dev/null +++ b/guidoar-dev/tools/desc/guidotransposei.h @@ -0,0 +1,4 @@ + +static const char* gDesc = "transpose the input score"; +static const char* gArg = "interval"; +static const char* gArgDesc = "the transposing interval"; diff --git a/guidoar-dev/tools/guido2midi.cpp b/guidoar-dev/tools/guido2midi.cpp new file mode 100644 index 000000000..3a752ba85 --- /dev/null +++ b/guidoar-dev/tools/guido2midi.cpp @@ -0,0 +1,34 @@ +/* + + Copyright (C) 2003-2012 Grame + Grame Research Laboratory, 9 rue du Garet, 69001 Lyon - France + research@grame.fr + + This file is provided as an example of the MusicXML Library use. +*/ + +#include "common.cxx" + +//_______________________________________________________________________________ +static void usage(char * name) +{ + cerr << "usage: " << basename(name) << " score midifile" << endl; + cerr << " convert score to midifile" << endl; + cerr << " " << scoredesc << endl; + cerr << " midifile: the midi file name" << endl; + exit (1); +} + +//_______________________________________________________________________________ +int main(int argc, char *argv[]) +{ + if (argc != 3) usage(argv[0]); + + string gmn, _stdin; + if (!gmnVal (argv[1], gmn, _stdin)) return -1; + + const char * outfile = argv[2]; + garErr err = guido2midifile(gmn.c_str(), outfile); + if (err != kNoErr) error (err); + return err; +} diff --git a/guidoar-dev/tools/guido2unrolled.cpp b/guidoar-dev/tools/guido2unrolled.cpp new file mode 100644 index 000000000..137d73233 --- /dev/null +++ b/guidoar-dev/tools/guido2unrolled.cpp @@ -0,0 +1,30 @@ +/* + + Copyright (C) 2009-2012 Grame + Grame Research Laboratory, 9 rue du Garet, 69001 Lyon - France + research@grame.fr + + This file is provided as an example of the GuidoAR Library use. +*/ + +#include "common.cxx" + +//_______________________________________________________________________________ +static void usage(char * name) +{ + cerr << "usage: " << basename(name) << " score" << endl; + cerr << " generates an unrolled version of a score" << endl; + cerr << " " << scoredesc << endl; + exit (1); +} + +//_______________________________________________________________________________ +int main(int argc, char *argv[]) { + if (argc != 2) usage(argv[0]); + string gmn, _stdin; + if (!gmnVal (argv[1], gmn, _stdin)) return -1; + + garErr err = guido2unrolled (gmn.c_str(), cout); + if (err != kNoErr) error (err); + return err; +} diff --git a/guidoar-dev/tools/guidoapplypitch.cpp b/guidoar-dev/tools/guidoapplypitch.cpp new file mode 100644 index 000000000..05675c18b --- /dev/null +++ b/guidoar-dev/tools/guidoapplypitch.cpp @@ -0,0 +1,62 @@ +/* + + Copyright (C) 2009-2012 Grame + Grame Research Laboratory, 9 rue du Garet, 69001 Lyon - France + research@grame.fr + + This file is provided as an example of the GuidoAR Library use. + +*/ + +#include "common.cxx" + +//_______________________________________________________________________________ +static void usage(const char * name) +{ + cerr << "usage: " << name << " -once|-loop|-fbloop -low|-high score1 score2" << endl; + cerr << " applies the pitch profile of score1 to score2" << endl; + cerr << " " << scoredesc << endl; + cerr << " the options indicate the apply mode:" << endl; + cerr << " -once : applies the pitch profile only once" << endl; + cerr << " -loop : applies the pitch profile in a loop" << endl; + cerr << " -fbloop: applies the pitch profile in a forward-backward loop" << endl; + cerr << " -low : uses chords lowest pitch value" << endl; + cerr << " -high : uses chords highest pitch value" << endl; + exit (1); +} + +//_______________________________________________________________________________ +static TApplyMode getmode (const char * str) +{ + if (!strcmp(str, "-once")) return kApplyOnce; + if (!strcmp(str, "-loop")) return kApplyForwardLoop; + if (!strcmp(str, "-fbloop")) return kApplyForwardBackwardLoop; + return TApplyMode(-1); +} + +//_______________________________________________________________________________ +static chordPitchMode getpmode (const char * str) +{ + if (!strcmp(str, "-low")) return kUseLowest; + if (!strcmp(str, "-high")) return kUseHighest; + return chordPitchMode(-1); +} + +//_______________________________________________________________________________ +int main(int argc, char *argv[]) +{ + if (argc != 5) usage(argv[0]); + + TApplyMode mode = getmode(argv[1]); + if (mode < 0) usage(argv[0]); + chordPitchMode pmode = getpmode(argv[2]); + if (pmode < 0) usage(argv[0]); + + string pitch, gmn, _stdin; + if (!gmnVal (argv[3], pitch, _stdin)) return -1; + if (!gmnVal (argv[4], gmn, _stdin)) return -1; + + garErr err = guidoApplyPitch(gmn.c_str(), pitch.c_str(), mode, pmode, cout); + if (err != kNoErr) error (err); + return err; +} diff --git a/guidoar-dev/tools/guidoapplyrythm.cpp b/guidoar-dev/tools/guidoapplyrythm.cpp new file mode 100644 index 000000000..4471f4689 --- /dev/null +++ b/guidoar-dev/tools/guidoapplyrythm.cpp @@ -0,0 +1,50 @@ +/* + + Copyright (C) 2009-2012 Grame + Grame Research Laboratory, 9 rue du Garet, 69001 Lyon - France + research@grame.fr + + This file is provided as an example of the GuidoAR Library use. + +*/ + +#include "common.cxx" + +//_______________________________________________________________________________ +static void usage(const char * name) +{ + cerr << "usage: " << name << " -once|-loop|-fbloop score1 score2" << endl; + cerr << " applies the rythm of score1 to score2" << endl; + cerr << " " << scoredesc << endl; + cerr << " the options indicate the apply mode:" << endl; + cerr << " -once applies the rythmic structure only once" << endl; + cerr << " -loop applies the rythmic structure in a loop" << endl; + cerr << " -fbloop applies the rythmic structure in a forward-backward loop" << endl; + exit (1); +} + +//_______________________________________________________________________________ +static TApplyMode getmode (const char * str) +{ + if (!strcmp(str, "-once")) return kApplyOnce; + if (!strcmp(str, "-loop")) return kApplyForwardLoop; + if (!strcmp(str, "-fbloop")) return kApplyForwardBackwardLoop; + return TApplyMode(-1); +} + +//_______________________________________________________________________________ +int main(int argc, char *argv[]) +{ + if (argc != 4) usage(argv[0]); + + TApplyMode mode = getmode(argv[1]); + if (mode < 0) usage(argv[0]); + + string rythm, gmn, _stdin; + if (!gmnVal (argv[2], rythm, _stdin)) return -1; + if (!gmnVal (argv[3], gmn, _stdin)) return -1; + + garErr err = guidoApplyRythm(gmn.c_str(), rythm.c_str(), mode, cout); + if (err != kNoErr) error (err); + return err; +} diff --git a/guidoar-dev/tools/guidoarversion.cpp b/guidoar-dev/tools/guidoarversion.cpp new file mode 100644 index 000000000..2a47ad883 --- /dev/null +++ b/guidoar-dev/tools/guidoarversion.cpp @@ -0,0 +1,19 @@ +/* + + Copyright (C) 2012 Grame + Grame Research Laboratory, 9 rue du Garet, 69001 Lyon - France + research@grame.fr + + This file is provided as an example of the MusicXML Library use. +*/ + +#include +#include "libguidoar.h" +using namespace std; + +//_______________________________________________________________________________ +int main(int argc, char *argv[]) +{ + cout << guido::guidoarVersionStr() << endl; + return 0; +} diff --git a/guidoar-dev/tools/guidobottom.cpp b/guidoar-dev/tools/guidobottom.cpp new file mode 100644 index 000000000..43003faf3 --- /dev/null +++ b/guidoar-dev/tools/guidobottom.cpp @@ -0,0 +1,105 @@ +/* + this file is automatically generated from template.cxx + don't modify unles you're ready to loose your changes +*/ + +#include +#include +#include + +#include "common.cxx" + +#include "desc/guidobottom.h" + +//_______________________________________________________________________________ +static void usage(char * name) +{ + cerr << "usage: " << basename(name) << " score " << gArg << endl; + cerr << " " << gDesc << endl; + cerr << " " << scoredesc << endl; + cerr << " " << gArg << ": " << gArgDesc << endl; + exit (-1); +} + +//_______________________________________________________________________________ +template class operation +{ + typedef garErr (*TOperator)(const char*, T, ostream&); + TOperator fOperator; + string fScore; // the score argument + string fScoreArg; // to store the second score argument + vector fScoreArgs; // to store the second score argument + T fArg; + string fSdtIn; // intended to share stdin + + + bool readArg(const char* arg, int& value) const { return intVal (arg, value); } + bool readArg(const char* arg, float& value) const { return floatVal (arg, value); } + bool readArg(const char* arg, rational& value) const { return rationalVal (arg, value); } + bool readArg(const char* arg, string& value) { return gmnVal (arg, value, fSdtIn); } + bool readArg(const char* arg, const char*& value) { + if (gmnVal (arg, fScoreArg, fSdtIn)) { + value = fScoreArg.c_str(); + return true; + } + return false; + } + + public : + operation(TOperator op) : fOperator (op) {} + virtual ~operation() {} + + // strict run method: expects exaclty 2 arguments + bool strict_init (int argc, char* argv[]) { + if (argc != 3) return false; + if (!readArg (argv[1], fScore)) return false; + if (!readArg (argv[2], fArg)) return false; + return true; + } + + // relaxed run method: takes more than 2 arguments but only strings args are supported + bool init (int argc, char* argv[]) { + if (argc < 3) return false; + if (!readArg (argv[1], fScore)) return false; + for (int i=2; i op (guidoGBottom); + if (op.strict_init(argc, argv)) { + garErr err = op.strict_run (cout); + if (err != kNoErr) { + error (err); + return err; + } + } + else usage (argv[0]); + return 0; +} + diff --git a/guidoar-dev/tools/guidobottomn.cpp b/guidoar-dev/tools/guidobottomn.cpp new file mode 100644 index 000000000..747d6b316 --- /dev/null +++ b/guidoar-dev/tools/guidobottomn.cpp @@ -0,0 +1,105 @@ +/* + this file is automatically generated from template.cxx + don't modify unles you're ready to loose your changes +*/ + +#include +#include +#include + +#include "common.cxx" + +#include "desc/guidobottomn.h" + +//_______________________________________________________________________________ +static void usage(char * name) +{ + cerr << "usage: " << basename(name) << " score " << gArg << endl; + cerr << " " << gDesc << endl; + cerr << " " << scoredesc << endl; + cerr << " " << gArg << ": " << gArgDesc << endl; + exit (-1); +} + +//_______________________________________________________________________________ +template class operation +{ + typedef garErr (*TOperator)(const char*, T, ostream&); + TOperator fOperator; + string fScore; // the score argument + string fScoreArg; // to store the second score argument + vector fScoreArgs; // to store the second score argument + T fArg; + string fSdtIn; // intended to share stdin + + + bool readArg(const char* arg, int& value) const { return intVal (arg, value); } + bool readArg(const char* arg, float& value) const { return floatVal (arg, value); } + bool readArg(const char* arg, rational& value) const { return rationalVal (arg, value); } + bool readArg(const char* arg, string& value) { return gmnVal (arg, value, fSdtIn); } + bool readArg(const char* arg, const char*& value) { + if (gmnVal (arg, fScoreArg, fSdtIn)) { + value = fScoreArg.c_str(); + return true; + } + return false; + } + + public : + operation(TOperator op) : fOperator (op) {} + virtual ~operation() {} + + // strict run method: expects exaclty 2 arguments + bool strict_init (int argc, char* argv[]) { + if (argc != 3) return false; + if (!readArg (argv[1], fScore)) return false; + if (!readArg (argv[2], fArg)) return false; + return true; + } + + // relaxed run method: takes more than 2 arguments but only strings args are supported + bool init (int argc, char* argv[]) { + if (argc < 3) return false; + if (!readArg (argv[1], fScore)) return false; + for (int i=2; i op (guidoVBottom); + if (op.strict_init(argc, argv)) { + garErr err = op.strict_run (cout); + if (err != kNoErr) { + error (err); + return err; + } + } + else usage (argv[0]); + return 0; +} + diff --git a/guidoar-dev/tools/guidocheck.cpp b/guidoar-dev/tools/guidocheck.cpp new file mode 100644 index 000000000..ec69925b5 --- /dev/null +++ b/guidoar-dev/tools/guidocheck.cpp @@ -0,0 +1,33 @@ +/* + + Copyright (C) 2012 Grame + Grame Research Laboratory, 9 rue du Garet, 69001 Lyon - France + research@grame.fr + + This file is provided as an example of the MusicXML Library use. +*/ + +#include "common.cxx" + +//_______________________________________________________________________________ +static void usage(char * name) +{ + cerr << "usage: " << basename(name) << " score " << endl; + cerr << " check score syntax" << endl; + cerr << " " << scoredesc << endl; + exit (-1); +} + +//_______________________________________________________________________________ +int main (int argc, char* argv[]) +{ + if (argc != 2) usage(argv[0]); + string gmn, _stdin; + if (!gmnVal (argv[1], gmn, _stdin)) return -1; + if (!guidocheck (gmn.c_str())) { + cerr << "invalid gmn code" << endl; + return 1; + } + return 0; +} + diff --git a/guidoar-dev/tools/guidoduration.cpp b/guidoar-dev/tools/guidoduration.cpp new file mode 100644 index 000000000..304dfe213 --- /dev/null +++ b/guidoar-dev/tools/guidoduration.cpp @@ -0,0 +1,32 @@ +/* + + Copyright (C) 2003-2012 Grame + Grame Research Laboratory, 9 rue du Garet, 69001 Lyon - France + research@grame.fr + + This file is provided as an example of the MusicXML Library use. +*/ + +#include "common.cxx" + +//_______________________________________________________________________________ +static void usage(char * name) +{ + cerr << "usage: " << basename(name) << " score" << endl; + cerr << " gives a score duration as a rational value (1 is a whole note)." << endl; + cerr << " " << scoredesc << endl; + exit (1); +} + +//_______________________________________________________________________________ +int main(int argc, char *argv[]) +{ + if (argc != 2) usage(argv[0]); + + string gmn, _stdin; + if (!gmnVal (argv[1], gmn, _stdin)) return -1; + + rational duration = guidoDuration(gmn.c_str()); + cout << duration << endl; + return (duration.getNumerator() >= 0) ? 0 : -1; +} diff --git a/guidoar-dev/tools/guidoev2time.cpp b/guidoar-dev/tools/guidoev2time.cpp new file mode 100644 index 000000000..49f615eb1 --- /dev/null +++ b/guidoar-dev/tools/guidoev2time.cpp @@ -0,0 +1,37 @@ +/* + + Copyright (C) 2009-2012 Grame + Grame Research Laboratory, 9 rue du Garet, 69001 Lyon - France + research@grame.fr + + This file is provided as an example of the GuidoAR Library use. +*/ + +#include "common.cxx" + +//_______________________________________________________________________________ +static void usage(char * name) +{ + cerr << "usage: " << basename(name) << " score evIndex [voiceIndex]" << endl; + cerr << " converts an event index to a time position" << endl; + cerr << " " << scoredesc << endl; + cerr << " evIndex : the index of the target event (1 based)" << endl; + cerr << " voiceIndex: optional voice index (defaults to the first voice)" << endl; + exit (-1); +} + +//_______________________________________________________________________________ +int main(int argc, char *argv[]) +{ + if ((argc != 3) && (argc != 4)) usage(argv[0]); + + string gmn, _stdin; + if (!gmnVal (argv[1], gmn, _stdin)) return -1; + int eventIndex = 0; + if (!intVal(argv[2], eventIndex)) usage(argv[0]); + int voiceIndex = 1; // default voice is 1 + if ((argc == 4) && !intVal(argv[3], voiceIndex)) usage(argv[0]); + + cout << string(guidoEv2Time(gmn.c_str(), eventIndex-1, voiceIndex-1)) << endl; + return 0; +} diff --git a/guidoar-dev/tools/guidoevhead.cpp b/guidoar-dev/tools/guidoevhead.cpp new file mode 100644 index 000000000..8e16e7a78 --- /dev/null +++ b/guidoar-dev/tools/guidoevhead.cpp @@ -0,0 +1,105 @@ +/* + this file is automatically generated from template.cxx + don't modify unles you're ready to loose your changes +*/ + +#include +#include +#include + +#include "common.cxx" + +#include "desc/guidoevhead.h" + +//_______________________________________________________________________________ +static void usage(char * name) +{ + cerr << "usage: " << basename(name) << " score " << gArg << endl; + cerr << " " << gDesc << endl; + cerr << " " << scoredesc << endl; + cerr << " " << gArg << ": " << gArgDesc << endl; + exit (-1); +} + +//_______________________________________________________________________________ +template class operation +{ + typedef garErr (*TOperator)(const char*, T, ostream&); + TOperator fOperator; + string fScore; // the score argument + string fScoreArg; // to store the second score argument + vector fScoreArgs; // to store the second score argument + T fArg; + string fSdtIn; // intended to share stdin + + + bool readArg(const char* arg, int& value) const { return intVal (arg, value); } + bool readArg(const char* arg, float& value) const { return floatVal (arg, value); } + bool readArg(const char* arg, rational& value) const { return rationalVal (arg, value); } + bool readArg(const char* arg, string& value) { return gmnVal (arg, value, fSdtIn); } + bool readArg(const char* arg, const char*& value) { + if (gmnVal (arg, fScoreArg, fSdtIn)) { + value = fScoreArg.c_str(); + return true; + } + return false; + } + + public : + operation(TOperator op) : fOperator (op) {} + virtual ~operation() {} + + // strict run method: expects exaclty 2 arguments + bool strict_init (int argc, char* argv[]) { + if (argc != 3) return false; + if (!readArg (argv[1], fScore)) return false; + if (!readArg (argv[2], fArg)) return false; + return true; + } + + // relaxed run method: takes more than 2 arguments but only strings args are supported + bool init (int argc, char* argv[]) { + if (argc < 3) return false; + if (!readArg (argv[1], fScore)) return false; + for (int i=2; i op (guidoGEHead); + if (op.strict_init(argc, argv)) { + garErr err = op.strict_run (cout); + if (err != kNoErr) { + error (err); + return err; + } + } + else usage (argv[0]); + return 0; +} + diff --git a/guidoar-dev/tools/guidoevheadn.cpp b/guidoar-dev/tools/guidoevheadn.cpp new file mode 100644 index 000000000..aebfd3058 --- /dev/null +++ b/guidoar-dev/tools/guidoevheadn.cpp @@ -0,0 +1,105 @@ +/* + this file is automatically generated from template.cxx + don't modify unles you're ready to loose your changes +*/ + +#include +#include +#include + +#include "common.cxx" + +#include "desc/guidoevheadn.h" + +//_______________________________________________________________________________ +static void usage(char * name) +{ + cerr << "usage: " << basename(name) << " score " << gArg << endl; + cerr << " " << gDesc << endl; + cerr << " " << scoredesc << endl; + cerr << " " << gArg << ": " << gArgDesc << endl; + exit (-1); +} + +//_______________________________________________________________________________ +template class operation +{ + typedef garErr (*TOperator)(const char*, T, ostream&); + TOperator fOperator; + string fScore; // the score argument + string fScoreArg; // to store the second score argument + vector fScoreArgs; // to store the second score argument + T fArg; + string fSdtIn; // intended to share stdin + + + bool readArg(const char* arg, int& value) const { return intVal (arg, value); } + bool readArg(const char* arg, float& value) const { return floatVal (arg, value); } + bool readArg(const char* arg, rational& value) const { return rationalVal (arg, value); } + bool readArg(const char* arg, string& value) { return gmnVal (arg, value, fSdtIn); } + bool readArg(const char* arg, const char*& value) { + if (gmnVal (arg, fScoreArg, fSdtIn)) { + value = fScoreArg.c_str(); + return true; + } + return false; + } + + public : + operation(TOperator op) : fOperator (op) {} + virtual ~operation() {} + + // strict run method: expects exaclty 2 arguments + bool strict_init (int argc, char* argv[]) { + if (argc != 3) return false; + if (!readArg (argv[1], fScore)) return false; + if (!readArg (argv[2], fArg)) return false; + return true; + } + + // relaxed run method: takes more than 2 arguments but only strings args are supported + bool init (int argc, char* argv[]) { + if (argc < 3) return false; + if (!readArg (argv[1], fScore)) return false; + for (int i=2; i op (guidoVEHead); + if (op.strict_init(argc, argv)) { + garErr err = op.strict_run (cout); + if (err != kNoErr) { + error (err); + return err; + } + } + else usage (argv[0]); + return 0; +} + diff --git a/guidoar-dev/tools/guidoevtail.cpp b/guidoar-dev/tools/guidoevtail.cpp new file mode 100644 index 000000000..e4f710ff1 --- /dev/null +++ b/guidoar-dev/tools/guidoevtail.cpp @@ -0,0 +1,105 @@ +/* + this file is automatically generated from template.cxx + don't modify unles you're ready to loose your changes +*/ + +#include +#include +#include + +#include "common.cxx" + +#include "desc/guidoevtail.h" + +//_______________________________________________________________________________ +static void usage(char * name) +{ + cerr << "usage: " << basename(name) << " score " << gArg << endl; + cerr << " " << gDesc << endl; + cerr << " " << scoredesc << endl; + cerr << " " << gArg << ": " << gArgDesc << endl; + exit (-1); +} + +//_______________________________________________________________________________ +template class operation +{ + typedef garErr (*TOperator)(const char*, T, ostream&); + TOperator fOperator; + string fScore; // the score argument + string fScoreArg; // to store the second score argument + vector fScoreArgs; // to store the second score argument + T fArg; + string fSdtIn; // intended to share stdin + + + bool readArg(const char* arg, int& value) const { return intVal (arg, value); } + bool readArg(const char* arg, float& value) const { return floatVal (arg, value); } + bool readArg(const char* arg, rational& value) const { return rationalVal (arg, value); } + bool readArg(const char* arg, string& value) { return gmnVal (arg, value, fSdtIn); } + bool readArg(const char* arg, const char*& value) { + if (gmnVal (arg, fScoreArg, fSdtIn)) { + value = fScoreArg.c_str(); + return true; + } + return false; + } + + public : + operation(TOperator op) : fOperator (op) {} + virtual ~operation() {} + + // strict run method: expects exaclty 2 arguments + bool strict_init (int argc, char* argv[]) { + if (argc != 3) return false; + if (!readArg (argv[1], fScore)) return false; + if (!readArg (argv[2], fArg)) return false; + return true; + } + + // relaxed run method: takes more than 2 arguments but only strings args are supported + bool init (int argc, char* argv[]) { + if (argc < 3) return false; + if (!readArg (argv[1], fScore)) return false; + for (int i=2; i op (guidoGETail); + if (op.strict_init(argc, argv)) { + garErr err = op.strict_run (cout); + if (err != kNoErr) { + error (err); + return err; + } + } + else usage (argv[0]); + return 0; +} + diff --git a/guidoar-dev/tools/guidoevtailn.cpp b/guidoar-dev/tools/guidoevtailn.cpp new file mode 100644 index 000000000..d7dfbb4a7 --- /dev/null +++ b/guidoar-dev/tools/guidoevtailn.cpp @@ -0,0 +1,105 @@ +/* + this file is automatically generated from template.cxx + don't modify unles you're ready to loose your changes +*/ + +#include +#include +#include + +#include "common.cxx" + +#include "desc/guidoevtailn.h" + +//_______________________________________________________________________________ +static void usage(char * name) +{ + cerr << "usage: " << basename(name) << " score " << gArg << endl; + cerr << " " << gDesc << endl; + cerr << " " << scoredesc << endl; + cerr << " " << gArg << ": " << gArgDesc << endl; + exit (-1); +} + +//_______________________________________________________________________________ +template class operation +{ + typedef garErr (*TOperator)(const char*, T, ostream&); + TOperator fOperator; + string fScore; // the score argument + string fScoreArg; // to store the second score argument + vector fScoreArgs; // to store the second score argument + T fArg; + string fSdtIn; // intended to share stdin + + + bool readArg(const char* arg, int& value) const { return intVal (arg, value); } + bool readArg(const char* arg, float& value) const { return floatVal (arg, value); } + bool readArg(const char* arg, rational& value) const { return rationalVal (arg, value); } + bool readArg(const char* arg, string& value) { return gmnVal (arg, value, fSdtIn); } + bool readArg(const char* arg, const char*& value) { + if (gmnVal (arg, fScoreArg, fSdtIn)) { + value = fScoreArg.c_str(); + return true; + } + return false; + } + + public : + operation(TOperator op) : fOperator (op) {} + virtual ~operation() {} + + // strict run method: expects exaclty 2 arguments + bool strict_init (int argc, char* argv[]) { + if (argc != 3) return false; + if (!readArg (argv[1], fScore)) return false; + if (!readArg (argv[2], fArg)) return false; + return true; + } + + // relaxed run method: takes more than 2 arguments but only strings args are supported + bool init (int argc, char* argv[]) { + if (argc < 3) return false; + if (!readArg (argv[1], fScore)) return false; + for (int i=2; i op (guidoVETail); + if (op.strict_init(argc, argv)) { + garErr err = op.strict_run (cout); + if (err != kNoErr) { + error (err); + return err; + } + } + else usage (argv[0]); + return 0; +} + diff --git a/guidoar-dev/tools/guidohead.cpp b/guidoar-dev/tools/guidohead.cpp new file mode 100644 index 000000000..3c0e9393c --- /dev/null +++ b/guidoar-dev/tools/guidohead.cpp @@ -0,0 +1,105 @@ +/* + this file is automatically generated from template.cxx + don't modify unles you're ready to loose your changes +*/ + +#include +#include +#include + +#include "common.cxx" + +#include "desc/guidohead.h" + +//_______________________________________________________________________________ +static void usage(char * name) +{ + cerr << "usage: " << basename(name) << " score " << gArg << endl; + cerr << " " << gDesc << endl; + cerr << " " << scoredesc << endl; + cerr << " " << gArg << ": " << gArgDesc << endl; + exit (-1); +} + +//_______________________________________________________________________________ +template class operation +{ + typedef garErr (*TOperator)(const char*, T, ostream&); + TOperator fOperator; + string fScore; // the score argument + string fScoreArg; // to store the second score argument + vector fScoreArgs; // to store the second score argument + T fArg; + string fSdtIn; // intended to share stdin + + + bool readArg(const char* arg, int& value) const { return intVal (arg, value); } + bool readArg(const char* arg, float& value) const { return floatVal (arg, value); } + bool readArg(const char* arg, rational& value) const { return rationalVal (arg, value); } + bool readArg(const char* arg, string& value) { return gmnVal (arg, value, fSdtIn); } + bool readArg(const char* arg, const char*& value) { + if (gmnVal (arg, fScoreArg, fSdtIn)) { + value = fScoreArg.c_str(); + return true; + } + return false; + } + + public : + operation(TOperator op) : fOperator (op) {} + virtual ~operation() {} + + // strict run method: expects exaclty 2 arguments + bool strict_init (int argc, char* argv[]) { + if (argc != 3) return false; + if (!readArg (argv[1], fScore)) return false; + if (!readArg (argv[2], fArg)) return false; + return true; + } + + // relaxed run method: takes more than 2 arguments but only strings args are supported + bool init (int argc, char* argv[]) { + if (argc < 3) return false; + if (!readArg (argv[1], fScore)) return false; + for (int i=2; i op (guidoGHead); + if (op.strict_init(argc, argv)) { + garErr err = op.strict_run (cout); + if (err != kNoErr) { + error (err); + return err; + } + } + else usage (argv[0]); + return 0; +} + diff --git a/guidoar-dev/tools/guidoheadt.cpp b/guidoar-dev/tools/guidoheadt.cpp new file mode 100644 index 000000000..113fe6e6d --- /dev/null +++ b/guidoar-dev/tools/guidoheadt.cpp @@ -0,0 +1,105 @@ +/* + this file is automatically generated from template.cxx + don't modify unles you're ready to loose your changes +*/ + +#include +#include +#include + +#include "common.cxx" + +#include "desc/guidoheadt.h" + +//_______________________________________________________________________________ +static void usage(char * name) +{ + cerr << "usage: " << basename(name) << " score " << gArg << endl; + cerr << " " << gDesc << endl; + cerr << " " << scoredesc << endl; + cerr << " " << gArg << ": " << gArgDesc << endl; + exit (-1); +} + +//_______________________________________________________________________________ +template class operation +{ + typedef garErr (*TOperator)(const char*, T, ostream&); + TOperator fOperator; + string fScore; // the score argument + string fScoreArg; // to store the second score argument + vector fScoreArgs; // to store the second score argument + T fArg; + string fSdtIn; // intended to share stdin + + + bool readArg(const char* arg, int& value) const { return intVal (arg, value); } + bool readArg(const char* arg, float& value) const { return floatVal (arg, value); } + bool readArg(const char* arg, rational& value) const { return rationalVal (arg, value); } + bool readArg(const char* arg, string& value) { return gmnVal (arg, value, fSdtIn); } + bool readArg(const char* arg, const char*& value) { + if (gmnVal (arg, fScoreArg, fSdtIn)) { + value = fScoreArg.c_str(); + return true; + } + return false; + } + + public : + operation(TOperator op) : fOperator (op) {} + virtual ~operation() {} + + // strict run method: expects exaclty 2 arguments + bool strict_init (int argc, char* argv[]) { + if (argc != 3) return false; + if (!readArg (argv[1], fScore)) return false; + if (!readArg (argv[2], fArg)) return false; + return true; + } + + // relaxed run method: takes more than 2 arguments but only strings args are supported + bool init (int argc, char* argv[]) { + if (argc < 3) return false; + if (!readArg (argv[1], fScore)) return false; + for (int i=2; i op (guidoVHead); + if (op.strict_init(argc, argv)) { + garErr err = op.strict_run (cout); + if (err != kNoErr) { + error (err); + return err; + } + } + else usage (argv[0]); + return 0; +} + diff --git a/guidoar-dev/tools/guidomirror.cpp b/guidoar-dev/tools/guidomirror.cpp new file mode 100644 index 000000000..9c631e7d4 --- /dev/null +++ b/guidoar-dev/tools/guidomirror.cpp @@ -0,0 +1,105 @@ +/* + this file is automatically generated from template.cxx + don't modify unles you're ready to loose your changes +*/ + +#include +#include +#include + +#include "common.cxx" + +#include "desc/guidomirror.h" + +//_______________________________________________________________________________ +static void usage(char * name) +{ + cerr << "usage: " << basename(name) << " score " << gArg << endl; + cerr << " " << gDesc << endl; + cerr << " " << scoredesc << endl; + cerr << " " << gArg << ": " << gArgDesc << endl; + exit (-1); +} + +//_______________________________________________________________________________ +template class operation +{ + typedef garErr (*TOperator)(const char*, T, ostream&); + TOperator fOperator; + string fScore; // the score argument + string fScoreArg; // to store the second score argument + vector fScoreArgs; // to store the second score argument + T fArg; + string fSdtIn; // intended to share stdin + + + bool readArg(const char* arg, int& value) const { return intVal (arg, value); } + bool readArg(const char* arg, float& value) const { return floatVal (arg, value); } + bool readArg(const char* arg, rational& value) const { return rationalVal (arg, value); } + bool readArg(const char* arg, string& value) { return gmnVal (arg, value, fSdtIn); } + bool readArg(const char* arg, const char*& value) { + if (gmnVal (arg, fScoreArg, fSdtIn)) { + value = fScoreArg.c_str(); + return true; + } + return false; + } + + public : + operation(TOperator op) : fOperator (op) {} + virtual ~operation() {} + + // strict run method: expects exaclty 2 arguments + bool strict_init (int argc, char* argv[]) { + if (argc != 3) return false; + if (!readArg (argv[1], fScore)) return false; + if (!readArg (argv[2], fArg)) return false; + return true; + } + + // relaxed run method: takes more than 2 arguments but only strings args are supported + bool init (int argc, char* argv[]) { + if (argc < 3) return false; + if (!readArg (argv[1], fScore)) return false; + for (int i=2; i op (guidoGMirror); + if (op.strict_init(argc, argv)) { + garErr err = op.strict_run (cout); + if (err != kNoErr) { + error (err); + return err; + } + } + else usage (argv[0]); + return 0; +} + diff --git a/guidoar-dev/tools/guidomultduration.cpp b/guidoar-dev/tools/guidomultduration.cpp new file mode 100644 index 000000000..3c2f1bfe2 --- /dev/null +++ b/guidoar-dev/tools/guidomultduration.cpp @@ -0,0 +1,105 @@ +/* + this file is automatically generated from template.cxx + don't modify unles you're ready to loose your changes +*/ + +#include +#include +#include + +#include "common.cxx" + +#include "desc/guidomultduration.h" + +//_______________________________________________________________________________ +static void usage(char * name) +{ + cerr << "usage: " << basename(name) << " score " << gArg << endl; + cerr << " " << gDesc << endl; + cerr << " " << scoredesc << endl; + cerr << " " << gArg << ": " << gArgDesc << endl; + exit (-1); +} + +//_______________________________________________________________________________ +template class operation +{ + typedef garErr (*TOperator)(const char*, T, ostream&); + TOperator fOperator; + string fScore; // the score argument + string fScoreArg; // to store the second score argument + vector fScoreArgs; // to store the second score argument + T fArg; + string fSdtIn; // intended to share stdin + + + bool readArg(const char* arg, int& value) const { return intVal (arg, value); } + bool readArg(const char* arg, float& value) const { return floatVal (arg, value); } + bool readArg(const char* arg, rational& value) const { return rationalVal (arg, value); } + bool readArg(const char* arg, string& value) { return gmnVal (arg, value, fSdtIn); } + bool readArg(const char* arg, const char*& value) { + if (gmnVal (arg, fScoreArg, fSdtIn)) { + value = fScoreArg.c_str(); + return true; + } + return false; + } + + public : + operation(TOperator op) : fOperator (op) {} + virtual ~operation() {} + + // strict run method: expects exaclty 2 arguments + bool strict_init (int argc, char* argv[]) { + if (argc != 3) return false; + if (!readArg (argv[1], fScore)) return false; + if (!readArg (argv[2], fArg)) return false; + return true; + } + + // relaxed run method: takes more than 2 arguments but only strings args are supported + bool init (int argc, char* argv[]) { + if (argc < 3) return false; + if (!readArg (argv[1], fScore)) return false; + for (int i=2; i op (guidoVMultDuration); + if (op.strict_init(argc, argv)) { + garErr err = op.strict_run (cout); + if (err != kNoErr) { + error (err); + return err; + } + } + else usage (argv[0]); + return 0; +} + diff --git a/guidoar-dev/tools/guidopar.cpp b/guidoar-dev/tools/guidopar.cpp new file mode 100644 index 000000000..50288a20f --- /dev/null +++ b/guidoar-dev/tools/guidopar.cpp @@ -0,0 +1,105 @@ +/* + this file is automatically generated from template.cxx + don't modify unles you're ready to loose your changes +*/ + +#include +#include +#include + +#include "common.cxx" + +#include "desc/guidopar.h" + +//_______________________________________________________________________________ +static void usage(char * name) +{ + cerr << "usage: " << basename(name) << " score " << gArg << endl; + cerr << " " << gDesc << endl; + cerr << " " << scoredesc << endl; + cerr << " " << gArg << ": " << gArgDesc << endl; + exit (-1); +} + +//_______________________________________________________________________________ +template class operation +{ + typedef garErr (*TOperator)(const char*, T, ostream&); + TOperator fOperator; + string fScore; // the score argument + string fScoreArg; // to store the second score argument + vector fScoreArgs; // to store the second score argument + T fArg; + string fSdtIn; // intended to share stdin + + + bool readArg(const char* arg, int& value) const { return intVal (arg, value); } + bool readArg(const char* arg, float& value) const { return floatVal (arg, value); } + bool readArg(const char* arg, rational& value) const { return rationalVal (arg, value); } + bool readArg(const char* arg, string& value) { return gmnVal (arg, value, fSdtIn); } + bool readArg(const char* arg, const char*& value) { + if (gmnVal (arg, fScoreArg, fSdtIn)) { + value = fScoreArg.c_str(); + return true; + } + return false; + } + + public : + operation(TOperator op) : fOperator (op) {} + virtual ~operation() {} + + // strict run method: expects exaclty 2 arguments + bool strict_init (int argc, char* argv[]) { + if (argc != 3) return false; + if (!readArg (argv[1], fScore)) return false; + if (!readArg (argv[2], fArg)) return false; + return true; + } + + // relaxed run method: takes more than 2 arguments but only strings args are supported + bool init (int argc, char* argv[]) { + if (argc < 3) return false; + if (!readArg (argv[1], fScore)) return false; + for (int i=2; i op (guidoGPar); + if (op.init(argc, argv)) { + garErr err = op.run (cout); + if (err != kNoErr) { + error (err); + return err; + } + } + else usage (argv[0]); + return 0; +} + diff --git a/guidoar-dev/tools/guidoparright.cpp b/guidoar-dev/tools/guidoparright.cpp new file mode 100644 index 000000000..32240653e --- /dev/null +++ b/guidoar-dev/tools/guidoparright.cpp @@ -0,0 +1,105 @@ +/* + this file is automatically generated from template.cxx + don't modify unles you're ready to loose your changes +*/ + +#include +#include +#include + +#include "common.cxx" + +#include "desc/guidoparright.h" + +//_______________________________________________________________________________ +static void usage(char * name) +{ + cerr << "usage: " << basename(name) << " score " << gArg << endl; + cerr << " " << gDesc << endl; + cerr << " " << scoredesc << endl; + cerr << " " << gArg << ": " << gArgDesc << endl; + exit (-1); +} + +//_______________________________________________________________________________ +template class operation +{ + typedef garErr (*TOperator)(const char*, T, ostream&); + TOperator fOperator; + string fScore; // the score argument + string fScoreArg; // to store the second score argument + vector fScoreArgs; // to store the second score argument + T fArg; + string fSdtIn; // intended to share stdin + + + bool readArg(const char* arg, int& value) const { return intVal (arg, value); } + bool readArg(const char* arg, float& value) const { return floatVal (arg, value); } + bool readArg(const char* arg, rational& value) const { return rationalVal (arg, value); } + bool readArg(const char* arg, string& value) { return gmnVal (arg, value, fSdtIn); } + bool readArg(const char* arg, const char*& value) { + if (gmnVal (arg, fScoreArg, fSdtIn)) { + value = fScoreArg.c_str(); + return true; + } + return false; + } + + public : + operation(TOperator op) : fOperator (op) {} + virtual ~operation() {} + + // strict run method: expects exaclty 2 arguments + bool strict_init (int argc, char* argv[]) { + if (argc != 3) return false; + if (!readArg (argv[1], fScore)) return false; + if (!readArg (argv[2], fArg)) return false; + return true; + } + + // relaxed run method: takes more than 2 arguments but only strings args are supported + bool init (int argc, char* argv[]) { + if (argc < 3) return false; + if (!readArg (argv[1], fScore)) return false; + for (int i=2; i op (guidoGRPar); + if (op.strict_init(argc, argv)) { + garErr err = op.strict_run (cout); + if (err != kNoErr) { + error (err); + return err; + } + } + else usage (argv[0]); + return 0; +} + diff --git a/guidoar-dev/tools/guidoread.cpp b/guidoar-dev/tools/guidoread.cpp new file mode 100644 index 000000000..d670cbc05 --- /dev/null +++ b/guidoar-dev/tools/guidoread.cpp @@ -0,0 +1,43 @@ +/* + + Copyright (C) 2012 Grame + Grame Research Laboratory, 9 rue du Garet, 69001 Lyon - France + research@grame.fr + + This file is provided as an example of the MusicXML Library use. +*/ + +#include "common.cxx" + +#include "guidoelement.h" +#include "AROthers.h" +#include "guidoparser.h" + +//_______________________________________________________________________________ +static void usage(char * name) +{ + cerr << "usage: " << basename(name) << " score " << endl; + cerr << " read and print score" << endl; + cerr << " " << scoredesc << endl; + exit (-1); +} + +//_______________________________________________________________________________ +int main (int argc, char* argv[]) +{ + if (argc != 2) usage(argv[0]); + string gmn, _stdin; + if (!gmnVal (argv[1], gmn, _stdin)) return -1; + + guidoparser r; + Sguidoelement elt = r.parseString(gmn.c_str()); + + if (elt) cout << elt << endl; + else { + cerr << "invalid gmn code" << endl; + return 1; + } + + return 0; +} + diff --git a/guidoar-dev/tools/guidoseq.cpp b/guidoar-dev/tools/guidoseq.cpp new file mode 100644 index 000000000..1aac710c3 --- /dev/null +++ b/guidoar-dev/tools/guidoseq.cpp @@ -0,0 +1,105 @@ +/* + this file is automatically generated from template.cxx + don't modify unles you're ready to loose your changes +*/ + +#include +#include +#include + +#include "common.cxx" + +#include "desc/guidoseq.h" + +//_______________________________________________________________________________ +static void usage(char * name) +{ + cerr << "usage: " << basename(name) << " score " << gArg << endl; + cerr << " " << gDesc << endl; + cerr << " " << scoredesc << endl; + cerr << " " << gArg << ": " << gArgDesc << endl; + exit (-1); +} + +//_______________________________________________________________________________ +template class operation +{ + typedef garErr (*TOperator)(const char*, T, ostream&); + TOperator fOperator; + string fScore; // the score argument + string fScoreArg; // to store the second score argument + vector fScoreArgs; // to store the second score argument + T fArg; + string fSdtIn; // intended to share stdin + + + bool readArg(const char* arg, int& value) const { return intVal (arg, value); } + bool readArg(const char* arg, float& value) const { return floatVal (arg, value); } + bool readArg(const char* arg, rational& value) const { return rationalVal (arg, value); } + bool readArg(const char* arg, string& value) { return gmnVal (arg, value, fSdtIn); } + bool readArg(const char* arg, const char*& value) { + if (gmnVal (arg, fScoreArg, fSdtIn)) { + value = fScoreArg.c_str(); + return true; + } + return false; + } + + public : + operation(TOperator op) : fOperator (op) {} + virtual ~operation() {} + + // strict run method: expects exaclty 2 arguments + bool strict_init (int argc, char* argv[]) { + if (argc != 3) return false; + if (!readArg (argv[1], fScore)) return false; + if (!readArg (argv[2], fArg)) return false; + return true; + } + + // relaxed run method: takes more than 2 arguments but only strings args are supported + bool init (int argc, char* argv[]) { + if (argc < 3) return false; + if (!readArg (argv[1], fScore)) return false; + for (int i=2; i op (guidoGSeq); + if (op.init(argc, argv)) { + garErr err = op.run (cout); + if (err != kNoErr) { + error (err); + return err; + } + } + else usage (argv[0]); + return 0; +} + diff --git a/guidoar-dev/tools/guidosetduration.cpp b/guidoar-dev/tools/guidosetduration.cpp new file mode 100644 index 000000000..8f9afd2a9 --- /dev/null +++ b/guidoar-dev/tools/guidosetduration.cpp @@ -0,0 +1,105 @@ +/* + this file is automatically generated from template.cxx + don't modify unles you're ready to loose your changes +*/ + +#include +#include +#include + +#include "common.cxx" + +#include "desc/guidosetduration.h" + +//_______________________________________________________________________________ +static void usage(char * name) +{ + cerr << "usage: " << basename(name) << " score " << gArg << endl; + cerr << " " << gDesc << endl; + cerr << " " << scoredesc << endl; + cerr << " " << gArg << ": " << gArgDesc << endl; + exit (-1); +} + +//_______________________________________________________________________________ +template class operation +{ + typedef garErr (*TOperator)(const char*, T, ostream&); + TOperator fOperator; + string fScore; // the score argument + string fScoreArg; // to store the second score argument + vector fScoreArgs; // to store the second score argument + T fArg; + string fSdtIn; // intended to share stdin + + + bool readArg(const char* arg, int& value) const { return intVal (arg, value); } + bool readArg(const char* arg, float& value) const { return floatVal (arg, value); } + bool readArg(const char* arg, rational& value) const { return rationalVal (arg, value); } + bool readArg(const char* arg, string& value) { return gmnVal (arg, value, fSdtIn); } + bool readArg(const char* arg, const char*& value) { + if (gmnVal (arg, fScoreArg, fSdtIn)) { + value = fScoreArg.c_str(); + return true; + } + return false; + } + + public : + operation(TOperator op) : fOperator (op) {} + virtual ~operation() {} + + // strict run method: expects exaclty 2 arguments + bool strict_init (int argc, char* argv[]) { + if (argc != 3) return false; + if (!readArg (argv[1], fScore)) return false; + if (!readArg (argv[2], fArg)) return false; + return true; + } + + // relaxed run method: takes more than 2 arguments but only strings args are supported + bool init (int argc, char* argv[]) { + if (argc < 3) return false; + if (!readArg (argv[1], fScore)) return false; + for (int i=2; i op (guidoGSetDuration); + if (op.strict_init(argc, argv)) { + garErr err = op.strict_run (cout); + if (err != kNoErr) { + error (err); + return err; + } + } + else usage (argv[0]); + return 0; +} + diff --git a/guidoar-dev/tools/guidosetdurationd.cpp b/guidoar-dev/tools/guidosetdurationd.cpp new file mode 100644 index 000000000..7eedfcafa --- /dev/null +++ b/guidoar-dev/tools/guidosetdurationd.cpp @@ -0,0 +1,105 @@ +/* + this file is automatically generated from template.cxx + don't modify unles you're ready to loose your changes +*/ + +#include +#include +#include + +#include "common.cxx" + +#include "desc/guidosetdurationd.h" + +//_______________________________________________________________________________ +static void usage(char * name) +{ + cerr << "usage: " << basename(name) << " score " << gArg << endl; + cerr << " " << gDesc << endl; + cerr << " " << scoredesc << endl; + cerr << " " << gArg << ": " << gArgDesc << endl; + exit (-1); +} + +//_______________________________________________________________________________ +template class operation +{ + typedef garErr (*TOperator)(const char*, T, ostream&); + TOperator fOperator; + string fScore; // the score argument + string fScoreArg; // to store the second score argument + vector fScoreArgs; // to store the second score argument + T fArg; + string fSdtIn; // intended to share stdin + + + bool readArg(const char* arg, int& value) const { return intVal (arg, value); } + bool readArg(const char* arg, float& value) const { return floatVal (arg, value); } + bool readArg(const char* arg, rational& value) const { return rationalVal (arg, value); } + bool readArg(const char* arg, string& value) { return gmnVal (arg, value, fSdtIn); } + bool readArg(const char* arg, const char*& value) { + if (gmnVal (arg, fScoreArg, fSdtIn)) { + value = fScoreArg.c_str(); + return true; + } + return false; + } + + public : + operation(TOperator op) : fOperator (op) {} + virtual ~operation() {} + + // strict run method: expects exaclty 2 arguments + bool strict_init (int argc, char* argv[]) { + if (argc != 3) return false; + if (!readArg (argv[1], fScore)) return false; + if (!readArg (argv[2], fArg)) return false; + return true; + } + + // relaxed run method: takes more than 2 arguments but only strings args are supported + bool init (int argc, char* argv[]) { + if (argc < 3) return false; + if (!readArg (argv[1], fScore)) return false; + for (int i=2; i op (guidoVSetDuration); + if (op.strict_init(argc, argv)) { + garErr err = op.strict_run (cout); + if (err != kNoErr) { + error (err); + return err; + } + } + else usage (argv[0]); + return 0; +} + diff --git a/guidoar-dev/tools/guidotail.cpp b/guidoar-dev/tools/guidotail.cpp new file mode 100644 index 000000000..612fa89da --- /dev/null +++ b/guidoar-dev/tools/guidotail.cpp @@ -0,0 +1,105 @@ +/* + this file is automatically generated from template.cxx + don't modify unles you're ready to loose your changes +*/ + +#include +#include +#include + +#include "common.cxx" + +#include "desc/guidotail.h" + +//_______________________________________________________________________________ +static void usage(char * name) +{ + cerr << "usage: " << basename(name) << " score " << gArg << endl; + cerr << " " << gDesc << endl; + cerr << " " << scoredesc << endl; + cerr << " " << gArg << ": " << gArgDesc << endl; + exit (-1); +} + +//_______________________________________________________________________________ +template class operation +{ + typedef garErr (*TOperator)(const char*, T, ostream&); + TOperator fOperator; + string fScore; // the score argument + string fScoreArg; // to store the second score argument + vector fScoreArgs; // to store the second score argument + T fArg; + string fSdtIn; // intended to share stdin + + + bool readArg(const char* arg, int& value) const { return intVal (arg, value); } + bool readArg(const char* arg, float& value) const { return floatVal (arg, value); } + bool readArg(const char* arg, rational& value) const { return rationalVal (arg, value); } + bool readArg(const char* arg, string& value) { return gmnVal (arg, value, fSdtIn); } + bool readArg(const char* arg, const char*& value) { + if (gmnVal (arg, fScoreArg, fSdtIn)) { + value = fScoreArg.c_str(); + return true; + } + return false; + } + + public : + operation(TOperator op) : fOperator (op) {} + virtual ~operation() {} + + // strict run method: expects exaclty 2 arguments + bool strict_init (int argc, char* argv[]) { + if (argc != 3) return false; + if (!readArg (argv[1], fScore)) return false; + if (!readArg (argv[2], fArg)) return false; + return true; + } + + // relaxed run method: takes more than 2 arguments but only strings args are supported + bool init (int argc, char* argv[]) { + if (argc < 3) return false; + if (!readArg (argv[1], fScore)) return false; + for (int i=2; i op (guidoGTail); + if (op.strict_init(argc, argv)) { + garErr err = op.strict_run (cout); + if (err != kNoErr) { + error (err); + return err; + } + } + else usage (argv[0]); + return 0; +} + diff --git a/guidoar-dev/tools/guidotailt.cpp b/guidoar-dev/tools/guidotailt.cpp new file mode 100644 index 000000000..fa37e9d83 --- /dev/null +++ b/guidoar-dev/tools/guidotailt.cpp @@ -0,0 +1,105 @@ +/* + this file is automatically generated from template.cxx + don't modify unles you're ready to loose your changes +*/ + +#include +#include +#include + +#include "common.cxx" + +#include "desc/guidotailt.h" + +//_______________________________________________________________________________ +static void usage(char * name) +{ + cerr << "usage: " << basename(name) << " score " << gArg << endl; + cerr << " " << gDesc << endl; + cerr << " " << scoredesc << endl; + cerr << " " << gArg << ": " << gArgDesc << endl; + exit (-1); +} + +//_______________________________________________________________________________ +template class operation +{ + typedef garErr (*TOperator)(const char*, T, ostream&); + TOperator fOperator; + string fScore; // the score argument + string fScoreArg; // to store the second score argument + vector fScoreArgs; // to store the second score argument + T fArg; + string fSdtIn; // intended to share stdin + + + bool readArg(const char* arg, int& value) const { return intVal (arg, value); } + bool readArg(const char* arg, float& value) const { return floatVal (arg, value); } + bool readArg(const char* arg, rational& value) const { return rationalVal (arg, value); } + bool readArg(const char* arg, string& value) { return gmnVal (arg, value, fSdtIn); } + bool readArg(const char* arg, const char*& value) { + if (gmnVal (arg, fScoreArg, fSdtIn)) { + value = fScoreArg.c_str(); + return true; + } + return false; + } + + public : + operation(TOperator op) : fOperator (op) {} + virtual ~operation() {} + + // strict run method: expects exaclty 2 arguments + bool strict_init (int argc, char* argv[]) { + if (argc != 3) return false; + if (!readArg (argv[1], fScore)) return false; + if (!readArg (argv[2], fArg)) return false; + return true; + } + + // relaxed run method: takes more than 2 arguments but only strings args are supported + bool init (int argc, char* argv[]) { + if (argc < 3) return false; + if (!readArg (argv[1], fScore)) return false; + for (int i=2; i op (guidoVTail); + if (op.strict_init(argc, argv)) { + garErr err = op.strict_run (cout); + if (err != kNoErr) { + error (err); + return err; + } + } + else usage (argv[0]); + return 0; +} + diff --git a/guidoar-dev/tools/guidotime2ev.cpp b/guidoar-dev/tools/guidotime2ev.cpp new file mode 100644 index 000000000..072d0f584 --- /dev/null +++ b/guidoar-dev/tools/guidotime2ev.cpp @@ -0,0 +1,39 @@ +/* + + Copyright (C) 2009-2012 Grame + Grame Research Laboratory, 9 rue du Garet, 69001 Lyon - France + research@grame.fr + + This file is provided as an example of the GuidoAR Library use. + +*/ + +#include "common.cxx" + +//_______________________________________________________________________________ +static void usage(char * name) +{ + cerr << "usage: " << basename(name) << " score time [voiceIndex]" << endl; + cerr << " converts a score time position to an event index" << endl; + cerr << " " << scoredesc << endl; + cerr << " time : a time position expressed as a rational (i.e. 'n/d') where 1 is a whole note." << endl; + cerr << " voiceIndex: optional voice index (defaults to the first voice)" << endl; + exit (1); +} + +//_______________________________________________________________________________ +int main(int argc, char *argv[]) +{ + if ((argc != 3) && (argc != 4)) usage(argv[0]); + + string gmn, _stdin; + if (!gmnVal (argv[1], gmn, _stdin)) return -1; + + rational date; + if (!rationalVal(argv[2], date)) usage(argv[0]); + int voiceIndex = 1; // default voice is 1 + if ((argc == 4) && !intVal(argv[3], voiceIndex)) usage(argv[0]); + + cout << guidoTime2Ev(gmn.c_str(), date, voiceIndex-1) << endl; + return 0; +} diff --git a/guidoar-dev/tools/guidotop.cpp b/guidoar-dev/tools/guidotop.cpp new file mode 100644 index 000000000..9ab9fb4d8 --- /dev/null +++ b/guidoar-dev/tools/guidotop.cpp @@ -0,0 +1,105 @@ +/* + this file is automatically generated from template.cxx + don't modify unles you're ready to loose your changes +*/ + +#include +#include +#include + +#include "common.cxx" + +#include "desc/guidotop.h" + +//_______________________________________________________________________________ +static void usage(char * name) +{ + cerr << "usage: " << basename(name) << " score " << gArg << endl; + cerr << " " << gDesc << endl; + cerr << " " << scoredesc << endl; + cerr << " " << gArg << ": " << gArgDesc << endl; + exit (-1); +} + +//_______________________________________________________________________________ +template class operation +{ + typedef garErr (*TOperator)(const char*, T, ostream&); + TOperator fOperator; + string fScore; // the score argument + string fScoreArg; // to store the second score argument + vector fScoreArgs; // to store the second score argument + T fArg; + string fSdtIn; // intended to share stdin + + + bool readArg(const char* arg, int& value) const { return intVal (arg, value); } + bool readArg(const char* arg, float& value) const { return floatVal (arg, value); } + bool readArg(const char* arg, rational& value) const { return rationalVal (arg, value); } + bool readArg(const char* arg, string& value) { return gmnVal (arg, value, fSdtIn); } + bool readArg(const char* arg, const char*& value) { + if (gmnVal (arg, fScoreArg, fSdtIn)) { + value = fScoreArg.c_str(); + return true; + } + return false; + } + + public : + operation(TOperator op) : fOperator (op) {} + virtual ~operation() {} + + // strict run method: expects exaclty 2 arguments + bool strict_init (int argc, char* argv[]) { + if (argc != 3) return false; + if (!readArg (argv[1], fScore)) return false; + if (!readArg (argv[2], fArg)) return false; + return true; + } + + // relaxed run method: takes more than 2 arguments but only strings args are supported + bool init (int argc, char* argv[]) { + if (argc < 3) return false; + if (!readArg (argv[1], fScore)) return false; + for (int i=2; i op (guidoGTop); + if (op.strict_init(argc, argv)) { + garErr err = op.strict_run (cout); + if (err != kNoErr) { + error (err); + return err; + } + } + else usage (argv[0]); + return 0; +} + diff --git a/guidoar-dev/tools/guidotopn.cpp b/guidoar-dev/tools/guidotopn.cpp new file mode 100644 index 000000000..a1e6af620 --- /dev/null +++ b/guidoar-dev/tools/guidotopn.cpp @@ -0,0 +1,105 @@ +/* + this file is automatically generated from template.cxx + don't modify unles you're ready to loose your changes +*/ + +#include +#include +#include + +#include "common.cxx" + +#include "desc/guidotopn.h" + +//_______________________________________________________________________________ +static void usage(char * name) +{ + cerr << "usage: " << basename(name) << " score " << gArg << endl; + cerr << " " << gDesc << endl; + cerr << " " << scoredesc << endl; + cerr << " " << gArg << ": " << gArgDesc << endl; + exit (-1); +} + +//_______________________________________________________________________________ +template class operation +{ + typedef garErr (*TOperator)(const char*, T, ostream&); + TOperator fOperator; + string fScore; // the score argument + string fScoreArg; // to store the second score argument + vector fScoreArgs; // to store the second score argument + T fArg; + string fSdtIn; // intended to share stdin + + + bool readArg(const char* arg, int& value) const { return intVal (arg, value); } + bool readArg(const char* arg, float& value) const { return floatVal (arg, value); } + bool readArg(const char* arg, rational& value) const { return rationalVal (arg, value); } + bool readArg(const char* arg, string& value) { return gmnVal (arg, value, fSdtIn); } + bool readArg(const char* arg, const char*& value) { + if (gmnVal (arg, fScoreArg, fSdtIn)) { + value = fScoreArg.c_str(); + return true; + } + return false; + } + + public : + operation(TOperator op) : fOperator (op) {} + virtual ~operation() {} + + // strict run method: expects exaclty 2 arguments + bool strict_init (int argc, char* argv[]) { + if (argc != 3) return false; + if (!readArg (argv[1], fScore)) return false; + if (!readArg (argv[2], fArg)) return false; + return true; + } + + // relaxed run method: takes more than 2 arguments but only strings args are supported + bool init (int argc, char* argv[]) { + if (argc < 3) return false; + if (!readArg (argv[1], fScore)) return false; + for (int i=2; i op (guidoVTop); + if (op.strict_init(argc, argv)) { + garErr err = op.strict_run (cout); + if (err != kNoErr) { + error (err); + return err; + } + } + else usage (argv[0]); + return 0; +} + diff --git a/guidoar-dev/tools/guidotranspose.cpp b/guidoar-dev/tools/guidotranspose.cpp new file mode 100644 index 000000000..e73db224b --- /dev/null +++ b/guidoar-dev/tools/guidotranspose.cpp @@ -0,0 +1,105 @@ +/* + this file is automatically generated from template.cxx + don't modify unles you're ready to loose your changes +*/ + +#include +#include +#include + +#include "common.cxx" + +#include "desc/guidotranspose.h" + +//_______________________________________________________________________________ +static void usage(char * name) +{ + cerr << "usage: " << basename(name) << " score " << gArg << endl; + cerr << " " << gDesc << endl; + cerr << " " << scoredesc << endl; + cerr << " " << gArg << ": " << gArgDesc << endl; + exit (-1); +} + +//_______________________________________________________________________________ +template class operation +{ + typedef garErr (*TOperator)(const char*, T, ostream&); + TOperator fOperator; + string fScore; // the score argument + string fScoreArg; // to store the second score argument + vector fScoreArgs; // to store the second score argument + T fArg; + string fSdtIn; // intended to share stdin + + + bool readArg(const char* arg, int& value) const { return intVal (arg, value); } + bool readArg(const char* arg, float& value) const { return floatVal (arg, value); } + bool readArg(const char* arg, rational& value) const { return rationalVal (arg, value); } + bool readArg(const char* arg, string& value) { return gmnVal (arg, value, fSdtIn); } + bool readArg(const char* arg, const char*& value) { + if (gmnVal (arg, fScoreArg, fSdtIn)) { + value = fScoreArg.c_str(); + return true; + } + return false; + } + + public : + operation(TOperator op) : fOperator (op) {} + virtual ~operation() {} + + // strict run method: expects exaclty 2 arguments + bool strict_init (int argc, char* argv[]) { + if (argc != 3) return false; + if (!readArg (argv[1], fScore)) return false; + if (!readArg (argv[2], fArg)) return false; + return true; + } + + // relaxed run method: takes more than 2 arguments but only strings args are supported + bool init (int argc, char* argv[]) { + if (argc < 3) return false; + if (!readArg (argv[1], fScore)) return false; + for (int i=2; i op (guidoGTranpose); + if (op.strict_init(argc, argv)) { + garErr err = op.strict_run (cout); + if (err != kNoErr) { + error (err); + return err; + } + } + else usage (argv[0]); + return 0; +} + diff --git a/guidoar-dev/tools/guidotransposei.cpp b/guidoar-dev/tools/guidotransposei.cpp new file mode 100644 index 000000000..016387b68 --- /dev/null +++ b/guidoar-dev/tools/guidotransposei.cpp @@ -0,0 +1,105 @@ +/* + this file is automatically generated from template.cxx + don't modify unles you're ready to loose your changes +*/ + +#include +#include +#include + +#include "common.cxx" + +#include "desc/guidotransposei.h" + +//_______________________________________________________________________________ +static void usage(char * name) +{ + cerr << "usage: " << basename(name) << " score " << gArg << endl; + cerr << " " << gDesc << endl; + cerr << " " << scoredesc << endl; + cerr << " " << gArg << ": " << gArgDesc << endl; + exit (-1); +} + +//_______________________________________________________________________________ +template class operation +{ + typedef garErr (*TOperator)(const char*, T, ostream&); + TOperator fOperator; + string fScore; // the score argument + string fScoreArg; // to store the second score argument + vector fScoreArgs; // to store the second score argument + T fArg; + string fSdtIn; // intended to share stdin + + + bool readArg(const char* arg, int& value) const { return intVal (arg, value); } + bool readArg(const char* arg, float& value) const { return floatVal (arg, value); } + bool readArg(const char* arg, rational& value) const { return rationalVal (arg, value); } + bool readArg(const char* arg, string& value) { return gmnVal (arg, value, fSdtIn); } + bool readArg(const char* arg, const char*& value) { + if (gmnVal (arg, fScoreArg, fSdtIn)) { + value = fScoreArg.c_str(); + return true; + } + return false; + } + + public : + operation(TOperator op) : fOperator (op) {} + virtual ~operation() {} + + // strict run method: expects exaclty 2 arguments + bool strict_init (int argc, char* argv[]) { + if (argc != 3) return false; + if (!readArg (argv[1], fScore)) return false; + if (!readArg (argv[2], fArg)) return false; + return true; + } + + // relaxed run method: takes more than 2 arguments but only strings args are supported + bool init (int argc, char* argv[]) { + if (argc < 3) return false; + if (!readArg (argv[1], fScore)) return false; + for (int i=2; i op (guidoVTranpose); + if (op.strict_init(argc, argv)) { + garErr err = op.strict_run (cout); + if (err != kNoErr) { + error (err); + return err; + } + } + else usage (argv[0]); + return 0; +} + diff --git a/guidoar-dev/tools/template.cxx b/guidoar-dev/tools/template.cxx new file mode 100644 index 000000000..9ef7c261a --- /dev/null +++ b/guidoar-dev/tools/template.cxx @@ -0,0 +1,105 @@ +/* + this file is automatically generated from template.cxx + don't modify unles you're ready to loose your changes +*/ + +#include +#include +#include + +#include "common.cxx" + +#include "desc/__desc__.h" + +//_______________________________________________________________________________ +static void usage(char * name) +{ + cerr << "usage: " << basename(name) << " score " << gArg << endl; + cerr << " " << gDesc << endl; + cerr << " " << scoredesc << endl; + cerr << " " << gArg << ": " << gArgDesc << endl; + exit (-1); +} + +//_______________________________________________________________________________ +template class operation +{ + typedef garErr (*TOperator)(const char*, T, ostream&); + TOperator fOperator; + string fScore; // the score argument + string fScoreArg; // to store the second score argument + vector fScoreArgs; // to store the second score argument + T fArg; + string fSdtIn; // intended to share stdin + + + bool readArg(const char* arg, int& value) const { return intVal (arg, value); } + bool readArg(const char* arg, float& value) const { return floatVal (arg, value); } + bool readArg(const char* arg, rational& value) const { return rationalVal (arg, value); } + bool readArg(const char* arg, string& value) { return gmnVal (arg, value, fSdtIn); } + bool readArg(const char* arg, const char*& value) { + if (gmnVal (arg, fScoreArg, fSdtIn)) { + value = fScoreArg.c_str(); + return true; + } + return false; + } + + public : + operation(TOperator op) : fOperator (op) {} + virtual ~operation() {} + + // strict run method: expects exaclty 2 arguments + bool strict_init (int argc, char* argv[]) { + if (argc != 3) return false; + if (!readArg (argv[1], fScore)) return false; + if (!readArg (argv[2], fArg)) return false; + return true; + } + + // relaxed run method: takes more than 2 arguments but only strings args are supported + bool init (int argc, char* argv[]) { + if (argc < 3) return false; + if (!readArg (argv[1], fScore)) return false; + for (int i=2; i op (__operator__); + if (op.__strict__init(argc, argv)) { + garErr err = op.__strict__run (cout); + if (err != kNoErr) { + error (err); + return err; + } + } + else usage (argv[0]); + return 0; +} + diff --git a/guidoar-dev/validation/Makefile b/guidoar-dev/validation/Makefile new file mode 100644 index 000000000..8f2d68397 --- /dev/null +++ b/guidoar-dev/validation/Makefile @@ -0,0 +1,107 @@ +# +# Makefile for testing the guidoar tools +# +# Checking the engine output +# the principle is the following: +# an image target generates image files using guido2image for a large set of gmn files +# the validate target makes the comparison of files generated by different versions +# +# Checking memory leaks +# requires valgrind +# + +version := $(shell guidoarversion) +system := $(shell uname -s) +tool := guidohead +arg := "[ a g f ]" + + + +gmninput = $(shell find ../gmn -name "*.gmn") +gmnfiles = $(shell find $(version)/$(tool) -name "*.gmn") +pdffiles := $(patsubst %.gmn, %.pdf, $(gmnfiles)) +midifiles := $(patsubst %.gmn, %.mid, $(gmnfiles)) +gmnout := $(patsubst ../%.gmn, $(version)/$(tool)/%.gmn, $(gmninput)) +seqout := $(patsubst ../%.gmn, $(version)/guidoseq/%.gmn, $(gmninput)) +pitchout := $(patsubst ../%.gmn, $(version)/guidoapplypitch/%.gmn, $(gmninput)) +rythmout := $(patsubst ../%.gmn, $(version)/guidoapplyrythm/%.gmn, $(gmninput)) +parout := $(patsubst ../%.gmn, $(version)/guidopar/%.gmn, $(gmninput)) +allgmn = $(shell [ -d $(version)/$(tool) ] && find $(version)/$(tool) -name "*.gmn") + +checkgmn = $(patsubst %.gmn, %.checkgmn, $(allgmn)) +durgmn = $(patsubst %.gmn, %.durgmn, $(allgmn)) +validgmn = $(patsubst %.gmn, %.outgmn, $(allgmn)) + + +default : cut + +help: + @echo "Makefile for testing the guidoar tools output. Available targets are:" + @echo "'cut' (default): test cut operations (head tail, evhead, evtail..." + + +######################################################################### +# tools to check the output correctness +check: $(checkgmn) +checkdur: $(durgmn) +pdf: $(pdffiles) +midi: $(midifiles) +applypitch: $(pitchout) +applyrythm: $(rythmout) + +%.checkgmn: %.gmn + guidocheck $< + +%.durgmn: %.gmn + guidoduration $< + +######################################################################### +# tools to validate the output, based diff +validate: $(validgmn) + @echo Validating $(tool) - version $(version) with $(VERSION) + +%.outgmn: %.gmn + $(eval tmp := $(patsubst $(version)/$(tool)/%, $(VERSION)/$(tool)/%, $<)) + @[ -f $(tmp) ] || echo $< : new file + @diff $< $(tmp) 2>/dev/null >/dev/null || ([ -f $(tmp) ] && echo "open -t $< $(patsubst $(version)/$(tool)/%, $(VERSION)/$(tool)/%, $<) # to check changes"; true) + +######################################################################### +clean: + rm -f $(gmnout) + +######################################################################### +# tools to generate output files +cut: $(gmnout) +seq: $(seqout) +par: $(parout) + +$(version)/$(tool)/%.gmn: ../%.gmn + @[ -d $(@D) ] || mkdir -p $(@D) + -$(tool) $< $(arg) > $@ + +$(version)/guidoseq/%.gmn: ../%.gmn + @[ -d $(@D) ] || mkdir -p $(@D) + $(eval a := $(patsubst $(version)/guidoseq/%, $(version)/guidohead/%, $@)) + $(eval b := $(patsubst $(version)/guidoseq/%, $(version)/guidotail/%, $@)) + -guidoseq $(a) $(b) > $@ + +$(version)/guidoapplypitch/%.gmn: ../%.gmn + @[ -d $(@D) ] || mkdir -p $(@D) + -guidoapplypitch -fbloop -high "[a g f e d c]" $< > $@ + +$(version)/guidoapplyrythm/%.gmn: ../%.gmn + @[ -d $(@D) ] || mkdir -p $(@D) + -guidoapplyrythm -loop "[a a/8 a a. a/16 a a/8.]" $< > $@ + +$(version)/guidopar/%.gmn: ../%.gmn + @[ -d $(@D) ] || mkdir -p $(@D) + $(eval a := $(patsubst $(version)/guidopar/%, $(version)/guidotop/%, $@)) + $(eval b := $(patsubst $(version)/guidopar/%, $(version)/guidobottom/%, $@)) + -guidopar $(a) $(b) > $@ + +%.pdf: %.gmn + guido2image -f $< -o $@ + +%.mid: %.gmn + guido2midi $< $@ + diff --git a/guidoar-dev/version b/guidoar-dev/version new file mode 100644 index 000000000..cd06dd503 --- /dev/null +++ b/guidoar-dev/version @@ -0,0 +1,37 @@ +#!/bin/sh +# +# GuidoAR project +# version management tool +# + +if [ $# -ne 1 ] +then + echo "usage: version version_num" + echo " version_num format: n.n" + exit 1 +fi + +ROOT=. +VERSION=$1 + + +echo "moving version number to $VERSION" + +CMAKE=$ROOT/build/CMakeLists.txt +echo " updating $CMAKE" +sed "s/\(set ([A-Z]*VERS[^0-9]*\)[0-9]*\.[0-9]*/\1$VERSION/" $CMAKE > TMP$$ +mv -f TMP$$ $CMAKE +cmake -G Xcode $ROOT/cmake + +DOC=$ROOT/doc/Doxyfile +echo " updating $DOC" +sed "s/\(PROJECT_NUMBER[ ]*=\)[0-9]*\.[0-9]*/\1$VERSION/" $DOC > TMP$$ +mv -f TMP$$ $DOC + +DOC=$ROOT/doc/internal/Doxyfile +echo " updating $DOC" +sed "s/\(PROJECT_NUMBER[ ]*=\)[0-9]*\.[0-9]*/\1$VERSION/" $DOC > TMP$$ +mv -f TMP$$ $DOC + +echo "==> change manually libguidoar.cpp and libguidoar.rc" +open -t rsrc/libguidoar.rc src/interface/libguidoar.cpp diff --git a/inst.bat b/inst.bat new file mode 100644 index 000000000..a71015992 --- /dev/null +++ b/inst.bat @@ -0,0 +1,9 @@ + +pause Please Build x64 guidolib.sln sln in debug and in release... +move /y F:\guidolib\build\lib\Debug\SGUIDOEngine.lib f:\guidolib\g64d.lib +move /y F:\guidolib\build\lib\Release\SGUIDOEngine.lib f:\guidolib\g64r.lib + +pause Please Build x86 guidolib.sln sln in debug and in release... +move /y F:\guidolib\build\lib\Debug\SGUIDOEngine.lib f:\guidolib\g32d.lib +move /y F:\guidolib\build\lib\Release\SGUIDOEngine.lib f:\guidolib\g32r.lib + diff --git a/out32/.vs/guidolib/CopilotIndices/17.12.53.23981/CodeChunks.db b/out32/.vs/guidolib/CopilotIndices/17.12.53.23981/CodeChunks.db new file mode 100644 index 000000000..affb123aa Binary files /dev/null and b/out32/.vs/guidolib/CopilotIndices/17.12.53.23981/CodeChunks.db differ diff --git a/out32/.vs/guidolib/CopilotIndices/17.12.53.23981/SemanticSymbols.db b/out32/.vs/guidolib/CopilotIndices/17.12.53.23981/SemanticSymbols.db new file mode 100644 index 000000000..ffcfd46fc Binary files /dev/null and b/out32/.vs/guidolib/CopilotIndices/17.12.53.23981/SemanticSymbols.db differ diff --git a/out32/.vs/guidolib/CopilotIndices/17.12.53.23981/SemanticSymbols.db-shm b/out32/.vs/guidolib/CopilotIndices/17.12.53.23981/SemanticSymbols.db-shm new file mode 100644 index 000000000..8cafad846 Binary files /dev/null and b/out32/.vs/guidolib/CopilotIndices/17.12.53.23981/SemanticSymbols.db-shm differ diff --git a/out32/.vs/guidolib/CopilotIndices/17.12.53.23981/SemanticSymbols.db-wal b/out32/.vs/guidolib/CopilotIndices/17.12.53.23981/SemanticSymbols.db-wal new file mode 100644 index 000000000..12f332312 Binary files /dev/null and b/out32/.vs/guidolib/CopilotIndices/17.12.53.23981/SemanticSymbols.db-wal differ diff --git a/out32/.vs/guidolib/FileContentIndex/05ff4258-e421-4f25-92e8-86b8eb609df0.vsidx b/out32/.vs/guidolib/FileContentIndex/05ff4258-e421-4f25-92e8-86b8eb609df0.vsidx new file mode 100644 index 000000000..3558f0f02 Binary files /dev/null and b/out32/.vs/guidolib/FileContentIndex/05ff4258-e421-4f25-92e8-86b8eb609df0.vsidx differ diff --git a/out32/.vs/guidolib/FileContentIndex/36ed8168-a281-4d14-a770-a5fd6ca9eaef.vsidx b/out32/.vs/guidolib/FileContentIndex/36ed8168-a281-4d14-a770-a5fd6ca9eaef.vsidx new file mode 100644 index 000000000..3eb1dd97d Binary files /dev/null and b/out32/.vs/guidolib/FileContentIndex/36ed8168-a281-4d14-a770-a5fd6ca9eaef.vsidx differ diff --git a/out32/.vs/guidolib/FileContentIndex/4c932c81-562e-4059-b626-c376ceae6b00.vsidx b/out32/.vs/guidolib/FileContentIndex/4c932c81-562e-4059-b626-c376ceae6b00.vsidx new file mode 100644 index 000000000..09ca36a34 Binary files /dev/null and b/out32/.vs/guidolib/FileContentIndex/4c932c81-562e-4059-b626-c376ceae6b00.vsidx differ diff --git a/out32/.vs/guidolib/FileContentIndex/51d0f8ed-fbab-4b11-a621-425d3f03a5a1.vsidx b/out32/.vs/guidolib/FileContentIndex/51d0f8ed-fbab-4b11-a621-425d3f03a5a1.vsidx new file mode 100644 index 000000000..8ecb82518 Binary files /dev/null and b/out32/.vs/guidolib/FileContentIndex/51d0f8ed-fbab-4b11-a621-425d3f03a5a1.vsidx differ diff --git a/out32/.vs/guidolib/FileContentIndex/853b3c37-d01b-4946-9a70-ad127115338d.vsidx b/out32/.vs/guidolib/FileContentIndex/853b3c37-d01b-4946-9a70-ad127115338d.vsidx new file mode 100644 index 000000000..de3db1e68 Binary files /dev/null and b/out32/.vs/guidolib/FileContentIndex/853b3c37-d01b-4946-9a70-ad127115338d.vsidx differ diff --git a/out32/.vs/guidolib/project-colors.json b/out32/.vs/guidolib/project-colors.json new file mode 100644 index 000000000..069efb914 --- /dev/null +++ b/out32/.vs/guidolib/project-colors.json @@ -0,0 +1,11 @@ +{ + "Version": 1, + "ProjectMap": { + "a2fe74e1-b743-11d0-ae1a-00a0c90fffc3": { + "ProjectGuid": "a2fe74e1-b743-11d0-ae1a-00a0c90fffc3", + "DisplayName": "Miscellaneous Files", + "ColorIndex": -1 + } + }, + "NextColorIndex": 0 +} \ No newline at end of file diff --git a/out32/.vs/guidolib/v16/.suo b/out32/.vs/guidolib/v16/.suo new file mode 100644 index 000000000..f86aba92c Binary files /dev/null and b/out32/.vs/guidolib/v16/.suo differ diff --git a/out32/.vs/guidolib/v16/Solution.VC.db b/out32/.vs/guidolib/v16/Solution.VC.db new file mode 100644 index 000000000..8a8e454ac Binary files /dev/null and b/out32/.vs/guidolib/v16/Solution.VC.db differ diff --git a/out32/.vs/guidolib/v17/.suo b/out32/.vs/guidolib/v17/.suo new file mode 100644 index 000000000..5e35f2662 Binary files /dev/null and b/out32/.vs/guidolib/v17/.suo differ diff --git a/out32/.vs/guidolib/v17/Current/Solution.VC.db b/out32/.vs/guidolib/v17/Current/Solution.VC.db new file mode 100644 index 000000000..23a0aa22a Binary files /dev/null and b/out32/.vs/guidolib/v17/Current/Solution.VC.db differ diff --git a/out32/.vs/guidolib/v17/DocumentLayout.backup.json b/out32/.vs/guidolib/v17/DocumentLayout.backup.json new file mode 100644 index 000000000..0aae2610b --- /dev/null +++ b/out32/.vs/guidolib/v17/DocumentLayout.backup.json @@ -0,0 +1,100 @@ +{ + "Version": 1, + "WorkspaceRootPath": "F:\\guidolib\\out32\\", + "Documents": [ + { + "AbsoluteMoniker": "D:0:0:{A2FE74E1-B743-11D0-AE1A-00A0C90FFFC3}|\u003CMiscFiles\u003E|F:\\guidolib\\src\\tools\\guido2svg.cpp||{D0E1A5C6-B359-4E41-9B60-3365922C2A22}" + }, + { + "AbsoluteMoniker": "D:0:0:{A2FE74E1-B743-11D0-AE1A-00A0C90FFFC3}|\u003CMiscFiles\u003E|F:\\guidolib\\src\\tools\\guido2proll.cpp||{D0E1A5C6-B359-4E41-9B60-3365922C2A22}" + }, + { + "AbsoluteMoniker": "D:0:0:{A2FE74E1-B743-11D0-AE1A-00A0C90FFFC3}|\u003CMiscFiles\u003E|F:\\guidolib\\src\\tools\\guido2midi.cpp||{D0E1A5C6-B359-4E41-9B60-3365922C2A22}" + }, + { + "AbsoluteMoniker": "D:0:0:{AD5073BA-A99B-307D-9A71-F1CA26C6AE0D}|SGUIDOEngine.vcxproj|F:\\guidolib\\src\\engine\\abstract\\ARAccolade.cpp||{D0E1A5C6-B359-4E41-9B60-3365922C2A22}" + }, + { + "AbsoluteMoniker": "D:0:0:{AD5073BA-A99B-307D-9A71-F1CA26C6AE0D}|SGUIDOEngine.vcxproj|F:\\guidolib\\src\\engine\\devices\\AbstractFont.cpp||{D0E1A5C6-B359-4E41-9B60-3365922C2A22}" + } + ], + "DocumentGroupContainers": [ + { + "Orientation": 0, + "VerticalTabListWidth": 256, + "DocumentGroups": [ + { + "DockedWidth": 200, + "SelectedChildIndex": 1, + "Children": [ + { + "$type": "Bookmark", + "Name": "ST:0:0:{1c4feeaa-4718-4aa9-859d-94ce25d182ba}" + }, + { + "$type": "Document", + "DocumentIndex": 0, + "Title": "guido2svg.cpp", + "DocumentMoniker": "F:\\guidolib\\src\\tools\\guido2svg.cpp", + "RelativeDocumentMoniker": "..\\src\\tools\\guido2svg.cpp", + "ToolTip": "F:\\guidolib\\src\\tools\\guido2svg.cpp", + "RelativeToolTip": "..\\src\\tools\\guido2svg.cpp", + "ViewState": "AgIAABgBAAAAAAAAAAAAACoBAAAKAAAAAAAAAA==", + "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000677|", + "WhenOpened": "2024-12-22T21:39:20.506Z", + "EditorCaption": "" + }, + { + "$type": "Document", + "DocumentIndex": 1, + "Title": "guido2proll.cpp", + "DocumentMoniker": "F:\\guidolib\\src\\tools\\guido2proll.cpp", + "RelativeDocumentMoniker": "..\\src\\tools\\guido2proll.cpp", + "ToolTip": "F:\\guidolib\\src\\tools\\guido2proll.cpp", + "RelativeToolTip": "..\\src\\tools\\guido2proll.cpp", + "ViewState": "AgIAABoAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAA==", + "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000677|", + "WhenOpened": "2024-12-22T21:39:03.685Z" + }, + { + "$type": "Document", + "DocumentIndex": 2, + "Title": "guido2midi.cpp", + "DocumentMoniker": "F:\\guidolib\\src\\tools\\guido2midi.cpp", + "RelativeDocumentMoniker": "..\\src\\tools\\guido2midi.cpp", + "ToolTip": "F:\\guidolib\\src\\tools\\guido2midi.cpp", + "RelativeToolTip": "..\\src\\tools\\guido2midi.cpp", + "ViewState": "AgIAAG0AAAAAAAAAAAAAAH0AAAAaAAAAAAAAAA==", + "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000677|", + "WhenOpened": "2024-12-22T21:38:02.151Z" + }, + { + "$type": "Document", + "DocumentIndex": 3, + "Title": "ARAccolade.cpp", + "DocumentMoniker": "F:\\guidolib\\src\\engine\\abstract\\ARAccolade.cpp", + "RelativeDocumentMoniker": "..\\src\\engine\\abstract\\ARAccolade.cpp", + "ToolTip": "F:\\guidolib\\src\\engine\\abstract\\ARAccolade.cpp", + "RelativeToolTip": "..\\src\\engine\\abstract\\ARAccolade.cpp", + "ViewState": "AgIAAAAAAAAAAAAAAAAAABEAAAAAAAAAAAAAAA==", + "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000677|", + "WhenOpened": "2024-02-24T16:49:13.293Z" + }, + { + "$type": "Document", + "DocumentIndex": 4, + "Title": "AbstractFont.cpp", + "DocumentMoniker": "F:\\guidolib\\src\\engine\\devices\\AbstractFont.cpp", + "RelativeDocumentMoniker": "..\\src\\engine\\devices\\AbstractFont.cpp", + "ToolTip": "F:\\guidolib\\src\\engine\\devices\\AbstractFont.cpp", + "RelativeToolTip": "..\\src\\engine\\devices\\AbstractFont.cpp", + "ViewState": "AQIAAAAAAAAAAAAAAAAAAAAAAAAAAAAA", + "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000677|", + "WhenOpened": "2024-02-24T16:49:05.955Z" + } + ] + } + ] + } + ] +} \ No newline at end of file diff --git a/out32/.vs/guidolib/v17/DocumentLayout.json b/out32/.vs/guidolib/v17/DocumentLayout.json new file mode 100644 index 000000000..0aae2610b --- /dev/null +++ b/out32/.vs/guidolib/v17/DocumentLayout.json @@ -0,0 +1,100 @@ +{ + "Version": 1, + "WorkspaceRootPath": "F:\\guidolib\\out32\\", + "Documents": [ + { + "AbsoluteMoniker": "D:0:0:{A2FE74E1-B743-11D0-AE1A-00A0C90FFFC3}|\u003CMiscFiles\u003E|F:\\guidolib\\src\\tools\\guido2svg.cpp||{D0E1A5C6-B359-4E41-9B60-3365922C2A22}" + }, + { + "AbsoluteMoniker": "D:0:0:{A2FE74E1-B743-11D0-AE1A-00A0C90FFFC3}|\u003CMiscFiles\u003E|F:\\guidolib\\src\\tools\\guido2proll.cpp||{D0E1A5C6-B359-4E41-9B60-3365922C2A22}" + }, + { + "AbsoluteMoniker": "D:0:0:{A2FE74E1-B743-11D0-AE1A-00A0C90FFFC3}|\u003CMiscFiles\u003E|F:\\guidolib\\src\\tools\\guido2midi.cpp||{D0E1A5C6-B359-4E41-9B60-3365922C2A22}" + }, + { + "AbsoluteMoniker": "D:0:0:{AD5073BA-A99B-307D-9A71-F1CA26C6AE0D}|SGUIDOEngine.vcxproj|F:\\guidolib\\src\\engine\\abstract\\ARAccolade.cpp||{D0E1A5C6-B359-4E41-9B60-3365922C2A22}" + }, + { + "AbsoluteMoniker": "D:0:0:{AD5073BA-A99B-307D-9A71-F1CA26C6AE0D}|SGUIDOEngine.vcxproj|F:\\guidolib\\src\\engine\\devices\\AbstractFont.cpp||{D0E1A5C6-B359-4E41-9B60-3365922C2A22}" + } + ], + "DocumentGroupContainers": [ + { + "Orientation": 0, + "VerticalTabListWidth": 256, + "DocumentGroups": [ + { + "DockedWidth": 200, + "SelectedChildIndex": 1, + "Children": [ + { + "$type": "Bookmark", + "Name": "ST:0:0:{1c4feeaa-4718-4aa9-859d-94ce25d182ba}" + }, + { + "$type": "Document", + "DocumentIndex": 0, + "Title": "guido2svg.cpp", + "DocumentMoniker": "F:\\guidolib\\src\\tools\\guido2svg.cpp", + "RelativeDocumentMoniker": "..\\src\\tools\\guido2svg.cpp", + "ToolTip": "F:\\guidolib\\src\\tools\\guido2svg.cpp", + "RelativeToolTip": "..\\src\\tools\\guido2svg.cpp", + "ViewState": "AgIAABgBAAAAAAAAAAAAACoBAAAKAAAAAAAAAA==", + "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000677|", + "WhenOpened": "2024-12-22T21:39:20.506Z", + "EditorCaption": "" + }, + { + "$type": "Document", + "DocumentIndex": 1, + "Title": "guido2proll.cpp", + "DocumentMoniker": "F:\\guidolib\\src\\tools\\guido2proll.cpp", + "RelativeDocumentMoniker": "..\\src\\tools\\guido2proll.cpp", + "ToolTip": "F:\\guidolib\\src\\tools\\guido2proll.cpp", + "RelativeToolTip": "..\\src\\tools\\guido2proll.cpp", + "ViewState": "AgIAABoAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAA==", + "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000677|", + "WhenOpened": "2024-12-22T21:39:03.685Z" + }, + { + "$type": "Document", + "DocumentIndex": 2, + "Title": "guido2midi.cpp", + "DocumentMoniker": "F:\\guidolib\\src\\tools\\guido2midi.cpp", + "RelativeDocumentMoniker": "..\\src\\tools\\guido2midi.cpp", + "ToolTip": "F:\\guidolib\\src\\tools\\guido2midi.cpp", + "RelativeToolTip": "..\\src\\tools\\guido2midi.cpp", + "ViewState": "AgIAAG0AAAAAAAAAAAAAAH0AAAAaAAAAAAAAAA==", + "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000677|", + "WhenOpened": "2024-12-22T21:38:02.151Z" + }, + { + "$type": "Document", + "DocumentIndex": 3, + "Title": "ARAccolade.cpp", + "DocumentMoniker": "F:\\guidolib\\src\\engine\\abstract\\ARAccolade.cpp", + "RelativeDocumentMoniker": "..\\src\\engine\\abstract\\ARAccolade.cpp", + "ToolTip": "F:\\guidolib\\src\\engine\\abstract\\ARAccolade.cpp", + "RelativeToolTip": "..\\src\\engine\\abstract\\ARAccolade.cpp", + "ViewState": "AgIAAAAAAAAAAAAAAAAAABEAAAAAAAAAAAAAAA==", + "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000677|", + "WhenOpened": "2024-02-24T16:49:13.293Z" + }, + { + "$type": "Document", + "DocumentIndex": 4, + "Title": "AbstractFont.cpp", + "DocumentMoniker": "F:\\guidolib\\src\\engine\\devices\\AbstractFont.cpp", + "RelativeDocumentMoniker": "..\\src\\engine\\devices\\AbstractFont.cpp", + "ToolTip": "F:\\guidolib\\src\\engine\\devices\\AbstractFont.cpp", + "RelativeToolTip": "..\\src\\engine\\devices\\AbstractFont.cpp", + "ViewState": "AQIAAAAAAAAAAAAAAAAAAAAAAAAAAAAA", + "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000677|", + "WhenOpened": "2024-02-24T16:49:05.955Z" + } + ] + } + ] + } + ] +} \ No newline at end of file diff --git a/out32/.vs/guidolib/v17/Solution.VC.db b/out32/.vs/guidolib/v17/Solution.VC.db new file mode 100644 index 000000000..fe2acd4aa Binary files /dev/null and b/out32/.vs/guidolib/v17/Solution.VC.db differ diff --git a/out32/.vs/guidolib/v17/fileList.bin b/out32/.vs/guidolib/v17/fileList.bin new file mode 100644 index 000000000..67f5d34a1 Binary files /dev/null and b/out32/.vs/guidolib/v17/fileList.bin differ diff --git a/out32/CPackConfig.cmake b/out32/CPackConfig.cmake new file mode 100644 index 000000000..a05040f20 --- /dev/null +++ b/out32/CPackConfig.cmake @@ -0,0 +1,70 @@ +# This file will be configured to contain variables for CPack. These variables +# should be set in the CMake list file of the project before CPack module is +# included. The list of available CPACK_xxx variables and their associated +# documentation may be obtained using +# cpack --help-variable-list +# +# Some variables are common to all generators (e.g. CPACK_PACKAGE_NAME) +# and some are specific to a generator +# (e.g. CPACK_NSIS_EXTRA_INSTALL_COMMANDS). The generator specific variables +# usually begin with CPACK__xxxx. + + +set(CPACK_BINARY_7Z "OFF") +set(CPACK_BINARY_IFW "OFF") +set(CPACK_BINARY_NSIS "ON") +set(CPACK_BINARY_NUGET "OFF") +set(CPACK_BINARY_WIX "OFF") +set(CPACK_BINARY_ZIP "OFF") +set(CPACK_BUILD_SOURCE_DIRS "F:/guidolib/build;F:/guidolib/out32") +set(CPACK_CMAKE_GENERATOR "Visual Studio 16 2019") +set(CPACK_COMPONENT_UNSPECIFIED_HIDDEN "TRUE") +set(CPACK_COMPONENT_UNSPECIFIED_REQUIRED "TRUE") +set(CPACK_DEFAULT_PACKAGE_DESCRIPTION_FILE "G:/PROGS/cmake/share/cmake-3.19/Templates/CPack.GenericDescription.txt") +set(CPACK_DEFAULT_PACKAGE_DESCRIPTION_SUMMARY "guidolib built using CMake") +set(CPACK_GENERATOR "NSIS64") +set(CPACK_INSTALL_CMAKE_PROJECTS "F:/guidolib/out32;guidolib;ALL;/") +set(CPACK_INSTALL_PREFIX "C:/Users/chour/Guido-1.7.1") +set(CPACK_MODULE_PATH "") +set(CPACK_MONOLITHIC_INSTALL "true") +set(CPACK_NSIS_DISPLAY_NAME "GuidoLib-1.7.1") +set(CPACK_NSIS_INSTALLER_ICON_CODE "") +set(CPACK_NSIS_INSTALLER_MUI_ICON_CODE "") +set(CPACK_NSIS_INSTALL_ROOT "C:\\Program Files") +set(CPACK_NSIS_MODIFY_PATH "ON") +set(CPACK_NSIS_MUI_ICON "F:/guidolib/misc/logo.ico") +set(CPACK_NSIS_PACKAGE_NAME "GuidoLib-1.7.1") +set(CPACK_NSIS_UNINSTALL_NAME "Uninstall") +set(CPACK_OUTPUT_CONFIG_FILE "F:/guidolib/out32/CPackConfig.cmake") +set(CPACK_PACKAGE_DEFAULT_LOCATION "/") +set(CPACK_PACKAGE_DESCRIPTION_FILE "G:/PROGS/cmake/share/cmake-3.19/Templates/CPack.GenericDescription.txt") +set(CPACK_PACKAGE_DESCRIPTION_SUMMARY "GuidoLib - a set of tools and libraries for music score rendering, based on the Guido Music Notation language.") +set(CPACK_PACKAGE_FILE_NAME "GuidoLib-1.7.1-win32") +set(CPACK_PACKAGE_INSTALL_DIRECTORY "GuidoLib-1.7.1") +set(CPACK_PACKAGE_INSTALL_REGISTRY_KEY "GuidoLib-1.7.1") +set(CPACK_PACKAGE_NAME "GuidoLib") +set(CPACK_PACKAGE_RELOCATABLE "true") +set(CPACK_PACKAGE_VENDOR "GRAME") +set(CPACK_PACKAGE_VERSION "1.7.1") +set(CPACK_PACKAGE_VERSION_MAJOR "1") +set(CPACK_PACKAGE_VERSION_MINOR "7") +set(CPACK_PACKAGE_VERSION_PATCH "1") +set(CPACK_RESOURCE_FILE_LICENSE "F:/guidolib/src/license.txt") +set(CPACK_RESOURCE_FILE_README "G:/PROGS/cmake/share/cmake-3.19/Templates/CPack.GenericDescription.txt") +set(CPACK_RESOURCE_FILE_WELCOME "G:/PROGS/cmake/share/cmake-3.19/Templates/CPack.GenericWelcome.txt") +set(CPACK_SET_DESTDIR "OFF") +set(CPACK_SOURCE_7Z "ON") +set(CPACK_SOURCE_GENERATOR "7Z;ZIP") +set(CPACK_SOURCE_OUTPUT_CONFIG_FILE "F:/guidolib/out32/CPackSourceConfig.cmake") +set(CPACK_SOURCE_ZIP "ON") +set(CPACK_SYSTEM_NAME "win32") +set(CPACK_TOPLEVEL_TAG "win32") +set(CPACK_WIX_SIZEOF_VOID_P "4") + +if(NOT CPACK_PROPERTIES_FILE) + set(CPACK_PROPERTIES_FILE "F:/guidolib/out32/CPackProperties.cmake") +endif() + +if(EXISTS ${CPACK_PROPERTIES_FILE}) + include(${CPACK_PROPERTIES_FILE}) +endif() diff --git a/out32/CPackSourceConfig.cmake b/out32/CPackSourceConfig.cmake new file mode 100644 index 000000000..de51a335a --- /dev/null +++ b/out32/CPackSourceConfig.cmake @@ -0,0 +1,78 @@ +# This file will be configured to contain variables for CPack. These variables +# should be set in the CMake list file of the project before CPack module is +# included. The list of available CPACK_xxx variables and their associated +# documentation may be obtained using +# cpack --help-variable-list +# +# Some variables are common to all generators (e.g. CPACK_PACKAGE_NAME) +# and some are specific to a generator +# (e.g. CPACK_NSIS_EXTRA_INSTALL_COMMANDS). The generator specific variables +# usually begin with CPACK__xxxx. + + +set(CPACK_BINARY_7Z "OFF") +set(CPACK_BINARY_IFW "OFF") +set(CPACK_BINARY_NSIS "ON") +set(CPACK_BINARY_NUGET "OFF") +set(CPACK_BINARY_WIX "OFF") +set(CPACK_BINARY_ZIP "OFF") +set(CPACK_BUILD_SOURCE_DIRS "F:/guidolib/build;F:/guidolib/out32") +set(CPACK_CMAKE_GENERATOR "Visual Studio 16 2019") +set(CPACK_COMPONENT_UNSPECIFIED_HIDDEN "TRUE") +set(CPACK_COMPONENT_UNSPECIFIED_REQUIRED "TRUE") +set(CPACK_DEFAULT_PACKAGE_DESCRIPTION_FILE "G:/PROGS/cmake/share/cmake-3.19/Templates/CPack.GenericDescription.txt") +set(CPACK_DEFAULT_PACKAGE_DESCRIPTION_SUMMARY "guidolib built using CMake") +set(CPACK_GENERATOR "7Z;ZIP") +set(CPACK_IGNORE_FILES "/CVS/;/\\.svn/;/\\.bzr/;/\\.hg/;/\\.git/;\\.swp\$;\\.#;/#") +set(CPACK_INSTALLED_DIRECTORIES "F:/guidolib/build;/") +set(CPACK_INSTALL_CMAKE_PROJECTS "") +set(CPACK_INSTALL_PREFIX "C:/Users/chour/Guido-1.7.1") +set(CPACK_MODULE_PATH "") +set(CPACK_MONOLITHIC_INSTALL "true") +set(CPACK_NSIS_DISPLAY_NAME "GuidoLib-1.7.1") +set(CPACK_NSIS_INSTALLER_ICON_CODE "") +set(CPACK_NSIS_INSTALLER_MUI_ICON_CODE "") +set(CPACK_NSIS_INSTALL_ROOT "C:\\Program Files") +set(CPACK_NSIS_MODIFY_PATH "ON") +set(CPACK_NSIS_MUI_ICON "F:/guidolib/misc/logo.ico") +set(CPACK_NSIS_PACKAGE_NAME "GuidoLib-1.7.1") +set(CPACK_NSIS_UNINSTALL_NAME "Uninstall") +set(CPACK_OUTPUT_CONFIG_FILE "F:/guidolib/out32/CPackConfig.cmake") +set(CPACK_PACKAGE_DEFAULT_LOCATION "/") +set(CPACK_PACKAGE_DESCRIPTION_FILE "G:/PROGS/cmake/share/cmake-3.19/Templates/CPack.GenericDescription.txt") +set(CPACK_PACKAGE_DESCRIPTION_SUMMARY "GuidoLib - a set of tools and libraries for music score rendering, based on the Guido Music Notation language.") +set(CPACK_PACKAGE_FILE_NAME "GuidoLib-1.7.1-Source") +set(CPACK_PACKAGE_INSTALL_DIRECTORY "GuidoLib-1.7.1") +set(CPACK_PACKAGE_INSTALL_REGISTRY_KEY "GuidoLib-1.7.1") +set(CPACK_PACKAGE_NAME "GuidoLib") +set(CPACK_PACKAGE_RELOCATABLE "true") +set(CPACK_PACKAGE_VENDOR "GRAME") +set(CPACK_PACKAGE_VERSION "1.7.1") +set(CPACK_PACKAGE_VERSION_MAJOR "1") +set(CPACK_PACKAGE_VERSION_MINOR "7") +set(CPACK_PACKAGE_VERSION_PATCH "1") +set(CPACK_RESOURCE_FILE_LICENSE "F:/guidolib/src/license.txt") +set(CPACK_RESOURCE_FILE_README "G:/PROGS/cmake/share/cmake-3.19/Templates/CPack.GenericDescription.txt") +set(CPACK_RESOURCE_FILE_WELCOME "G:/PROGS/cmake/share/cmake-3.19/Templates/CPack.GenericWelcome.txt") +set(CPACK_RPM_PACKAGE_SOURCES "ON") +set(CPACK_SET_DESTDIR "OFF") +set(CPACK_SOURCE_7Z "ON") +set(CPACK_SOURCE_GENERATOR "7Z;ZIP") +set(CPACK_SOURCE_IGNORE_FILES "/CVS/;/\\.svn/;/\\.bzr/;/\\.hg/;/\\.git/;\\.swp\$;\\.#;/#") +set(CPACK_SOURCE_INSTALLED_DIRECTORIES "F:/guidolib/build;/") +set(CPACK_SOURCE_OUTPUT_CONFIG_FILE "F:/guidolib/out32/CPackSourceConfig.cmake") +set(CPACK_SOURCE_PACKAGE_FILE_NAME "GuidoLib-1.7.1-Source") +set(CPACK_SOURCE_TOPLEVEL_TAG "win32-Source") +set(CPACK_SOURCE_ZIP "ON") +set(CPACK_STRIP_FILES "") +set(CPACK_SYSTEM_NAME "win32") +set(CPACK_TOPLEVEL_TAG "win32-Source") +set(CPACK_WIX_SIZEOF_VOID_P "4") + +if(NOT CPACK_PROPERTIES_FILE) + set(CPACK_PROPERTIES_FILE "F:/guidolib/out32/CPackProperties.cmake") +endif() + +if(EXISTS ${CPACK_PROPERTIES_FILE}) + include(${CPACK_PROPERTIES_FILE}) +endif() diff --git a/out32/guidolib.sln b/out32/guidolib.sln new file mode 100644 index 000000000..c3c3d276f --- /dev/null +++ b/out32/guidolib.sln @@ -0,0 +1,391 @@ + +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio Version 16 +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "ALL_BUILD", "ALL_BUILD.vcxproj", "{5F1214A1-C58D-39B4-B10A-51B3C726B5CF}" + ProjectSection(ProjectDependencies) = postProject + {842FF4CD-676C-370D-AF6D-6720DE5A1403} = {842FF4CD-676C-370D-AF6D-6720DE5A1403} + {AD5073BA-A99B-307D-9A71-F1CA26C6AE0D} = {AD5073BA-A99B-307D-9A71-F1CA26C6AE0D} + {0FDF9A6E-1A72-3F19-85DD-9FE6DA352688} = {0FDF9A6E-1A72-3F19-85DD-9FE6DA352688} + {1D402F2C-76EB-3A2B-8608-673EE69AB61B} = {1D402F2C-76EB-3A2B-8608-673EE69AB61B} + {52E84872-7F33-3AFC-A0BB-FDD6FED3F8A1} = {52E84872-7F33-3AFC-A0BB-FDD6FED3F8A1} + {D1DE5D57-3F37-334F-B7C8-496865D53C5B} = {D1DE5D57-3F37-334F-B7C8-496865D53C5B} + {9AA0B7B6-3031-3940-9AAC-0D7572DB9661} = {9AA0B7B6-3031-3940-9AAC-0D7572DB9661} + {42DF59C4-AAE2-3BE0-881D-4F86D92D9C92} = {42DF59C4-AAE2-3BE0-881D-4F86D92D9C92} + {85BBC070-2B80-31C7-85DB-4FEF23D2D1DE} = {85BBC070-2B80-31C7-85DB-4FEF23D2D1DE} + {542807CD-C489-3F55-BF13-2E012F82829F} = {542807CD-C489-3F55-BF13-2E012F82829F} + {F5F9DF19-5255-3C60-BF22-6F8E81C75D70} = {F5F9DF19-5255-3C60-BF22-6F8E81C75D70} + {3DC4BBDB-FE52-3D07-98AD-93CD8011BBDD} = {3DC4BBDB-FE52-3D07-98AD-93CD8011BBDD} + {A7B00862-DD14-342A-BB2C-1580F01D106C} = {A7B00862-DD14-342A-BB2C-1580F01D106C} + {687D7206-8ED0-370F-A66E-6C6E07DFC55E} = {687D7206-8ED0-370F-A66E-6C6E07DFC55E} + {FCD45757-7CBF-394C-987B-1BFE47C4AE7F} = {FCD45757-7CBF-394C-987B-1BFE47C4AE7F} + {46A3C1C5-8648-32A9-80D4-A53D4FC6C863} = {46A3C1C5-8648-32A9-80D4-A53D4FC6C863} + {6246A420-65E9-356A-A001-2B6C18469178} = {6246A420-65E9-356A-A001-2B6C18469178} + {6D3E8F9D-8F69-3905-8B6E-8FAECF73BD09} = {6D3E8F9D-8F69-3905-8B6E-8FAECF73BD09} + {EFF82734-629B-3D82-94E0-BD5DABD7C8EA} = {EFF82734-629B-3D82-94E0-BD5DABD7C8EA} + {3B3CFAF3-93D4-378E-9D52-3146F23E5740} = {3B3CFAF3-93D4-378E-9D52-3146F23E5740} + {1536A57F-5EDF-349F-8A6D-DEABE32962B2} = {1536A57F-5EDF-349F-8A6D-DEABE32962B2} + {6F1EF5F9-010D-3EAD-9623-468CEEEE1A89} = {6F1EF5F9-010D-3EAD-9623-468CEEEE1A89} + {6BE60EA5-3BF5-3B25-8AE8-C9BB2AAC489A} = {6BE60EA5-3BF5-3B25-8AE8-C9BB2AAC489A} + EndProjectSection +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "GUIDOEngine", "GUIDOEngine.vcxproj", "{842FF4CD-676C-370D-AF6D-6720DE5A1403}" + ProjectSection(ProjectDependencies) = postProject + {0FDF9A6E-1A72-3F19-85DD-9FE6DA352688} = {0FDF9A6E-1A72-3F19-85DD-9FE6DA352688} + EndProjectSection +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "INSTALL", "INSTALL.vcxproj", "{FE64AE99-8DBC-37DC-B9BB-BB51C25BC125}" + ProjectSection(ProjectDependencies) = postProject + {5F1214A1-C58D-39B4-B10A-51B3C726B5CF} = {5F1214A1-C58D-39B4-B10A-51B3C726B5CF} + {0FDF9A6E-1A72-3F19-85DD-9FE6DA352688} = {0FDF9A6E-1A72-3F19-85DD-9FE6DA352688} + EndProjectSection +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "PACKAGE", "PACKAGE.vcxproj", "{A7E84986-B1FC-3C38-9495-08F877D91135}" + ProjectSection(ProjectDependencies) = postProject + {5F1214A1-C58D-39B4-B10A-51B3C726B5CF} = {5F1214A1-C58D-39B4-B10A-51B3C726B5CF} + {0FDF9A6E-1A72-3F19-85DD-9FE6DA352688} = {0FDF9A6E-1A72-3F19-85DD-9FE6DA352688} + EndProjectSection +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "SGUIDOEngine", "SGUIDOEngine.vcxproj", "{AD5073BA-A99B-307D-9A71-F1CA26C6AE0D}" + ProjectSection(ProjectDependencies) = postProject + {0FDF9A6E-1A72-3F19-85DD-9FE6DA352688} = {0FDF9A6E-1A72-3F19-85DD-9FE6DA352688} + EndProjectSection +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "ZERO_CHECK", "ZERO_CHECK.vcxproj", "{0FDF9A6E-1A72-3F19-85DD-9FE6DA352688}" + ProjectSection(ProjectDependencies) = postProject + EndProjectSection +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "guido2abstract", "tools\guido2abstract.vcxproj", "{1D402F2C-76EB-3A2B-8608-673EE69AB61B}" + ProjectSection(ProjectDependencies) = postProject + {842FF4CD-676C-370D-AF6D-6720DE5A1403} = {842FF4CD-676C-370D-AF6D-6720DE5A1403} + {0FDF9A6E-1A72-3F19-85DD-9FE6DA352688} = {0FDF9A6E-1A72-3F19-85DD-9FE6DA352688} + EndProjectSection +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "guido2midi", "tools\guido2midi.vcxproj", "{52E84872-7F33-3AFC-A0BB-FDD6FED3F8A1}" + ProjectSection(ProjectDependencies) = postProject + {842FF4CD-676C-370D-AF6D-6720DE5A1403} = {842FF4CD-676C-370D-AF6D-6720DE5A1403} + {0FDF9A6E-1A72-3F19-85DD-9FE6DA352688} = {0FDF9A6E-1A72-3F19-85DD-9FE6DA352688} + EndProjectSection +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "guido2proll", "tools\guido2proll.vcxproj", "{D1DE5D57-3F37-334F-B7C8-496865D53C5B}" + ProjectSection(ProjectDependencies) = postProject + {842FF4CD-676C-370D-AF6D-6720DE5A1403} = {842FF4CD-676C-370D-AF6D-6720DE5A1403} + {0FDF9A6E-1A72-3F19-85DD-9FE6DA352688} = {0FDF9A6E-1A72-3F19-85DD-9FE6DA352688} + EndProjectSection +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "guido2rproportional", "tools\guido2rproportional.vcxproj", "{9AA0B7B6-3031-3940-9AAC-0D7572DB9661}" + ProjectSection(ProjectDependencies) = postProject + {842FF4CD-676C-370D-AF6D-6720DE5A1403} = {842FF4CD-676C-370D-AF6D-6720DE5A1403} + {0FDF9A6E-1A72-3F19-85DD-9FE6DA352688} = {0FDF9A6E-1A72-3F19-85DD-9FE6DA352688} + EndProjectSection +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "guido2svg", "tools\guido2svg.vcxproj", "{42DF59C4-AAE2-3BE0-881D-4F86D92D9C92}" + ProjectSection(ProjectDependencies) = postProject + {842FF4CD-676C-370D-AF6D-6720DE5A1403} = {842FF4CD-676C-370D-AF6D-6720DE5A1403} + {0FDF9A6E-1A72-3F19-85DD-9FE6DA352688} = {0FDF9A6E-1A72-3F19-85DD-9FE6DA352688} + EndProjectSection +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "guido2svgmap", "tools\guido2svgmap.vcxproj", "{85BBC070-2B80-31C7-85DB-4FEF23D2D1DE}" + ProjectSection(ProjectDependencies) = postProject + {842FF4CD-676C-370D-AF6D-6720DE5A1403} = {842FF4CD-676C-370D-AF6D-6720DE5A1403} + {0FDF9A6E-1A72-3F19-85DD-9FE6DA352688} = {0FDF9A6E-1A72-3F19-85DD-9FE6DA352688} + EndProjectSection +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "guidoar2gr", "tools\guidoar2gr.vcxproj", "{542807CD-C489-3F55-BF13-2E012F82829F}" + ProjectSection(ProjectDependencies) = postProject + {842FF4CD-676C-370D-AF6D-6720DE5A1403} = {842FF4CD-676C-370D-AF6D-6720DE5A1403} + {0FDF9A6E-1A72-3F19-85DD-9FE6DA352688} = {0FDF9A6E-1A72-3F19-85DD-9FE6DA352688} + EndProjectSection +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "guidodraw", "tools\guidodraw.vcxproj", "{F5F9DF19-5255-3C60-BF22-6F8E81C75D70}" + ProjectSection(ProjectDependencies) = postProject + {842FF4CD-676C-370D-AF6D-6720DE5A1403} = {842FF4CD-676C-370D-AF6D-6720DE5A1403} + {0FDF9A6E-1A72-3F19-85DD-9FE6DA352688} = {0FDF9A6E-1A72-3F19-85DD-9FE6DA352688} + EndProjectSection +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "guidogetmeters", "tools\guidogetmeters.vcxproj", "{3DC4BBDB-FE52-3D07-98AD-93CD8011BBDD}" + ProjectSection(ProjectDependencies) = postProject + {842FF4CD-676C-370D-AF6D-6720DE5A1403} = {842FF4CD-676C-370D-AF6D-6720DE5A1403} + {0FDF9A6E-1A72-3F19-85DD-9FE6DA352688} = {0FDF9A6E-1A72-3F19-85DD-9FE6DA352688} + EndProjectSection +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "guidogetpagecount", "tools\guidogetpagecount.vcxproj", "{A7B00862-DD14-342A-BB2C-1580F01D106C}" + ProjectSection(ProjectDependencies) = postProject + {842FF4CD-676C-370D-AF6D-6720DE5A1403} = {842FF4CD-676C-370D-AF6D-6720DE5A1403} + {0FDF9A6E-1A72-3F19-85DD-9FE6DA352688} = {0FDF9A6E-1A72-3F19-85DD-9FE6DA352688} + EndProjectSection +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "guidogetpagemap", "tools\guidogetpagemap.vcxproj", "{687D7206-8ED0-370F-A66E-6C6E07DFC55E}" + ProjectSection(ProjectDependencies) = postProject + {842FF4CD-676C-370D-AF6D-6720DE5A1403} = {842FF4CD-676C-370D-AF6D-6720DE5A1403} + {0FDF9A6E-1A72-3F19-85DD-9FE6DA352688} = {0FDF9A6E-1A72-3F19-85DD-9FE6DA352688} + EndProjectSection +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "guidogetstaffmap", "tools\guidogetstaffmap.vcxproj", "{FCD45757-7CBF-394C-987B-1BFE47C4AE7F}" + ProjectSection(ProjectDependencies) = postProject + {842FF4CD-676C-370D-AF6D-6720DE5A1403} = {842FF4CD-676C-370D-AF6D-6720DE5A1403} + {0FDF9A6E-1A72-3F19-85DD-9FE6DA352688} = {0FDF9A6E-1A72-3F19-85DD-9FE6DA352688} + EndProjectSection +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "guidogetsystemmap", "tools\guidogetsystemmap.vcxproj", "{46A3C1C5-8648-32A9-80D4-A53D4FC6C863}" + ProjectSection(ProjectDependencies) = postProject + {842FF4CD-676C-370D-AF6D-6720DE5A1403} = {842FF4CD-676C-370D-AF6D-6720DE5A1403} + {0FDF9A6E-1A72-3F19-85DD-9FE6DA352688} = {0FDF9A6E-1A72-3F19-85DD-9FE6DA352688} + EndProjectSection +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "guidogettempi", "tools\guidogettempi.vcxproj", "{6246A420-65E9-356A-A001-2B6C18469178}" + ProjectSection(ProjectDependencies) = postProject + {842FF4CD-676C-370D-AF6D-6720DE5A1403} = {842FF4CD-676C-370D-AF6D-6720DE5A1403} + {0FDF9A6E-1A72-3F19-85DD-9FE6DA352688} = {0FDF9A6E-1A72-3F19-85DD-9FE6DA352688} + EndProjectSection +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "guidogettimemap", "tools\guidogettimemap.vcxproj", "{6D3E8F9D-8F69-3905-8B6E-8FAECF73BD09}" + ProjectSection(ProjectDependencies) = postProject + {842FF4CD-676C-370D-AF6D-6720DE5A1403} = {842FF4CD-676C-370D-AF6D-6720DE5A1403} + {0FDF9A6E-1A72-3F19-85DD-9FE6DA352688} = {0FDF9A6E-1A72-3F19-85DD-9FE6DA352688} + EndProjectSection +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "guidogetversion", "tools\guidogetversion.vcxproj", "{EFF82734-629B-3D82-94E0-BD5DABD7C8EA}" + ProjectSection(ProjectDependencies) = postProject + {842FF4CD-676C-370D-AF6D-6720DE5A1403} = {842FF4CD-676C-370D-AF6D-6720DE5A1403} + {0FDF9A6E-1A72-3F19-85DD-9FE6DA352688} = {0FDF9A6E-1A72-3F19-85DD-9FE6DA352688} + EndProjectSection +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "guidogetvoicecount", "tools\guidogetvoicecount.vcxproj", "{3B3CFAF3-93D4-378E-9D52-3146F23E5740}" + ProjectSection(ProjectDependencies) = postProject + {842FF4CD-676C-370D-AF6D-6720DE5A1403} = {842FF4CD-676C-370D-AF6D-6720DE5A1403} + {0FDF9A6E-1A72-3F19-85DD-9FE6DA352688} = {0FDF9A6E-1A72-3F19-85DD-9FE6DA352688} + EndProjectSection +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "guidogetvoicemap", "tools\guidogetvoicemap.vcxproj", "{1536A57F-5EDF-349F-8A6D-DEABE32962B2}" + ProjectSection(ProjectDependencies) = postProject + {842FF4CD-676C-370D-AF6D-6720DE5A1403} = {842FF4CD-676C-370D-AF6D-6720DE5A1403} + {0FDF9A6E-1A72-3F19-85DD-9FE6DA352688} = {0FDF9A6E-1A72-3F19-85DD-9FE6DA352688} + EndProjectSection +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "guidoparse", "tools\guidoparse.vcxproj", "{6F1EF5F9-010D-3EAD-9623-468CEEEE1A89}" + ProjectSection(ProjectDependencies) = postProject + {842FF4CD-676C-370D-AF6D-6720DE5A1403} = {842FF4CD-676C-370D-AF6D-6720DE5A1403} + {0FDF9A6E-1A72-3F19-85DD-9FE6DA352688} = {0FDF9A6E-1A72-3F19-85DD-9FE6DA352688} + EndProjectSection +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "midi2proll", "tools\midi2proll.vcxproj", "{6BE60EA5-3BF5-3B25-8AE8-C9BB2AAC489A}" + ProjectSection(ProjectDependencies) = postProject + {842FF4CD-676C-370D-AF6D-6720DE5A1403} = {842FF4CD-676C-370D-AF6D-6720DE5A1403} + {0FDF9A6E-1A72-3F19-85DD-9FE6DA352688} = {0FDF9A6E-1A72-3F19-85DD-9FE6DA352688} + EndProjectSection +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Win32 = Debug|Win32 + Release|Win32 = Release|Win32 + MinSizeRel|Win32 = MinSizeRel|Win32 + RelWithDebInfo|Win32 = RelWithDebInfo|Win32 + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {5F1214A1-C58D-39B4-B10A-51B3C726B5CF}.Debug|Win32.ActiveCfg = Debug|Win32 + {5F1214A1-C58D-39B4-B10A-51B3C726B5CF}.Debug|Win32.Build.0 = Debug|Win32 + {5F1214A1-C58D-39B4-B10A-51B3C726B5CF}.Release|Win32.ActiveCfg = Release|Win32 + {5F1214A1-C58D-39B4-B10A-51B3C726B5CF}.Release|Win32.Build.0 = Release|Win32 + {5F1214A1-C58D-39B4-B10A-51B3C726B5CF}.MinSizeRel|Win32.ActiveCfg = MinSizeRel|Win32 + {5F1214A1-C58D-39B4-B10A-51B3C726B5CF}.MinSizeRel|Win32.Build.0 = MinSizeRel|Win32 + {5F1214A1-C58D-39B4-B10A-51B3C726B5CF}.RelWithDebInfo|Win32.ActiveCfg = RelWithDebInfo|Win32 + {5F1214A1-C58D-39B4-B10A-51B3C726B5CF}.RelWithDebInfo|Win32.Build.0 = RelWithDebInfo|Win32 + {842FF4CD-676C-370D-AF6D-6720DE5A1403}.Debug|Win32.ActiveCfg = Debug|Win32 + {842FF4CD-676C-370D-AF6D-6720DE5A1403}.Debug|Win32.Build.0 = Debug|Win32 + {842FF4CD-676C-370D-AF6D-6720DE5A1403}.Release|Win32.ActiveCfg = Release|Win32 + {842FF4CD-676C-370D-AF6D-6720DE5A1403}.Release|Win32.Build.0 = Release|Win32 + {842FF4CD-676C-370D-AF6D-6720DE5A1403}.MinSizeRel|Win32.ActiveCfg = MinSizeRel|Win32 + {842FF4CD-676C-370D-AF6D-6720DE5A1403}.MinSizeRel|Win32.Build.0 = MinSizeRel|Win32 + {842FF4CD-676C-370D-AF6D-6720DE5A1403}.RelWithDebInfo|Win32.ActiveCfg = RelWithDebInfo|Win32 + {842FF4CD-676C-370D-AF6D-6720DE5A1403}.RelWithDebInfo|Win32.Build.0 = RelWithDebInfo|Win32 + {FE64AE99-8DBC-37DC-B9BB-BB51C25BC125}.Debug|Win32.ActiveCfg = Debug|Win32 + {FE64AE99-8DBC-37DC-B9BB-BB51C25BC125}.Release|Win32.ActiveCfg = Release|Win32 + {FE64AE99-8DBC-37DC-B9BB-BB51C25BC125}.MinSizeRel|Win32.ActiveCfg = MinSizeRel|Win32 + {FE64AE99-8DBC-37DC-B9BB-BB51C25BC125}.RelWithDebInfo|Win32.ActiveCfg = RelWithDebInfo|Win32 + {A7E84986-B1FC-3C38-9495-08F877D91135}.Debug|Win32.ActiveCfg = Debug|Win32 + {A7E84986-B1FC-3C38-9495-08F877D91135}.Release|Win32.ActiveCfg = Release|Win32 + {A7E84986-B1FC-3C38-9495-08F877D91135}.MinSizeRel|Win32.ActiveCfg = MinSizeRel|Win32 + {A7E84986-B1FC-3C38-9495-08F877D91135}.RelWithDebInfo|Win32.ActiveCfg = RelWithDebInfo|Win32 + {AD5073BA-A99B-307D-9A71-F1CA26C6AE0D}.Debug|Win32.ActiveCfg = Debug|Win32 + {AD5073BA-A99B-307D-9A71-F1CA26C6AE0D}.Debug|Win32.Build.0 = Debug|Win32 + {AD5073BA-A99B-307D-9A71-F1CA26C6AE0D}.Release|Win32.ActiveCfg = Release|Win32 + {AD5073BA-A99B-307D-9A71-F1CA26C6AE0D}.Release|Win32.Build.0 = Release|Win32 + {AD5073BA-A99B-307D-9A71-F1CA26C6AE0D}.MinSizeRel|Win32.ActiveCfg = MinSizeRel|Win32 + {AD5073BA-A99B-307D-9A71-F1CA26C6AE0D}.MinSizeRel|Win32.Build.0 = MinSizeRel|Win32 + {AD5073BA-A99B-307D-9A71-F1CA26C6AE0D}.RelWithDebInfo|Win32.ActiveCfg = RelWithDebInfo|Win32 + {AD5073BA-A99B-307D-9A71-F1CA26C6AE0D}.RelWithDebInfo|Win32.Build.0 = RelWithDebInfo|Win32 + {0FDF9A6E-1A72-3F19-85DD-9FE6DA352688}.Debug|Win32.ActiveCfg = Debug|Win32 + {0FDF9A6E-1A72-3F19-85DD-9FE6DA352688}.Debug|Win32.Build.0 = Debug|Win32 + {0FDF9A6E-1A72-3F19-85DD-9FE6DA352688}.Release|Win32.ActiveCfg = Release|Win32 + {0FDF9A6E-1A72-3F19-85DD-9FE6DA352688}.Release|Win32.Build.0 = Release|Win32 + {0FDF9A6E-1A72-3F19-85DD-9FE6DA352688}.MinSizeRel|Win32.ActiveCfg = MinSizeRel|Win32 + {0FDF9A6E-1A72-3F19-85DD-9FE6DA352688}.MinSizeRel|Win32.Build.0 = MinSizeRel|Win32 + {0FDF9A6E-1A72-3F19-85DD-9FE6DA352688}.RelWithDebInfo|Win32.ActiveCfg = RelWithDebInfo|Win32 + {0FDF9A6E-1A72-3F19-85DD-9FE6DA352688}.RelWithDebInfo|Win32.Build.0 = RelWithDebInfo|Win32 + {1D402F2C-76EB-3A2B-8608-673EE69AB61B}.Debug|Win32.ActiveCfg = Debug|Win32 + {1D402F2C-76EB-3A2B-8608-673EE69AB61B}.Debug|Win32.Build.0 = Debug|Win32 + {1D402F2C-76EB-3A2B-8608-673EE69AB61B}.Release|Win32.ActiveCfg = Release|Win32 + {1D402F2C-76EB-3A2B-8608-673EE69AB61B}.Release|Win32.Build.0 = Release|Win32 + {1D402F2C-76EB-3A2B-8608-673EE69AB61B}.MinSizeRel|Win32.ActiveCfg = MinSizeRel|Win32 + {1D402F2C-76EB-3A2B-8608-673EE69AB61B}.MinSizeRel|Win32.Build.0 = MinSizeRel|Win32 + {1D402F2C-76EB-3A2B-8608-673EE69AB61B}.RelWithDebInfo|Win32.ActiveCfg = RelWithDebInfo|Win32 + {1D402F2C-76EB-3A2B-8608-673EE69AB61B}.RelWithDebInfo|Win32.Build.0 = RelWithDebInfo|Win32 + {52E84872-7F33-3AFC-A0BB-FDD6FED3F8A1}.Debug|Win32.ActiveCfg = Debug|Win32 + {52E84872-7F33-3AFC-A0BB-FDD6FED3F8A1}.Debug|Win32.Build.0 = Debug|Win32 + {52E84872-7F33-3AFC-A0BB-FDD6FED3F8A1}.Release|Win32.ActiveCfg = Release|Win32 + {52E84872-7F33-3AFC-A0BB-FDD6FED3F8A1}.Release|Win32.Build.0 = Release|Win32 + {52E84872-7F33-3AFC-A0BB-FDD6FED3F8A1}.MinSizeRel|Win32.ActiveCfg = MinSizeRel|Win32 + {52E84872-7F33-3AFC-A0BB-FDD6FED3F8A1}.MinSizeRel|Win32.Build.0 = MinSizeRel|Win32 + {52E84872-7F33-3AFC-A0BB-FDD6FED3F8A1}.RelWithDebInfo|Win32.ActiveCfg = RelWithDebInfo|Win32 + {52E84872-7F33-3AFC-A0BB-FDD6FED3F8A1}.RelWithDebInfo|Win32.Build.0 = RelWithDebInfo|Win32 + {D1DE5D57-3F37-334F-B7C8-496865D53C5B}.Debug|Win32.ActiveCfg = Debug|Win32 + {D1DE5D57-3F37-334F-B7C8-496865D53C5B}.Debug|Win32.Build.0 = Debug|Win32 + {D1DE5D57-3F37-334F-B7C8-496865D53C5B}.Release|Win32.ActiveCfg = Release|Win32 + {D1DE5D57-3F37-334F-B7C8-496865D53C5B}.Release|Win32.Build.0 = Release|Win32 + {D1DE5D57-3F37-334F-B7C8-496865D53C5B}.MinSizeRel|Win32.ActiveCfg = MinSizeRel|Win32 + {D1DE5D57-3F37-334F-B7C8-496865D53C5B}.MinSizeRel|Win32.Build.0 = MinSizeRel|Win32 + {D1DE5D57-3F37-334F-B7C8-496865D53C5B}.RelWithDebInfo|Win32.ActiveCfg = RelWithDebInfo|Win32 + {D1DE5D57-3F37-334F-B7C8-496865D53C5B}.RelWithDebInfo|Win32.Build.0 = RelWithDebInfo|Win32 + {9AA0B7B6-3031-3940-9AAC-0D7572DB9661}.Debug|Win32.ActiveCfg = Debug|Win32 + {9AA0B7B6-3031-3940-9AAC-0D7572DB9661}.Debug|Win32.Build.0 = Debug|Win32 + {9AA0B7B6-3031-3940-9AAC-0D7572DB9661}.Release|Win32.ActiveCfg = Release|Win32 + {9AA0B7B6-3031-3940-9AAC-0D7572DB9661}.Release|Win32.Build.0 = Release|Win32 + {9AA0B7B6-3031-3940-9AAC-0D7572DB9661}.MinSizeRel|Win32.ActiveCfg = MinSizeRel|Win32 + {9AA0B7B6-3031-3940-9AAC-0D7572DB9661}.MinSizeRel|Win32.Build.0 = MinSizeRel|Win32 + {9AA0B7B6-3031-3940-9AAC-0D7572DB9661}.RelWithDebInfo|Win32.ActiveCfg = RelWithDebInfo|Win32 + {9AA0B7B6-3031-3940-9AAC-0D7572DB9661}.RelWithDebInfo|Win32.Build.0 = RelWithDebInfo|Win32 + {42DF59C4-AAE2-3BE0-881D-4F86D92D9C92}.Debug|Win32.ActiveCfg = Debug|Win32 + {42DF59C4-AAE2-3BE0-881D-4F86D92D9C92}.Debug|Win32.Build.0 = Debug|Win32 + {42DF59C4-AAE2-3BE0-881D-4F86D92D9C92}.Release|Win32.ActiveCfg = Release|Win32 + {42DF59C4-AAE2-3BE0-881D-4F86D92D9C92}.Release|Win32.Build.0 = Release|Win32 + {42DF59C4-AAE2-3BE0-881D-4F86D92D9C92}.MinSizeRel|Win32.ActiveCfg = MinSizeRel|Win32 + {42DF59C4-AAE2-3BE0-881D-4F86D92D9C92}.MinSizeRel|Win32.Build.0 = MinSizeRel|Win32 + {42DF59C4-AAE2-3BE0-881D-4F86D92D9C92}.RelWithDebInfo|Win32.ActiveCfg = RelWithDebInfo|Win32 + {42DF59C4-AAE2-3BE0-881D-4F86D92D9C92}.RelWithDebInfo|Win32.Build.0 = RelWithDebInfo|Win32 + {85BBC070-2B80-31C7-85DB-4FEF23D2D1DE}.Debug|Win32.ActiveCfg = Debug|Win32 + {85BBC070-2B80-31C7-85DB-4FEF23D2D1DE}.Debug|Win32.Build.0 = Debug|Win32 + {85BBC070-2B80-31C7-85DB-4FEF23D2D1DE}.Release|Win32.ActiveCfg = Release|Win32 + {85BBC070-2B80-31C7-85DB-4FEF23D2D1DE}.Release|Win32.Build.0 = Release|Win32 + {85BBC070-2B80-31C7-85DB-4FEF23D2D1DE}.MinSizeRel|Win32.ActiveCfg = MinSizeRel|Win32 + {85BBC070-2B80-31C7-85DB-4FEF23D2D1DE}.MinSizeRel|Win32.Build.0 = MinSizeRel|Win32 + {85BBC070-2B80-31C7-85DB-4FEF23D2D1DE}.RelWithDebInfo|Win32.ActiveCfg = RelWithDebInfo|Win32 + {85BBC070-2B80-31C7-85DB-4FEF23D2D1DE}.RelWithDebInfo|Win32.Build.0 = RelWithDebInfo|Win32 + {542807CD-C489-3F55-BF13-2E012F82829F}.Debug|Win32.ActiveCfg = Debug|Win32 + {542807CD-C489-3F55-BF13-2E012F82829F}.Debug|Win32.Build.0 = Debug|Win32 + {542807CD-C489-3F55-BF13-2E012F82829F}.Release|Win32.ActiveCfg = Release|Win32 + {542807CD-C489-3F55-BF13-2E012F82829F}.Release|Win32.Build.0 = Release|Win32 + {542807CD-C489-3F55-BF13-2E012F82829F}.MinSizeRel|Win32.ActiveCfg = MinSizeRel|Win32 + {542807CD-C489-3F55-BF13-2E012F82829F}.MinSizeRel|Win32.Build.0 = MinSizeRel|Win32 + {542807CD-C489-3F55-BF13-2E012F82829F}.RelWithDebInfo|Win32.ActiveCfg = RelWithDebInfo|Win32 + {542807CD-C489-3F55-BF13-2E012F82829F}.RelWithDebInfo|Win32.Build.0 = RelWithDebInfo|Win32 + {F5F9DF19-5255-3C60-BF22-6F8E81C75D70}.Debug|Win32.ActiveCfg = Debug|Win32 + {F5F9DF19-5255-3C60-BF22-6F8E81C75D70}.Debug|Win32.Build.0 = Debug|Win32 + {F5F9DF19-5255-3C60-BF22-6F8E81C75D70}.Release|Win32.ActiveCfg = Release|Win32 + {F5F9DF19-5255-3C60-BF22-6F8E81C75D70}.Release|Win32.Build.0 = Release|Win32 + {F5F9DF19-5255-3C60-BF22-6F8E81C75D70}.MinSizeRel|Win32.ActiveCfg = MinSizeRel|Win32 + {F5F9DF19-5255-3C60-BF22-6F8E81C75D70}.MinSizeRel|Win32.Build.0 = MinSizeRel|Win32 + {F5F9DF19-5255-3C60-BF22-6F8E81C75D70}.RelWithDebInfo|Win32.ActiveCfg = RelWithDebInfo|Win32 + {F5F9DF19-5255-3C60-BF22-6F8E81C75D70}.RelWithDebInfo|Win32.Build.0 = RelWithDebInfo|Win32 + {3DC4BBDB-FE52-3D07-98AD-93CD8011BBDD}.Debug|Win32.ActiveCfg = Debug|Win32 + {3DC4BBDB-FE52-3D07-98AD-93CD8011BBDD}.Debug|Win32.Build.0 = Debug|Win32 + {3DC4BBDB-FE52-3D07-98AD-93CD8011BBDD}.Release|Win32.ActiveCfg = Release|Win32 + {3DC4BBDB-FE52-3D07-98AD-93CD8011BBDD}.Release|Win32.Build.0 = Release|Win32 + {3DC4BBDB-FE52-3D07-98AD-93CD8011BBDD}.MinSizeRel|Win32.ActiveCfg = MinSizeRel|Win32 + {3DC4BBDB-FE52-3D07-98AD-93CD8011BBDD}.MinSizeRel|Win32.Build.0 = MinSizeRel|Win32 + {3DC4BBDB-FE52-3D07-98AD-93CD8011BBDD}.RelWithDebInfo|Win32.ActiveCfg = RelWithDebInfo|Win32 + {3DC4BBDB-FE52-3D07-98AD-93CD8011BBDD}.RelWithDebInfo|Win32.Build.0 = RelWithDebInfo|Win32 + {A7B00862-DD14-342A-BB2C-1580F01D106C}.Debug|Win32.ActiveCfg = Debug|Win32 + {A7B00862-DD14-342A-BB2C-1580F01D106C}.Debug|Win32.Build.0 = Debug|Win32 + {A7B00862-DD14-342A-BB2C-1580F01D106C}.Release|Win32.ActiveCfg = Release|Win32 + {A7B00862-DD14-342A-BB2C-1580F01D106C}.Release|Win32.Build.0 = Release|Win32 + {A7B00862-DD14-342A-BB2C-1580F01D106C}.MinSizeRel|Win32.ActiveCfg = MinSizeRel|Win32 + {A7B00862-DD14-342A-BB2C-1580F01D106C}.MinSizeRel|Win32.Build.0 = MinSizeRel|Win32 + {A7B00862-DD14-342A-BB2C-1580F01D106C}.RelWithDebInfo|Win32.ActiveCfg = RelWithDebInfo|Win32 + {A7B00862-DD14-342A-BB2C-1580F01D106C}.RelWithDebInfo|Win32.Build.0 = RelWithDebInfo|Win32 + {687D7206-8ED0-370F-A66E-6C6E07DFC55E}.Debug|Win32.ActiveCfg = Debug|Win32 + {687D7206-8ED0-370F-A66E-6C6E07DFC55E}.Debug|Win32.Build.0 = Debug|Win32 + {687D7206-8ED0-370F-A66E-6C6E07DFC55E}.Release|Win32.ActiveCfg = Release|Win32 + {687D7206-8ED0-370F-A66E-6C6E07DFC55E}.Release|Win32.Build.0 = Release|Win32 + {687D7206-8ED0-370F-A66E-6C6E07DFC55E}.MinSizeRel|Win32.ActiveCfg = MinSizeRel|Win32 + {687D7206-8ED0-370F-A66E-6C6E07DFC55E}.MinSizeRel|Win32.Build.0 = MinSizeRel|Win32 + {687D7206-8ED0-370F-A66E-6C6E07DFC55E}.RelWithDebInfo|Win32.ActiveCfg = RelWithDebInfo|Win32 + {687D7206-8ED0-370F-A66E-6C6E07DFC55E}.RelWithDebInfo|Win32.Build.0 = RelWithDebInfo|Win32 + {FCD45757-7CBF-394C-987B-1BFE47C4AE7F}.Debug|Win32.ActiveCfg = Debug|Win32 + {FCD45757-7CBF-394C-987B-1BFE47C4AE7F}.Debug|Win32.Build.0 = Debug|Win32 + {FCD45757-7CBF-394C-987B-1BFE47C4AE7F}.Release|Win32.ActiveCfg = Release|Win32 + {FCD45757-7CBF-394C-987B-1BFE47C4AE7F}.Release|Win32.Build.0 = Release|Win32 + {FCD45757-7CBF-394C-987B-1BFE47C4AE7F}.MinSizeRel|Win32.ActiveCfg = MinSizeRel|Win32 + {FCD45757-7CBF-394C-987B-1BFE47C4AE7F}.MinSizeRel|Win32.Build.0 = MinSizeRel|Win32 + {FCD45757-7CBF-394C-987B-1BFE47C4AE7F}.RelWithDebInfo|Win32.ActiveCfg = RelWithDebInfo|Win32 + {FCD45757-7CBF-394C-987B-1BFE47C4AE7F}.RelWithDebInfo|Win32.Build.0 = RelWithDebInfo|Win32 + {46A3C1C5-8648-32A9-80D4-A53D4FC6C863}.Debug|Win32.ActiveCfg = Debug|Win32 + {46A3C1C5-8648-32A9-80D4-A53D4FC6C863}.Debug|Win32.Build.0 = Debug|Win32 + {46A3C1C5-8648-32A9-80D4-A53D4FC6C863}.Release|Win32.ActiveCfg = Release|Win32 + {46A3C1C5-8648-32A9-80D4-A53D4FC6C863}.Release|Win32.Build.0 = Release|Win32 + {46A3C1C5-8648-32A9-80D4-A53D4FC6C863}.MinSizeRel|Win32.ActiveCfg = MinSizeRel|Win32 + {46A3C1C5-8648-32A9-80D4-A53D4FC6C863}.MinSizeRel|Win32.Build.0 = MinSizeRel|Win32 + {46A3C1C5-8648-32A9-80D4-A53D4FC6C863}.RelWithDebInfo|Win32.ActiveCfg = RelWithDebInfo|Win32 + {46A3C1C5-8648-32A9-80D4-A53D4FC6C863}.RelWithDebInfo|Win32.Build.0 = RelWithDebInfo|Win32 + {6246A420-65E9-356A-A001-2B6C18469178}.Debug|Win32.ActiveCfg = Debug|Win32 + {6246A420-65E9-356A-A001-2B6C18469178}.Debug|Win32.Build.0 = Debug|Win32 + {6246A420-65E9-356A-A001-2B6C18469178}.Release|Win32.ActiveCfg = Release|Win32 + {6246A420-65E9-356A-A001-2B6C18469178}.Release|Win32.Build.0 = Release|Win32 + {6246A420-65E9-356A-A001-2B6C18469178}.MinSizeRel|Win32.ActiveCfg = MinSizeRel|Win32 + {6246A420-65E9-356A-A001-2B6C18469178}.MinSizeRel|Win32.Build.0 = MinSizeRel|Win32 + {6246A420-65E9-356A-A001-2B6C18469178}.RelWithDebInfo|Win32.ActiveCfg = RelWithDebInfo|Win32 + {6246A420-65E9-356A-A001-2B6C18469178}.RelWithDebInfo|Win32.Build.0 = RelWithDebInfo|Win32 + {6D3E8F9D-8F69-3905-8B6E-8FAECF73BD09}.Debug|Win32.ActiveCfg = Debug|Win32 + {6D3E8F9D-8F69-3905-8B6E-8FAECF73BD09}.Debug|Win32.Build.0 = Debug|Win32 + {6D3E8F9D-8F69-3905-8B6E-8FAECF73BD09}.Release|Win32.ActiveCfg = Release|Win32 + {6D3E8F9D-8F69-3905-8B6E-8FAECF73BD09}.Release|Win32.Build.0 = Release|Win32 + {6D3E8F9D-8F69-3905-8B6E-8FAECF73BD09}.MinSizeRel|Win32.ActiveCfg = MinSizeRel|Win32 + {6D3E8F9D-8F69-3905-8B6E-8FAECF73BD09}.MinSizeRel|Win32.Build.0 = MinSizeRel|Win32 + {6D3E8F9D-8F69-3905-8B6E-8FAECF73BD09}.RelWithDebInfo|Win32.ActiveCfg = RelWithDebInfo|Win32 + {6D3E8F9D-8F69-3905-8B6E-8FAECF73BD09}.RelWithDebInfo|Win32.Build.0 = RelWithDebInfo|Win32 + {EFF82734-629B-3D82-94E0-BD5DABD7C8EA}.Debug|Win32.ActiveCfg = Debug|Win32 + {EFF82734-629B-3D82-94E0-BD5DABD7C8EA}.Debug|Win32.Build.0 = Debug|Win32 + {EFF82734-629B-3D82-94E0-BD5DABD7C8EA}.Release|Win32.ActiveCfg = Release|Win32 + {EFF82734-629B-3D82-94E0-BD5DABD7C8EA}.Release|Win32.Build.0 = Release|Win32 + {EFF82734-629B-3D82-94E0-BD5DABD7C8EA}.MinSizeRel|Win32.ActiveCfg = MinSizeRel|Win32 + {EFF82734-629B-3D82-94E0-BD5DABD7C8EA}.MinSizeRel|Win32.Build.0 = MinSizeRel|Win32 + {EFF82734-629B-3D82-94E0-BD5DABD7C8EA}.RelWithDebInfo|Win32.ActiveCfg = RelWithDebInfo|Win32 + {EFF82734-629B-3D82-94E0-BD5DABD7C8EA}.RelWithDebInfo|Win32.Build.0 = RelWithDebInfo|Win32 + {3B3CFAF3-93D4-378E-9D52-3146F23E5740}.Debug|Win32.ActiveCfg = Debug|Win32 + {3B3CFAF3-93D4-378E-9D52-3146F23E5740}.Debug|Win32.Build.0 = Debug|Win32 + {3B3CFAF3-93D4-378E-9D52-3146F23E5740}.Release|Win32.ActiveCfg = Release|Win32 + {3B3CFAF3-93D4-378E-9D52-3146F23E5740}.Release|Win32.Build.0 = Release|Win32 + {3B3CFAF3-93D4-378E-9D52-3146F23E5740}.MinSizeRel|Win32.ActiveCfg = MinSizeRel|Win32 + {3B3CFAF3-93D4-378E-9D52-3146F23E5740}.MinSizeRel|Win32.Build.0 = MinSizeRel|Win32 + {3B3CFAF3-93D4-378E-9D52-3146F23E5740}.RelWithDebInfo|Win32.ActiveCfg = RelWithDebInfo|Win32 + {3B3CFAF3-93D4-378E-9D52-3146F23E5740}.RelWithDebInfo|Win32.Build.0 = RelWithDebInfo|Win32 + {1536A57F-5EDF-349F-8A6D-DEABE32962B2}.Debug|Win32.ActiveCfg = Debug|Win32 + {1536A57F-5EDF-349F-8A6D-DEABE32962B2}.Debug|Win32.Build.0 = Debug|Win32 + {1536A57F-5EDF-349F-8A6D-DEABE32962B2}.Release|Win32.ActiveCfg = Release|Win32 + {1536A57F-5EDF-349F-8A6D-DEABE32962B2}.Release|Win32.Build.0 = Release|Win32 + {1536A57F-5EDF-349F-8A6D-DEABE32962B2}.MinSizeRel|Win32.ActiveCfg = MinSizeRel|Win32 + {1536A57F-5EDF-349F-8A6D-DEABE32962B2}.MinSizeRel|Win32.Build.0 = MinSizeRel|Win32 + {1536A57F-5EDF-349F-8A6D-DEABE32962B2}.RelWithDebInfo|Win32.ActiveCfg = RelWithDebInfo|Win32 + {1536A57F-5EDF-349F-8A6D-DEABE32962B2}.RelWithDebInfo|Win32.Build.0 = RelWithDebInfo|Win32 + {6F1EF5F9-010D-3EAD-9623-468CEEEE1A89}.Debug|Win32.ActiveCfg = Debug|Win32 + {6F1EF5F9-010D-3EAD-9623-468CEEEE1A89}.Debug|Win32.Build.0 = Debug|Win32 + {6F1EF5F9-010D-3EAD-9623-468CEEEE1A89}.Release|Win32.ActiveCfg = Release|Win32 + {6F1EF5F9-010D-3EAD-9623-468CEEEE1A89}.Release|Win32.Build.0 = Release|Win32 + {6F1EF5F9-010D-3EAD-9623-468CEEEE1A89}.MinSizeRel|Win32.ActiveCfg = MinSizeRel|Win32 + {6F1EF5F9-010D-3EAD-9623-468CEEEE1A89}.MinSizeRel|Win32.Build.0 = MinSizeRel|Win32 + {6F1EF5F9-010D-3EAD-9623-468CEEEE1A89}.RelWithDebInfo|Win32.ActiveCfg = RelWithDebInfo|Win32 + {6F1EF5F9-010D-3EAD-9623-468CEEEE1A89}.RelWithDebInfo|Win32.Build.0 = RelWithDebInfo|Win32 + {6BE60EA5-3BF5-3B25-8AE8-C9BB2AAC489A}.Debug|Win32.ActiveCfg = Debug|Win32 + {6BE60EA5-3BF5-3B25-8AE8-C9BB2AAC489A}.Debug|Win32.Build.0 = Debug|Win32 + {6BE60EA5-3BF5-3B25-8AE8-C9BB2AAC489A}.Release|Win32.ActiveCfg = Release|Win32 + {6BE60EA5-3BF5-3B25-8AE8-C9BB2AAC489A}.Release|Win32.Build.0 = Release|Win32 + {6BE60EA5-3BF5-3B25-8AE8-C9BB2AAC489A}.MinSizeRel|Win32.ActiveCfg = MinSizeRel|Win32 + {6BE60EA5-3BF5-3B25-8AE8-C9BB2AAC489A}.MinSizeRel|Win32.Build.0 = MinSizeRel|Win32 + {6BE60EA5-3BF5-3B25-8AE8-C9BB2AAC489A}.RelWithDebInfo|Win32.ActiveCfg = RelWithDebInfo|Win32 + {6BE60EA5-3BF5-3B25-8AE8-C9BB2AAC489A}.RelWithDebInfo|Win32.Build.0 = RelWithDebInfo|Win32 + EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + SolutionGuid = {18B0143F-8879-39EA-8FF6-AC4031C7EDA9} + EndGlobalSection + GlobalSection(ExtensibilityAddIns) = postSolution + EndGlobalSection +EndGlobal diff --git a/out32/java/guidojni.sln b/out32/java/guidojni.sln new file mode 100644 index 000000000..49d38f1fd --- /dev/null +++ b/out32/java/guidojni.sln @@ -0,0 +1,90 @@ +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio 16 +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "ALL_BUILD", "ALL_BUILD.vcxproj", "{5F1214A1-C58D-39B4-B10A-51B3C726B5CF}" + ProjectSection(ProjectDependencies) = postProject + {0FDF9A6E-1A72-3F19-85DD-9FE6DA352688} = {0FDF9A6E-1A72-3F19-85DD-9FE6DA352688} + {DCE5ED1A-5A88-3AFB-85A9-1B47D374D2CB} = {DCE5ED1A-5A88-3AFB-85A9-1B47D374D2CB} + EndProjectSection +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "GUIDOEngine", "..\\GUIDOEngine.vcxproj", "{842FF4CD-676C-370D-AF6D-6720DE5A1403}" + ProjectSection(ProjectDependencies) = postProject + {0FDF9A6E-1A72-3F19-85DD-9FE6DA352688} = {0FDF9A6E-1A72-3F19-85DD-9FE6DA352688} + EndProjectSection +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "INSTALL", "INSTALL.vcxproj", "{FE64AE99-8DBC-37DC-B9BB-BB51C25BC125}" + ProjectSection(ProjectDependencies) = postProject + {5F1214A1-C58D-39B4-B10A-51B3C726B5CF} = {5F1214A1-C58D-39B4-B10A-51B3C726B5CF} + {0FDF9A6E-1A72-3F19-85DD-9FE6DA352688} = {0FDF9A6E-1A72-3F19-85DD-9FE6DA352688} + EndProjectSection +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "PACKAGE", "PACKAGE.vcxproj", "{A7E84986-B1FC-3C38-9495-08F877D91135}" + ProjectSection(ProjectDependencies) = postProject + {5F1214A1-C58D-39B4-B10A-51B3C726B5CF} = {5F1214A1-C58D-39B4-B10A-51B3C726B5CF} + {0FDF9A6E-1A72-3F19-85DD-9FE6DA352688} = {0FDF9A6E-1A72-3F19-85DD-9FE6DA352688} + EndProjectSection +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "ZERO_CHECK", "..\\ZERO_CHECK.vcxproj", "{0FDF9A6E-1A72-3F19-85DD-9FE6DA352688}" + ProjectSection(ProjectDependencies) = postProject + EndProjectSection +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "jniGUIDOEngine", "jniGUIDOEngine.vcxproj", "{DCE5ED1A-5A88-3AFB-85A9-1B47D374D2CB}" + ProjectSection(ProjectDependencies) = postProject + {842FF4CD-676C-370D-AF6D-6720DE5A1403} = {842FF4CD-676C-370D-AF6D-6720DE5A1403} + {0FDF9A6E-1A72-3F19-85DD-9FE6DA352688} = {0FDF9A6E-1A72-3F19-85DD-9FE6DA352688} + EndProjectSection +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Win32 = Debug|Win32 + Release|Win32 = Release|Win32 + MinSizeRel|Win32 = MinSizeRel|Win32 + RelWithDebInfo|Win32 = RelWithDebInfo|Win32 + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {5F1214A1-C58D-39B4-B10A-51B3C726B5CF}.Debug|Win32.ActiveCfg = Debug|Win32 + {5F1214A1-C58D-39B4-B10A-51B3C726B5CF}.Debug|Win32.Build.0 = Debug|Win32 + {5F1214A1-C58D-39B4-B10A-51B3C726B5CF}.Release|Win32.ActiveCfg = Release|Win32 + {5F1214A1-C58D-39B4-B10A-51B3C726B5CF}.Release|Win32.Build.0 = Release|Win32 + {5F1214A1-C58D-39B4-B10A-51B3C726B5CF}.MinSizeRel|Win32.ActiveCfg = MinSizeRel|Win32 + {5F1214A1-C58D-39B4-B10A-51B3C726B5CF}.MinSizeRel|Win32.Build.0 = MinSizeRel|Win32 + {5F1214A1-C58D-39B4-B10A-51B3C726B5CF}.RelWithDebInfo|Win32.ActiveCfg = RelWithDebInfo|Win32 + {5F1214A1-C58D-39B4-B10A-51B3C726B5CF}.RelWithDebInfo|Win32.Build.0 = RelWithDebInfo|Win32 + {842FF4CD-676C-370D-AF6D-6720DE5A1403}.Debug|Win32.ActiveCfg = Debug|Win32 + {842FF4CD-676C-370D-AF6D-6720DE5A1403}.Debug|Win32.Build.0 = Debug|Win32 + {842FF4CD-676C-370D-AF6D-6720DE5A1403}.Release|Win32.ActiveCfg = Release|Win32 + {842FF4CD-676C-370D-AF6D-6720DE5A1403}.Release|Win32.Build.0 = Release|Win32 + {842FF4CD-676C-370D-AF6D-6720DE5A1403}.MinSizeRel|Win32.ActiveCfg = MinSizeRel|Win32 + {842FF4CD-676C-370D-AF6D-6720DE5A1403}.MinSizeRel|Win32.Build.0 = MinSizeRel|Win32 + {842FF4CD-676C-370D-AF6D-6720DE5A1403}.RelWithDebInfo|Win32.ActiveCfg = RelWithDebInfo|Win32 + {842FF4CD-676C-370D-AF6D-6720DE5A1403}.RelWithDebInfo|Win32.Build.0 = RelWithDebInfo|Win32 + {FE64AE99-8DBC-37DC-B9BB-BB51C25BC125}.Debug|Win32.ActiveCfg = Debug|Win32 + {FE64AE99-8DBC-37DC-B9BB-BB51C25BC125}.Release|Win32.ActiveCfg = Release|Win32 + {FE64AE99-8DBC-37DC-B9BB-BB51C25BC125}.MinSizeRel|Win32.ActiveCfg = MinSizeRel|Win32 + {FE64AE99-8DBC-37DC-B9BB-BB51C25BC125}.RelWithDebInfo|Win32.ActiveCfg = RelWithDebInfo|Win32 + {A7E84986-B1FC-3C38-9495-08F877D91135}.Debug|Win32.ActiveCfg = Debug|Win32 + {A7E84986-B1FC-3C38-9495-08F877D91135}.Release|Win32.ActiveCfg = Release|Win32 + {A7E84986-B1FC-3C38-9495-08F877D91135}.MinSizeRel|Win32.ActiveCfg = MinSizeRel|Win32 + {A7E84986-B1FC-3C38-9495-08F877D91135}.RelWithDebInfo|Win32.ActiveCfg = RelWithDebInfo|Win32 + {0FDF9A6E-1A72-3F19-85DD-9FE6DA352688}.Debug|Win32.ActiveCfg = Debug|Win32 + {0FDF9A6E-1A72-3F19-85DD-9FE6DA352688}.Debug|Win32.Build.0 = Debug|Win32 + {0FDF9A6E-1A72-3F19-85DD-9FE6DA352688}.Release|Win32.ActiveCfg = Release|Win32 + {0FDF9A6E-1A72-3F19-85DD-9FE6DA352688}.Release|Win32.Build.0 = Release|Win32 + {0FDF9A6E-1A72-3F19-85DD-9FE6DA352688}.MinSizeRel|Win32.ActiveCfg = MinSizeRel|Win32 + {0FDF9A6E-1A72-3F19-85DD-9FE6DA352688}.MinSizeRel|Win32.Build.0 = MinSizeRel|Win32 + {0FDF9A6E-1A72-3F19-85DD-9FE6DA352688}.RelWithDebInfo|Win32.ActiveCfg = RelWithDebInfo|Win32 + {0FDF9A6E-1A72-3F19-85DD-9FE6DA352688}.RelWithDebInfo|Win32.Build.0 = RelWithDebInfo|Win32 + {DCE5ED1A-5A88-3AFB-85A9-1B47D374D2CB}.Debug|Win32.ActiveCfg = Debug|Win32 + {DCE5ED1A-5A88-3AFB-85A9-1B47D374D2CB}.Debug|Win32.Build.0 = Debug|Win32 + {DCE5ED1A-5A88-3AFB-85A9-1B47D374D2CB}.Release|Win32.ActiveCfg = Release|Win32 + {DCE5ED1A-5A88-3AFB-85A9-1B47D374D2CB}.Release|Win32.Build.0 = Release|Win32 + {DCE5ED1A-5A88-3AFB-85A9-1B47D374D2CB}.MinSizeRel|Win32.ActiveCfg = MinSizeRel|Win32 + {DCE5ED1A-5A88-3AFB-85A9-1B47D374D2CB}.MinSizeRel|Win32.Build.0 = MinSizeRel|Win32 + {DCE5ED1A-5A88-3AFB-85A9-1B47D374D2CB}.RelWithDebInfo|Win32.ActiveCfg = RelWithDebInfo|Win32 + {DCE5ED1A-5A88-3AFB-85A9-1B47D374D2CB}.RelWithDebInfo|Win32.Build.0 = RelWithDebInfo|Win32 + EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + SolutionGuid = {5034EC51-7C2C-3BC1-AA01-28BD45D80E32} + EndGlobalSection + GlobalSection(ExtensibilityAddIns) = postSolution + EndGlobalSection +EndGlobal diff --git a/out32/tools/guidotools.sln b/out32/tools/guidotools.sln new file mode 100644 index 000000000..9564d220d --- /dev/null +++ b/out32/tools/guidotools.sln @@ -0,0 +1,376 @@ + +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio Version 16 +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "ALL_BUILD", "ALL_BUILD.vcxproj", "{5F1214A1-C58D-39B4-B10A-51B3C726B5CF}" + ProjectSection(ProjectDependencies) = postProject + {0FDF9A6E-1A72-3F19-85DD-9FE6DA352688} = {0FDF9A6E-1A72-3F19-85DD-9FE6DA352688} + {1D402F2C-76EB-3A2B-8608-673EE69AB61B} = {1D402F2C-76EB-3A2B-8608-673EE69AB61B} + {52E84872-7F33-3AFC-A0BB-FDD6FED3F8A1} = {52E84872-7F33-3AFC-A0BB-FDD6FED3F8A1} + {D1DE5D57-3F37-334F-B7C8-496865D53C5B} = {D1DE5D57-3F37-334F-B7C8-496865D53C5B} + {9AA0B7B6-3031-3940-9AAC-0D7572DB9661} = {9AA0B7B6-3031-3940-9AAC-0D7572DB9661} + {42DF59C4-AAE2-3BE0-881D-4F86D92D9C92} = {42DF59C4-AAE2-3BE0-881D-4F86D92D9C92} + {85BBC070-2B80-31C7-85DB-4FEF23D2D1DE} = {85BBC070-2B80-31C7-85DB-4FEF23D2D1DE} + {542807CD-C489-3F55-BF13-2E012F82829F} = {542807CD-C489-3F55-BF13-2E012F82829F} + {F5F9DF19-5255-3C60-BF22-6F8E81C75D70} = {F5F9DF19-5255-3C60-BF22-6F8E81C75D70} + {3DC4BBDB-FE52-3D07-98AD-93CD8011BBDD} = {3DC4BBDB-FE52-3D07-98AD-93CD8011BBDD} + {A7B00862-DD14-342A-BB2C-1580F01D106C} = {A7B00862-DD14-342A-BB2C-1580F01D106C} + {687D7206-8ED0-370F-A66E-6C6E07DFC55E} = {687D7206-8ED0-370F-A66E-6C6E07DFC55E} + {FCD45757-7CBF-394C-987B-1BFE47C4AE7F} = {FCD45757-7CBF-394C-987B-1BFE47C4AE7F} + {46A3C1C5-8648-32A9-80D4-A53D4FC6C863} = {46A3C1C5-8648-32A9-80D4-A53D4FC6C863} + {6246A420-65E9-356A-A001-2B6C18469178} = {6246A420-65E9-356A-A001-2B6C18469178} + {6D3E8F9D-8F69-3905-8B6E-8FAECF73BD09} = {6D3E8F9D-8F69-3905-8B6E-8FAECF73BD09} + {EFF82734-629B-3D82-94E0-BD5DABD7C8EA} = {EFF82734-629B-3D82-94E0-BD5DABD7C8EA} + {3B3CFAF3-93D4-378E-9D52-3146F23E5740} = {3B3CFAF3-93D4-378E-9D52-3146F23E5740} + {1536A57F-5EDF-349F-8A6D-DEABE32962B2} = {1536A57F-5EDF-349F-8A6D-DEABE32962B2} + {6F1EF5F9-010D-3EAD-9623-468CEEEE1A89} = {6F1EF5F9-010D-3EAD-9623-468CEEEE1A89} + {6BE60EA5-3BF5-3B25-8AE8-C9BB2AAC489A} = {6BE60EA5-3BF5-3B25-8AE8-C9BB2AAC489A} + EndProjectSection +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "GUIDOEngine", "..\\GUIDOEngine.vcxproj", "{842FF4CD-676C-370D-AF6D-6720DE5A1403}" + ProjectSection(ProjectDependencies) = postProject + {0FDF9A6E-1A72-3F19-85DD-9FE6DA352688} = {0FDF9A6E-1A72-3F19-85DD-9FE6DA352688} + EndProjectSection +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "INSTALL", "INSTALL.vcxproj", "{FE64AE99-8DBC-37DC-B9BB-BB51C25BC125}" + ProjectSection(ProjectDependencies) = postProject + {5F1214A1-C58D-39B4-B10A-51B3C726B5CF} = {5F1214A1-C58D-39B4-B10A-51B3C726B5CF} + {0FDF9A6E-1A72-3F19-85DD-9FE6DA352688} = {0FDF9A6E-1A72-3F19-85DD-9FE6DA352688} + EndProjectSection +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "PACKAGE", "PACKAGE.vcxproj", "{A7E84986-B1FC-3C38-9495-08F877D91135}" + ProjectSection(ProjectDependencies) = postProject + {5F1214A1-C58D-39B4-B10A-51B3C726B5CF} = {5F1214A1-C58D-39B4-B10A-51B3C726B5CF} + {0FDF9A6E-1A72-3F19-85DD-9FE6DA352688} = {0FDF9A6E-1A72-3F19-85DD-9FE6DA352688} + EndProjectSection +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "ZERO_CHECK", "..\\ZERO_CHECK.vcxproj", "{0FDF9A6E-1A72-3F19-85DD-9FE6DA352688}" + ProjectSection(ProjectDependencies) = postProject + EndProjectSection +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "guido2abstract", "guido2abstract.vcxproj", "{1D402F2C-76EB-3A2B-8608-673EE69AB61B}" + ProjectSection(ProjectDependencies) = postProject + {842FF4CD-676C-370D-AF6D-6720DE5A1403} = {842FF4CD-676C-370D-AF6D-6720DE5A1403} + {0FDF9A6E-1A72-3F19-85DD-9FE6DA352688} = {0FDF9A6E-1A72-3F19-85DD-9FE6DA352688} + EndProjectSection +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "guido2midi", "guido2midi.vcxproj", "{52E84872-7F33-3AFC-A0BB-FDD6FED3F8A1}" + ProjectSection(ProjectDependencies) = postProject + {842FF4CD-676C-370D-AF6D-6720DE5A1403} = {842FF4CD-676C-370D-AF6D-6720DE5A1403} + {0FDF9A6E-1A72-3F19-85DD-9FE6DA352688} = {0FDF9A6E-1A72-3F19-85DD-9FE6DA352688} + EndProjectSection +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "guido2proll", "guido2proll.vcxproj", "{D1DE5D57-3F37-334F-B7C8-496865D53C5B}" + ProjectSection(ProjectDependencies) = postProject + {842FF4CD-676C-370D-AF6D-6720DE5A1403} = {842FF4CD-676C-370D-AF6D-6720DE5A1403} + {0FDF9A6E-1A72-3F19-85DD-9FE6DA352688} = {0FDF9A6E-1A72-3F19-85DD-9FE6DA352688} + EndProjectSection +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "guido2rproportional", "guido2rproportional.vcxproj", "{9AA0B7B6-3031-3940-9AAC-0D7572DB9661}" + ProjectSection(ProjectDependencies) = postProject + {842FF4CD-676C-370D-AF6D-6720DE5A1403} = {842FF4CD-676C-370D-AF6D-6720DE5A1403} + {0FDF9A6E-1A72-3F19-85DD-9FE6DA352688} = {0FDF9A6E-1A72-3F19-85DD-9FE6DA352688} + EndProjectSection +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "guido2svg", "guido2svg.vcxproj", "{42DF59C4-AAE2-3BE0-881D-4F86D92D9C92}" + ProjectSection(ProjectDependencies) = postProject + {842FF4CD-676C-370D-AF6D-6720DE5A1403} = {842FF4CD-676C-370D-AF6D-6720DE5A1403} + {0FDF9A6E-1A72-3F19-85DD-9FE6DA352688} = {0FDF9A6E-1A72-3F19-85DD-9FE6DA352688} + EndProjectSection +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "guido2svgmap", "guido2svgmap.vcxproj", "{85BBC070-2B80-31C7-85DB-4FEF23D2D1DE}" + ProjectSection(ProjectDependencies) = postProject + {842FF4CD-676C-370D-AF6D-6720DE5A1403} = {842FF4CD-676C-370D-AF6D-6720DE5A1403} + {0FDF9A6E-1A72-3F19-85DD-9FE6DA352688} = {0FDF9A6E-1A72-3F19-85DD-9FE6DA352688} + EndProjectSection +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "guidoar2gr", "guidoar2gr.vcxproj", "{542807CD-C489-3F55-BF13-2E012F82829F}" + ProjectSection(ProjectDependencies) = postProject + {842FF4CD-676C-370D-AF6D-6720DE5A1403} = {842FF4CD-676C-370D-AF6D-6720DE5A1403} + {0FDF9A6E-1A72-3F19-85DD-9FE6DA352688} = {0FDF9A6E-1A72-3F19-85DD-9FE6DA352688} + EndProjectSection +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "guidodraw", "guidodraw.vcxproj", "{F5F9DF19-5255-3C60-BF22-6F8E81C75D70}" + ProjectSection(ProjectDependencies) = postProject + {842FF4CD-676C-370D-AF6D-6720DE5A1403} = {842FF4CD-676C-370D-AF6D-6720DE5A1403} + {0FDF9A6E-1A72-3F19-85DD-9FE6DA352688} = {0FDF9A6E-1A72-3F19-85DD-9FE6DA352688} + EndProjectSection +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "guidogetmeters", "guidogetmeters.vcxproj", "{3DC4BBDB-FE52-3D07-98AD-93CD8011BBDD}" + ProjectSection(ProjectDependencies) = postProject + {842FF4CD-676C-370D-AF6D-6720DE5A1403} = {842FF4CD-676C-370D-AF6D-6720DE5A1403} + {0FDF9A6E-1A72-3F19-85DD-9FE6DA352688} = {0FDF9A6E-1A72-3F19-85DD-9FE6DA352688} + EndProjectSection +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "guidogetpagecount", "guidogetpagecount.vcxproj", "{A7B00862-DD14-342A-BB2C-1580F01D106C}" + ProjectSection(ProjectDependencies) = postProject + {842FF4CD-676C-370D-AF6D-6720DE5A1403} = {842FF4CD-676C-370D-AF6D-6720DE5A1403} + {0FDF9A6E-1A72-3F19-85DD-9FE6DA352688} = {0FDF9A6E-1A72-3F19-85DD-9FE6DA352688} + EndProjectSection +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "guidogetpagemap", "guidogetpagemap.vcxproj", "{687D7206-8ED0-370F-A66E-6C6E07DFC55E}" + ProjectSection(ProjectDependencies) = postProject + {842FF4CD-676C-370D-AF6D-6720DE5A1403} = {842FF4CD-676C-370D-AF6D-6720DE5A1403} + {0FDF9A6E-1A72-3F19-85DD-9FE6DA352688} = {0FDF9A6E-1A72-3F19-85DD-9FE6DA352688} + EndProjectSection +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "guidogetstaffmap", "guidogetstaffmap.vcxproj", "{FCD45757-7CBF-394C-987B-1BFE47C4AE7F}" + ProjectSection(ProjectDependencies) = postProject + {842FF4CD-676C-370D-AF6D-6720DE5A1403} = {842FF4CD-676C-370D-AF6D-6720DE5A1403} + {0FDF9A6E-1A72-3F19-85DD-9FE6DA352688} = {0FDF9A6E-1A72-3F19-85DD-9FE6DA352688} + EndProjectSection +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "guidogetsystemmap", "guidogetsystemmap.vcxproj", "{46A3C1C5-8648-32A9-80D4-A53D4FC6C863}" + ProjectSection(ProjectDependencies) = postProject + {842FF4CD-676C-370D-AF6D-6720DE5A1403} = {842FF4CD-676C-370D-AF6D-6720DE5A1403} + {0FDF9A6E-1A72-3F19-85DD-9FE6DA352688} = {0FDF9A6E-1A72-3F19-85DD-9FE6DA352688} + EndProjectSection +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "guidogettempi", "guidogettempi.vcxproj", "{6246A420-65E9-356A-A001-2B6C18469178}" + ProjectSection(ProjectDependencies) = postProject + {842FF4CD-676C-370D-AF6D-6720DE5A1403} = {842FF4CD-676C-370D-AF6D-6720DE5A1403} + {0FDF9A6E-1A72-3F19-85DD-9FE6DA352688} = {0FDF9A6E-1A72-3F19-85DD-9FE6DA352688} + EndProjectSection +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "guidogettimemap", "guidogettimemap.vcxproj", "{6D3E8F9D-8F69-3905-8B6E-8FAECF73BD09}" + ProjectSection(ProjectDependencies) = postProject + {842FF4CD-676C-370D-AF6D-6720DE5A1403} = {842FF4CD-676C-370D-AF6D-6720DE5A1403} + {0FDF9A6E-1A72-3F19-85DD-9FE6DA352688} = {0FDF9A6E-1A72-3F19-85DD-9FE6DA352688} + EndProjectSection +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "guidogetversion", "guidogetversion.vcxproj", "{EFF82734-629B-3D82-94E0-BD5DABD7C8EA}" + ProjectSection(ProjectDependencies) = postProject + {842FF4CD-676C-370D-AF6D-6720DE5A1403} = {842FF4CD-676C-370D-AF6D-6720DE5A1403} + {0FDF9A6E-1A72-3F19-85DD-9FE6DA352688} = {0FDF9A6E-1A72-3F19-85DD-9FE6DA352688} + EndProjectSection +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "guidogetvoicecount", "guidogetvoicecount.vcxproj", "{3B3CFAF3-93D4-378E-9D52-3146F23E5740}" + ProjectSection(ProjectDependencies) = postProject + {842FF4CD-676C-370D-AF6D-6720DE5A1403} = {842FF4CD-676C-370D-AF6D-6720DE5A1403} + {0FDF9A6E-1A72-3F19-85DD-9FE6DA352688} = {0FDF9A6E-1A72-3F19-85DD-9FE6DA352688} + EndProjectSection +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "guidogetvoicemap", "guidogetvoicemap.vcxproj", "{1536A57F-5EDF-349F-8A6D-DEABE32962B2}" + ProjectSection(ProjectDependencies) = postProject + {842FF4CD-676C-370D-AF6D-6720DE5A1403} = {842FF4CD-676C-370D-AF6D-6720DE5A1403} + {0FDF9A6E-1A72-3F19-85DD-9FE6DA352688} = {0FDF9A6E-1A72-3F19-85DD-9FE6DA352688} + EndProjectSection +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "guidoparse", "guidoparse.vcxproj", "{6F1EF5F9-010D-3EAD-9623-468CEEEE1A89}" + ProjectSection(ProjectDependencies) = postProject + {842FF4CD-676C-370D-AF6D-6720DE5A1403} = {842FF4CD-676C-370D-AF6D-6720DE5A1403} + {0FDF9A6E-1A72-3F19-85DD-9FE6DA352688} = {0FDF9A6E-1A72-3F19-85DD-9FE6DA352688} + EndProjectSection +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "midi2proll", "midi2proll.vcxproj", "{6BE60EA5-3BF5-3B25-8AE8-C9BB2AAC489A}" + ProjectSection(ProjectDependencies) = postProject + {842FF4CD-676C-370D-AF6D-6720DE5A1403} = {842FF4CD-676C-370D-AF6D-6720DE5A1403} + {0FDF9A6E-1A72-3F19-85DD-9FE6DA352688} = {0FDF9A6E-1A72-3F19-85DD-9FE6DA352688} + EndProjectSection +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Win32 = Debug|Win32 + Release|Win32 = Release|Win32 + MinSizeRel|Win32 = MinSizeRel|Win32 + RelWithDebInfo|Win32 = RelWithDebInfo|Win32 + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {5F1214A1-C58D-39B4-B10A-51B3C726B5CF}.Debug|Win32.ActiveCfg = Debug|Win32 + {5F1214A1-C58D-39B4-B10A-51B3C726B5CF}.Debug|Win32.Build.0 = Debug|Win32 + {5F1214A1-C58D-39B4-B10A-51B3C726B5CF}.Release|Win32.ActiveCfg = Release|Win32 + {5F1214A1-C58D-39B4-B10A-51B3C726B5CF}.Release|Win32.Build.0 = Release|Win32 + {5F1214A1-C58D-39B4-B10A-51B3C726B5CF}.MinSizeRel|Win32.ActiveCfg = MinSizeRel|Win32 + {5F1214A1-C58D-39B4-B10A-51B3C726B5CF}.MinSizeRel|Win32.Build.0 = MinSizeRel|Win32 + {5F1214A1-C58D-39B4-B10A-51B3C726B5CF}.RelWithDebInfo|Win32.ActiveCfg = RelWithDebInfo|Win32 + {5F1214A1-C58D-39B4-B10A-51B3C726B5CF}.RelWithDebInfo|Win32.Build.0 = RelWithDebInfo|Win32 + {842FF4CD-676C-370D-AF6D-6720DE5A1403}.Debug|Win32.ActiveCfg = Debug|Win32 + {842FF4CD-676C-370D-AF6D-6720DE5A1403}.Debug|Win32.Build.0 = Debug|Win32 + {842FF4CD-676C-370D-AF6D-6720DE5A1403}.Release|Win32.ActiveCfg = Release|Win32 + {842FF4CD-676C-370D-AF6D-6720DE5A1403}.Release|Win32.Build.0 = Release|Win32 + {842FF4CD-676C-370D-AF6D-6720DE5A1403}.MinSizeRel|Win32.ActiveCfg = MinSizeRel|Win32 + {842FF4CD-676C-370D-AF6D-6720DE5A1403}.MinSizeRel|Win32.Build.0 = MinSizeRel|Win32 + {842FF4CD-676C-370D-AF6D-6720DE5A1403}.RelWithDebInfo|Win32.ActiveCfg = RelWithDebInfo|Win32 + {842FF4CD-676C-370D-AF6D-6720DE5A1403}.RelWithDebInfo|Win32.Build.0 = RelWithDebInfo|Win32 + {FE64AE99-8DBC-37DC-B9BB-BB51C25BC125}.Debug|Win32.ActiveCfg = Debug|Win32 + {FE64AE99-8DBC-37DC-B9BB-BB51C25BC125}.Release|Win32.ActiveCfg = Release|Win32 + {FE64AE99-8DBC-37DC-B9BB-BB51C25BC125}.MinSizeRel|Win32.ActiveCfg = MinSizeRel|Win32 + {FE64AE99-8DBC-37DC-B9BB-BB51C25BC125}.RelWithDebInfo|Win32.ActiveCfg = RelWithDebInfo|Win32 + {A7E84986-B1FC-3C38-9495-08F877D91135}.Debug|Win32.ActiveCfg = Debug|Win32 + {A7E84986-B1FC-3C38-9495-08F877D91135}.Release|Win32.ActiveCfg = Release|Win32 + {A7E84986-B1FC-3C38-9495-08F877D91135}.MinSizeRel|Win32.ActiveCfg = MinSizeRel|Win32 + {A7E84986-B1FC-3C38-9495-08F877D91135}.RelWithDebInfo|Win32.ActiveCfg = RelWithDebInfo|Win32 + {0FDF9A6E-1A72-3F19-85DD-9FE6DA352688}.Debug|Win32.ActiveCfg = Debug|Win32 + {0FDF9A6E-1A72-3F19-85DD-9FE6DA352688}.Debug|Win32.Build.0 = Debug|Win32 + {0FDF9A6E-1A72-3F19-85DD-9FE6DA352688}.Release|Win32.ActiveCfg = Release|Win32 + {0FDF9A6E-1A72-3F19-85DD-9FE6DA352688}.Release|Win32.Build.0 = Release|Win32 + {0FDF9A6E-1A72-3F19-85DD-9FE6DA352688}.MinSizeRel|Win32.ActiveCfg = MinSizeRel|Win32 + {0FDF9A6E-1A72-3F19-85DD-9FE6DA352688}.MinSizeRel|Win32.Build.0 = MinSizeRel|Win32 + {0FDF9A6E-1A72-3F19-85DD-9FE6DA352688}.RelWithDebInfo|Win32.ActiveCfg = RelWithDebInfo|Win32 + {0FDF9A6E-1A72-3F19-85DD-9FE6DA352688}.RelWithDebInfo|Win32.Build.0 = RelWithDebInfo|Win32 + {1D402F2C-76EB-3A2B-8608-673EE69AB61B}.Debug|Win32.ActiveCfg = Debug|Win32 + {1D402F2C-76EB-3A2B-8608-673EE69AB61B}.Debug|Win32.Build.0 = Debug|Win32 + {1D402F2C-76EB-3A2B-8608-673EE69AB61B}.Release|Win32.ActiveCfg = Release|Win32 + {1D402F2C-76EB-3A2B-8608-673EE69AB61B}.Release|Win32.Build.0 = Release|Win32 + {1D402F2C-76EB-3A2B-8608-673EE69AB61B}.MinSizeRel|Win32.ActiveCfg = MinSizeRel|Win32 + {1D402F2C-76EB-3A2B-8608-673EE69AB61B}.MinSizeRel|Win32.Build.0 = MinSizeRel|Win32 + {1D402F2C-76EB-3A2B-8608-673EE69AB61B}.RelWithDebInfo|Win32.ActiveCfg = RelWithDebInfo|Win32 + {1D402F2C-76EB-3A2B-8608-673EE69AB61B}.RelWithDebInfo|Win32.Build.0 = RelWithDebInfo|Win32 + {52E84872-7F33-3AFC-A0BB-FDD6FED3F8A1}.Debug|Win32.ActiveCfg = Debug|Win32 + {52E84872-7F33-3AFC-A0BB-FDD6FED3F8A1}.Debug|Win32.Build.0 = Debug|Win32 + {52E84872-7F33-3AFC-A0BB-FDD6FED3F8A1}.Release|Win32.ActiveCfg = Release|Win32 + {52E84872-7F33-3AFC-A0BB-FDD6FED3F8A1}.Release|Win32.Build.0 = Release|Win32 + {52E84872-7F33-3AFC-A0BB-FDD6FED3F8A1}.MinSizeRel|Win32.ActiveCfg = MinSizeRel|Win32 + {52E84872-7F33-3AFC-A0BB-FDD6FED3F8A1}.MinSizeRel|Win32.Build.0 = MinSizeRel|Win32 + {52E84872-7F33-3AFC-A0BB-FDD6FED3F8A1}.RelWithDebInfo|Win32.ActiveCfg = RelWithDebInfo|Win32 + {52E84872-7F33-3AFC-A0BB-FDD6FED3F8A1}.RelWithDebInfo|Win32.Build.0 = RelWithDebInfo|Win32 + {D1DE5D57-3F37-334F-B7C8-496865D53C5B}.Debug|Win32.ActiveCfg = Debug|Win32 + {D1DE5D57-3F37-334F-B7C8-496865D53C5B}.Debug|Win32.Build.0 = Debug|Win32 + {D1DE5D57-3F37-334F-B7C8-496865D53C5B}.Release|Win32.ActiveCfg = Release|Win32 + {D1DE5D57-3F37-334F-B7C8-496865D53C5B}.Release|Win32.Build.0 = Release|Win32 + {D1DE5D57-3F37-334F-B7C8-496865D53C5B}.MinSizeRel|Win32.ActiveCfg = MinSizeRel|Win32 + {D1DE5D57-3F37-334F-B7C8-496865D53C5B}.MinSizeRel|Win32.Build.0 = MinSizeRel|Win32 + {D1DE5D57-3F37-334F-B7C8-496865D53C5B}.RelWithDebInfo|Win32.ActiveCfg = RelWithDebInfo|Win32 + {D1DE5D57-3F37-334F-B7C8-496865D53C5B}.RelWithDebInfo|Win32.Build.0 = RelWithDebInfo|Win32 + {9AA0B7B6-3031-3940-9AAC-0D7572DB9661}.Debug|Win32.ActiveCfg = Debug|Win32 + {9AA0B7B6-3031-3940-9AAC-0D7572DB9661}.Debug|Win32.Build.0 = Debug|Win32 + {9AA0B7B6-3031-3940-9AAC-0D7572DB9661}.Release|Win32.ActiveCfg = Release|Win32 + {9AA0B7B6-3031-3940-9AAC-0D7572DB9661}.Release|Win32.Build.0 = Release|Win32 + {9AA0B7B6-3031-3940-9AAC-0D7572DB9661}.MinSizeRel|Win32.ActiveCfg = MinSizeRel|Win32 + {9AA0B7B6-3031-3940-9AAC-0D7572DB9661}.MinSizeRel|Win32.Build.0 = MinSizeRel|Win32 + {9AA0B7B6-3031-3940-9AAC-0D7572DB9661}.RelWithDebInfo|Win32.ActiveCfg = RelWithDebInfo|Win32 + {9AA0B7B6-3031-3940-9AAC-0D7572DB9661}.RelWithDebInfo|Win32.Build.0 = RelWithDebInfo|Win32 + {42DF59C4-AAE2-3BE0-881D-4F86D92D9C92}.Debug|Win32.ActiveCfg = Debug|Win32 + {42DF59C4-AAE2-3BE0-881D-4F86D92D9C92}.Debug|Win32.Build.0 = Debug|Win32 + {42DF59C4-AAE2-3BE0-881D-4F86D92D9C92}.Release|Win32.ActiveCfg = Release|Win32 + {42DF59C4-AAE2-3BE0-881D-4F86D92D9C92}.Release|Win32.Build.0 = Release|Win32 + {42DF59C4-AAE2-3BE0-881D-4F86D92D9C92}.MinSizeRel|Win32.ActiveCfg = MinSizeRel|Win32 + {42DF59C4-AAE2-3BE0-881D-4F86D92D9C92}.MinSizeRel|Win32.Build.0 = MinSizeRel|Win32 + {42DF59C4-AAE2-3BE0-881D-4F86D92D9C92}.RelWithDebInfo|Win32.ActiveCfg = RelWithDebInfo|Win32 + {42DF59C4-AAE2-3BE0-881D-4F86D92D9C92}.RelWithDebInfo|Win32.Build.0 = RelWithDebInfo|Win32 + {85BBC070-2B80-31C7-85DB-4FEF23D2D1DE}.Debug|Win32.ActiveCfg = Debug|Win32 + {85BBC070-2B80-31C7-85DB-4FEF23D2D1DE}.Debug|Win32.Build.0 = Debug|Win32 + {85BBC070-2B80-31C7-85DB-4FEF23D2D1DE}.Release|Win32.ActiveCfg = Release|Win32 + {85BBC070-2B80-31C7-85DB-4FEF23D2D1DE}.Release|Win32.Build.0 = Release|Win32 + {85BBC070-2B80-31C7-85DB-4FEF23D2D1DE}.MinSizeRel|Win32.ActiveCfg = MinSizeRel|Win32 + {85BBC070-2B80-31C7-85DB-4FEF23D2D1DE}.MinSizeRel|Win32.Build.0 = MinSizeRel|Win32 + {85BBC070-2B80-31C7-85DB-4FEF23D2D1DE}.RelWithDebInfo|Win32.ActiveCfg = RelWithDebInfo|Win32 + {85BBC070-2B80-31C7-85DB-4FEF23D2D1DE}.RelWithDebInfo|Win32.Build.0 = RelWithDebInfo|Win32 + {542807CD-C489-3F55-BF13-2E012F82829F}.Debug|Win32.ActiveCfg = Debug|Win32 + {542807CD-C489-3F55-BF13-2E012F82829F}.Debug|Win32.Build.0 = Debug|Win32 + {542807CD-C489-3F55-BF13-2E012F82829F}.Release|Win32.ActiveCfg = Release|Win32 + {542807CD-C489-3F55-BF13-2E012F82829F}.Release|Win32.Build.0 = Release|Win32 + {542807CD-C489-3F55-BF13-2E012F82829F}.MinSizeRel|Win32.ActiveCfg = MinSizeRel|Win32 + {542807CD-C489-3F55-BF13-2E012F82829F}.MinSizeRel|Win32.Build.0 = MinSizeRel|Win32 + {542807CD-C489-3F55-BF13-2E012F82829F}.RelWithDebInfo|Win32.ActiveCfg = RelWithDebInfo|Win32 + {542807CD-C489-3F55-BF13-2E012F82829F}.RelWithDebInfo|Win32.Build.0 = RelWithDebInfo|Win32 + {F5F9DF19-5255-3C60-BF22-6F8E81C75D70}.Debug|Win32.ActiveCfg = Debug|Win32 + {F5F9DF19-5255-3C60-BF22-6F8E81C75D70}.Debug|Win32.Build.0 = Debug|Win32 + {F5F9DF19-5255-3C60-BF22-6F8E81C75D70}.Release|Win32.ActiveCfg = Release|Win32 + {F5F9DF19-5255-3C60-BF22-6F8E81C75D70}.Release|Win32.Build.0 = Release|Win32 + {F5F9DF19-5255-3C60-BF22-6F8E81C75D70}.MinSizeRel|Win32.ActiveCfg = MinSizeRel|Win32 + {F5F9DF19-5255-3C60-BF22-6F8E81C75D70}.MinSizeRel|Win32.Build.0 = MinSizeRel|Win32 + {F5F9DF19-5255-3C60-BF22-6F8E81C75D70}.RelWithDebInfo|Win32.ActiveCfg = RelWithDebInfo|Win32 + {F5F9DF19-5255-3C60-BF22-6F8E81C75D70}.RelWithDebInfo|Win32.Build.0 = RelWithDebInfo|Win32 + {3DC4BBDB-FE52-3D07-98AD-93CD8011BBDD}.Debug|Win32.ActiveCfg = Debug|Win32 + {3DC4BBDB-FE52-3D07-98AD-93CD8011BBDD}.Debug|Win32.Build.0 = Debug|Win32 + {3DC4BBDB-FE52-3D07-98AD-93CD8011BBDD}.Release|Win32.ActiveCfg = Release|Win32 + {3DC4BBDB-FE52-3D07-98AD-93CD8011BBDD}.Release|Win32.Build.0 = Release|Win32 + {3DC4BBDB-FE52-3D07-98AD-93CD8011BBDD}.MinSizeRel|Win32.ActiveCfg = MinSizeRel|Win32 + {3DC4BBDB-FE52-3D07-98AD-93CD8011BBDD}.MinSizeRel|Win32.Build.0 = MinSizeRel|Win32 + {3DC4BBDB-FE52-3D07-98AD-93CD8011BBDD}.RelWithDebInfo|Win32.ActiveCfg = RelWithDebInfo|Win32 + {3DC4BBDB-FE52-3D07-98AD-93CD8011BBDD}.RelWithDebInfo|Win32.Build.0 = RelWithDebInfo|Win32 + {A7B00862-DD14-342A-BB2C-1580F01D106C}.Debug|Win32.ActiveCfg = Debug|Win32 + {A7B00862-DD14-342A-BB2C-1580F01D106C}.Debug|Win32.Build.0 = Debug|Win32 + {A7B00862-DD14-342A-BB2C-1580F01D106C}.Release|Win32.ActiveCfg = Release|Win32 + {A7B00862-DD14-342A-BB2C-1580F01D106C}.Release|Win32.Build.0 = Release|Win32 + {A7B00862-DD14-342A-BB2C-1580F01D106C}.MinSizeRel|Win32.ActiveCfg = MinSizeRel|Win32 + {A7B00862-DD14-342A-BB2C-1580F01D106C}.MinSizeRel|Win32.Build.0 = MinSizeRel|Win32 + {A7B00862-DD14-342A-BB2C-1580F01D106C}.RelWithDebInfo|Win32.ActiveCfg = RelWithDebInfo|Win32 + {A7B00862-DD14-342A-BB2C-1580F01D106C}.RelWithDebInfo|Win32.Build.0 = RelWithDebInfo|Win32 + {687D7206-8ED0-370F-A66E-6C6E07DFC55E}.Debug|Win32.ActiveCfg = Debug|Win32 + {687D7206-8ED0-370F-A66E-6C6E07DFC55E}.Debug|Win32.Build.0 = Debug|Win32 + {687D7206-8ED0-370F-A66E-6C6E07DFC55E}.Release|Win32.ActiveCfg = Release|Win32 + {687D7206-8ED0-370F-A66E-6C6E07DFC55E}.Release|Win32.Build.0 = Release|Win32 + {687D7206-8ED0-370F-A66E-6C6E07DFC55E}.MinSizeRel|Win32.ActiveCfg = MinSizeRel|Win32 + {687D7206-8ED0-370F-A66E-6C6E07DFC55E}.MinSizeRel|Win32.Build.0 = MinSizeRel|Win32 + {687D7206-8ED0-370F-A66E-6C6E07DFC55E}.RelWithDebInfo|Win32.ActiveCfg = RelWithDebInfo|Win32 + {687D7206-8ED0-370F-A66E-6C6E07DFC55E}.RelWithDebInfo|Win32.Build.0 = RelWithDebInfo|Win32 + {FCD45757-7CBF-394C-987B-1BFE47C4AE7F}.Debug|Win32.ActiveCfg = Debug|Win32 + {FCD45757-7CBF-394C-987B-1BFE47C4AE7F}.Debug|Win32.Build.0 = Debug|Win32 + {FCD45757-7CBF-394C-987B-1BFE47C4AE7F}.Release|Win32.ActiveCfg = Release|Win32 + {FCD45757-7CBF-394C-987B-1BFE47C4AE7F}.Release|Win32.Build.0 = Release|Win32 + {FCD45757-7CBF-394C-987B-1BFE47C4AE7F}.MinSizeRel|Win32.ActiveCfg = MinSizeRel|Win32 + {FCD45757-7CBF-394C-987B-1BFE47C4AE7F}.MinSizeRel|Win32.Build.0 = MinSizeRel|Win32 + {FCD45757-7CBF-394C-987B-1BFE47C4AE7F}.RelWithDebInfo|Win32.ActiveCfg = RelWithDebInfo|Win32 + {FCD45757-7CBF-394C-987B-1BFE47C4AE7F}.RelWithDebInfo|Win32.Build.0 = RelWithDebInfo|Win32 + {46A3C1C5-8648-32A9-80D4-A53D4FC6C863}.Debug|Win32.ActiveCfg = Debug|Win32 + {46A3C1C5-8648-32A9-80D4-A53D4FC6C863}.Debug|Win32.Build.0 = Debug|Win32 + {46A3C1C5-8648-32A9-80D4-A53D4FC6C863}.Release|Win32.ActiveCfg = Release|Win32 + {46A3C1C5-8648-32A9-80D4-A53D4FC6C863}.Release|Win32.Build.0 = Release|Win32 + {46A3C1C5-8648-32A9-80D4-A53D4FC6C863}.MinSizeRel|Win32.ActiveCfg = MinSizeRel|Win32 + {46A3C1C5-8648-32A9-80D4-A53D4FC6C863}.MinSizeRel|Win32.Build.0 = MinSizeRel|Win32 + {46A3C1C5-8648-32A9-80D4-A53D4FC6C863}.RelWithDebInfo|Win32.ActiveCfg = RelWithDebInfo|Win32 + {46A3C1C5-8648-32A9-80D4-A53D4FC6C863}.RelWithDebInfo|Win32.Build.0 = RelWithDebInfo|Win32 + {6246A420-65E9-356A-A001-2B6C18469178}.Debug|Win32.ActiveCfg = Debug|Win32 + {6246A420-65E9-356A-A001-2B6C18469178}.Debug|Win32.Build.0 = Debug|Win32 + {6246A420-65E9-356A-A001-2B6C18469178}.Release|Win32.ActiveCfg = Release|Win32 + {6246A420-65E9-356A-A001-2B6C18469178}.Release|Win32.Build.0 = Release|Win32 + {6246A420-65E9-356A-A001-2B6C18469178}.MinSizeRel|Win32.ActiveCfg = MinSizeRel|Win32 + {6246A420-65E9-356A-A001-2B6C18469178}.MinSizeRel|Win32.Build.0 = MinSizeRel|Win32 + {6246A420-65E9-356A-A001-2B6C18469178}.RelWithDebInfo|Win32.ActiveCfg = RelWithDebInfo|Win32 + {6246A420-65E9-356A-A001-2B6C18469178}.RelWithDebInfo|Win32.Build.0 = RelWithDebInfo|Win32 + {6D3E8F9D-8F69-3905-8B6E-8FAECF73BD09}.Debug|Win32.ActiveCfg = Debug|Win32 + {6D3E8F9D-8F69-3905-8B6E-8FAECF73BD09}.Debug|Win32.Build.0 = Debug|Win32 + {6D3E8F9D-8F69-3905-8B6E-8FAECF73BD09}.Release|Win32.ActiveCfg = Release|Win32 + {6D3E8F9D-8F69-3905-8B6E-8FAECF73BD09}.Release|Win32.Build.0 = Release|Win32 + {6D3E8F9D-8F69-3905-8B6E-8FAECF73BD09}.MinSizeRel|Win32.ActiveCfg = MinSizeRel|Win32 + {6D3E8F9D-8F69-3905-8B6E-8FAECF73BD09}.MinSizeRel|Win32.Build.0 = MinSizeRel|Win32 + {6D3E8F9D-8F69-3905-8B6E-8FAECF73BD09}.RelWithDebInfo|Win32.ActiveCfg = RelWithDebInfo|Win32 + {6D3E8F9D-8F69-3905-8B6E-8FAECF73BD09}.RelWithDebInfo|Win32.Build.0 = RelWithDebInfo|Win32 + {EFF82734-629B-3D82-94E0-BD5DABD7C8EA}.Debug|Win32.ActiveCfg = Debug|Win32 + {EFF82734-629B-3D82-94E0-BD5DABD7C8EA}.Debug|Win32.Build.0 = Debug|Win32 + {EFF82734-629B-3D82-94E0-BD5DABD7C8EA}.Release|Win32.ActiveCfg = Release|Win32 + {EFF82734-629B-3D82-94E0-BD5DABD7C8EA}.Release|Win32.Build.0 = Release|Win32 + {EFF82734-629B-3D82-94E0-BD5DABD7C8EA}.MinSizeRel|Win32.ActiveCfg = MinSizeRel|Win32 + {EFF82734-629B-3D82-94E0-BD5DABD7C8EA}.MinSizeRel|Win32.Build.0 = MinSizeRel|Win32 + {EFF82734-629B-3D82-94E0-BD5DABD7C8EA}.RelWithDebInfo|Win32.ActiveCfg = RelWithDebInfo|Win32 + {EFF82734-629B-3D82-94E0-BD5DABD7C8EA}.RelWithDebInfo|Win32.Build.0 = RelWithDebInfo|Win32 + {3B3CFAF3-93D4-378E-9D52-3146F23E5740}.Debug|Win32.ActiveCfg = Debug|Win32 + {3B3CFAF3-93D4-378E-9D52-3146F23E5740}.Debug|Win32.Build.0 = Debug|Win32 + {3B3CFAF3-93D4-378E-9D52-3146F23E5740}.Release|Win32.ActiveCfg = Release|Win32 + {3B3CFAF3-93D4-378E-9D52-3146F23E5740}.Release|Win32.Build.0 = Release|Win32 + {3B3CFAF3-93D4-378E-9D52-3146F23E5740}.MinSizeRel|Win32.ActiveCfg = MinSizeRel|Win32 + {3B3CFAF3-93D4-378E-9D52-3146F23E5740}.MinSizeRel|Win32.Build.0 = MinSizeRel|Win32 + {3B3CFAF3-93D4-378E-9D52-3146F23E5740}.RelWithDebInfo|Win32.ActiveCfg = RelWithDebInfo|Win32 + {3B3CFAF3-93D4-378E-9D52-3146F23E5740}.RelWithDebInfo|Win32.Build.0 = RelWithDebInfo|Win32 + {1536A57F-5EDF-349F-8A6D-DEABE32962B2}.Debug|Win32.ActiveCfg = Debug|Win32 + {1536A57F-5EDF-349F-8A6D-DEABE32962B2}.Debug|Win32.Build.0 = Debug|Win32 + {1536A57F-5EDF-349F-8A6D-DEABE32962B2}.Release|Win32.ActiveCfg = Release|Win32 + {1536A57F-5EDF-349F-8A6D-DEABE32962B2}.Release|Win32.Build.0 = Release|Win32 + {1536A57F-5EDF-349F-8A6D-DEABE32962B2}.MinSizeRel|Win32.ActiveCfg = MinSizeRel|Win32 + {1536A57F-5EDF-349F-8A6D-DEABE32962B2}.MinSizeRel|Win32.Build.0 = MinSizeRel|Win32 + {1536A57F-5EDF-349F-8A6D-DEABE32962B2}.RelWithDebInfo|Win32.ActiveCfg = RelWithDebInfo|Win32 + {1536A57F-5EDF-349F-8A6D-DEABE32962B2}.RelWithDebInfo|Win32.Build.0 = RelWithDebInfo|Win32 + {6F1EF5F9-010D-3EAD-9623-468CEEEE1A89}.Debug|Win32.ActiveCfg = Debug|Win32 + {6F1EF5F9-010D-3EAD-9623-468CEEEE1A89}.Debug|Win32.Build.0 = Debug|Win32 + {6F1EF5F9-010D-3EAD-9623-468CEEEE1A89}.Release|Win32.ActiveCfg = Release|Win32 + {6F1EF5F9-010D-3EAD-9623-468CEEEE1A89}.Release|Win32.Build.0 = Release|Win32 + {6F1EF5F9-010D-3EAD-9623-468CEEEE1A89}.MinSizeRel|Win32.ActiveCfg = MinSizeRel|Win32 + {6F1EF5F9-010D-3EAD-9623-468CEEEE1A89}.MinSizeRel|Win32.Build.0 = MinSizeRel|Win32 + {6F1EF5F9-010D-3EAD-9623-468CEEEE1A89}.RelWithDebInfo|Win32.ActiveCfg = RelWithDebInfo|Win32 + {6F1EF5F9-010D-3EAD-9623-468CEEEE1A89}.RelWithDebInfo|Win32.Build.0 = RelWithDebInfo|Win32 + {6BE60EA5-3BF5-3B25-8AE8-C9BB2AAC489A}.Debug|Win32.ActiveCfg = Debug|Win32 + {6BE60EA5-3BF5-3B25-8AE8-C9BB2AAC489A}.Debug|Win32.Build.0 = Debug|Win32 + {6BE60EA5-3BF5-3B25-8AE8-C9BB2AAC489A}.Release|Win32.ActiveCfg = Release|Win32 + {6BE60EA5-3BF5-3B25-8AE8-C9BB2AAC489A}.Release|Win32.Build.0 = Release|Win32 + {6BE60EA5-3BF5-3B25-8AE8-C9BB2AAC489A}.MinSizeRel|Win32.ActiveCfg = MinSizeRel|Win32 + {6BE60EA5-3BF5-3B25-8AE8-C9BB2AAC489A}.MinSizeRel|Win32.Build.0 = MinSizeRel|Win32 + {6BE60EA5-3BF5-3B25-8AE8-C9BB2AAC489A}.RelWithDebInfo|Win32.ActiveCfg = RelWithDebInfo|Win32 + {6BE60EA5-3BF5-3B25-8AE8-C9BB2AAC489A}.RelWithDebInfo|Win32.Build.0 = RelWithDebInfo|Win32 + EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + SolutionGuid = {ED514A9C-59A3-3D63-A488-60F1C0EDE9CA} + EndGlobalSection + GlobalSection(ExtensibilityAddIns) = postSolution + EndGlobalSection +EndGlobal diff --git a/out64/.vs/guidolib/CopilotIndices/17.12.53.23981/CodeChunks.db b/out64/.vs/guidolib/CopilotIndices/17.12.53.23981/CodeChunks.db new file mode 100644 index 000000000..affb123aa Binary files /dev/null and b/out64/.vs/guidolib/CopilotIndices/17.12.53.23981/CodeChunks.db differ diff --git a/out64/.vs/guidolib/CopilotIndices/17.12.53.23981/SemanticSymbols.db b/out64/.vs/guidolib/CopilotIndices/17.12.53.23981/SemanticSymbols.db new file mode 100644 index 000000000..ffcfd46fc Binary files /dev/null and b/out64/.vs/guidolib/CopilotIndices/17.12.53.23981/SemanticSymbols.db differ diff --git a/out64/.vs/guidolib/CopilotIndices/17.12.53.23981/SemanticSymbols.db-shm b/out64/.vs/guidolib/CopilotIndices/17.12.53.23981/SemanticSymbols.db-shm new file mode 100644 index 000000000..cc202ed94 Binary files /dev/null and b/out64/.vs/guidolib/CopilotIndices/17.12.53.23981/SemanticSymbols.db-shm differ diff --git a/out64/.vs/guidolib/CopilotIndices/17.12.53.23981/SemanticSymbols.db-wal b/out64/.vs/guidolib/CopilotIndices/17.12.53.23981/SemanticSymbols.db-wal new file mode 100644 index 000000000..4b92e3717 Binary files /dev/null and b/out64/.vs/guidolib/CopilotIndices/17.12.53.23981/SemanticSymbols.db-wal differ diff --git a/out64/.vs/guidolib/FileContentIndex/75633a44-ed6b-4a4e-a299-aac5ea6a5d94.vsidx b/out64/.vs/guidolib/FileContentIndex/75633a44-ed6b-4a4e-a299-aac5ea6a5d94.vsidx new file mode 100644 index 000000000..8ecb82518 Binary files /dev/null and b/out64/.vs/guidolib/FileContentIndex/75633a44-ed6b-4a4e-a299-aac5ea6a5d94.vsidx differ diff --git a/out64/.vs/guidolib/FileContentIndex/99a1cb01-b18f-4e07-bdcb-8c011f597162.vsidx b/out64/.vs/guidolib/FileContentIndex/99a1cb01-b18f-4e07-bdcb-8c011f597162.vsidx new file mode 100644 index 000000000..04e58a16a Binary files /dev/null and b/out64/.vs/guidolib/FileContentIndex/99a1cb01-b18f-4e07-bdcb-8c011f597162.vsidx differ diff --git a/out64/.vs/guidolib/FileContentIndex/ae72164b-ea74-4cf9-807c-9b5dc8d3d00d.vsidx b/out64/.vs/guidolib/FileContentIndex/ae72164b-ea74-4cf9-807c-9b5dc8d3d00d.vsidx new file mode 100644 index 000000000..8fa5fc2cd Binary files /dev/null and b/out64/.vs/guidolib/FileContentIndex/ae72164b-ea74-4cf9-807c-9b5dc8d3d00d.vsidx differ diff --git a/out64/.vs/guidolib/FileContentIndex/df06af12-ff06-4d7f-83ed-0f634f20b2e6.vsidx b/out64/.vs/guidolib/FileContentIndex/df06af12-ff06-4d7f-83ed-0f634f20b2e6.vsidx new file mode 100644 index 000000000..09ca36a34 Binary files /dev/null and b/out64/.vs/guidolib/FileContentIndex/df06af12-ff06-4d7f-83ed-0f634f20b2e6.vsidx differ diff --git a/out64/.vs/guidolib/project-colors.json b/out64/.vs/guidolib/project-colors.json new file mode 100644 index 000000000..069efb914 --- /dev/null +++ b/out64/.vs/guidolib/project-colors.json @@ -0,0 +1,11 @@ +{ + "Version": 1, + "ProjectMap": { + "a2fe74e1-b743-11d0-ae1a-00a0c90fffc3": { + "ProjectGuid": "a2fe74e1-b743-11d0-ae1a-00a0c90fffc3", + "DisplayName": "Miscellaneous Files", + "ColorIndex": -1 + } + }, + "NextColorIndex": 0 +} \ No newline at end of file diff --git a/out64/.vs/guidolib/v16/.suo b/out64/.vs/guidolib/v16/.suo new file mode 100644 index 000000000..35ad8305e Binary files /dev/null and b/out64/.vs/guidolib/v16/.suo differ diff --git a/out64/.vs/guidolib/v16/Solution.VC.db b/out64/.vs/guidolib/v16/Solution.VC.db new file mode 100644 index 000000000..e94f8feb5 Binary files /dev/null and b/out64/.vs/guidolib/v16/Solution.VC.db differ diff --git a/out64/.vs/guidolib/v17/.suo b/out64/.vs/guidolib/v17/.suo new file mode 100644 index 000000000..6aef929cc Binary files /dev/null and b/out64/.vs/guidolib/v17/.suo differ diff --git a/out64/.vs/guidolib/v17/Current/Solution.VC.db b/out64/.vs/guidolib/v17/Current/Solution.VC.db new file mode 100644 index 000000000..90eb3d0ad Binary files /dev/null and b/out64/.vs/guidolib/v17/Current/Solution.VC.db differ diff --git a/out64/.vs/guidolib/v17/DocumentLayout.backup.json b/out64/.vs/guidolib/v17/DocumentLayout.backup.json new file mode 100644 index 000000000..0e79a63c4 --- /dev/null +++ b/out64/.vs/guidolib/v17/DocumentLayout.backup.json @@ -0,0 +1,130 @@ +{ + "Version": 1, + "WorkspaceRootPath": "F:\\guidolib\\out64\\", + "Documents": [ + { + "AbsoluteMoniker": "D:0:0:{2291E906-3E58-32D3-A8C4-32F18DC13E9F}|SGUIDOEngine.vcxproj|F:\\guidolib\\src\\engine\\graphic\\GRDynamics.cpp||{D0E1A5C6-B359-4E41-9B60-3365922C2A22}" + }, + { + "AbsoluteMoniker": "D:0:0:{2291E906-3E58-32D3-A8C4-32F18DC13E9F}|SGUIDOEngine.vcxproj|F:\\guidolib\\src\\engine\\graphic\\GRDynamics.h||{D0E1A5C6-B359-4E41-9B60-3365922C2A22}" + }, + { + "AbsoluteMoniker": "D:0:0:{2291E906-3E58-32D3-A8C4-32F18DC13E9F}|SGUIDOEngine.vcxproj|F:\\guidolib\\src\\engine\\include\\GUIDOScoreMap.h||{D0E1A5C6-B359-4E41-9B60-3365922C2A22}" + }, + { + "AbsoluteMoniker": "D:0:0:{2291E906-3E58-32D3-A8C4-32F18DC13E9F}|SGUIDOEngine.vcxproj|F:\\guidolib\\src\\engine\\graphic\\GRText.cpp||{D0E1A5C6-B359-4E41-9B60-3365922C2A22}" + }, + { + "AbsoluteMoniker": "D:0:0:{2291E906-3E58-32D3-A8C4-32F18DC13E9F}|SGUIDOEngine.vcxproj|F:\\guidolib\\src\\engine\\graphic\\GRText.h||{D0E1A5C6-B359-4E41-9B60-3365922C2A22}" + }, + { + "AbsoluteMoniker": "D:0:0:{2291E906-3E58-32D3-A8C4-32F18DC13E9F}|SGUIDOEngine.vcxproj|F:\\guidolib\\src\\engine\\graphic\\GRKey.cpp||{D0E1A5C6-B359-4E41-9B60-3365922C2A22}" + }, + { + "AbsoluteMoniker": "D:0:0:{2291E906-3E58-32D3-A8C4-32F18DC13E9F}|SGUIDOEngine.vcxproj|F:\\guidolib\\src\\engine\\graphic\\GRKey.h||{D0E1A5C6-B359-4E41-9B60-3365922C2A22}" + } + ], + "DocumentGroupContainers": [ + { + "Orientation": 0, + "VerticalTabListWidth": 256, + "DocumentGroups": [ + { + "DockedWidth": 200, + "SelectedChildIndex": 1, + "Children": [ + { + "$type": "Bookmark", + "Name": "ST:0:0:{1c4feeaa-4718-4aa9-859d-94ce25d182ba}" + }, + { + "$type": "Document", + "DocumentIndex": 0, + "Title": "GRDynamics.cpp", + "DocumentMoniker": "F:\\guidolib\\src\\engine\\graphic\\GRDynamics.cpp", + "RelativeDocumentMoniker": "..\\src\\engine\\graphic\\GRDynamics.cpp", + "ToolTip": "F:\\guidolib\\src\\engine\\graphic\\GRDynamics.cpp", + "RelativeToolTip": "..\\src\\engine\\graphic\\GRDynamics.cpp", + "ViewState": "AgIAAIgAAAAAAAAAAAAAALAAAAAIAAAAAAAAAA==", + "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000677|", + "WhenOpened": "2025-01-12T06:47:46.165Z", + "EditorCaption": "" + }, + { + "$type": "Document", + "DocumentIndex": 1, + "Title": "GRDynamics.h", + "DocumentMoniker": "F:\\guidolib\\src\\engine\\graphic\\GRDynamics.h", + "RelativeDocumentMoniker": "..\\src\\engine\\graphic\\GRDynamics.h", + "ToolTip": "F:\\guidolib\\src\\engine\\graphic\\GRDynamics.h", + "RelativeToolTip": "..\\src\\engine\\graphic\\GRDynamics.h", + "ViewState": "AgIAAAAAAAAAAAAAAAAAACcAAAAAAAAAAAAAAA==", + "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000680|", + "WhenOpened": "2025-01-12T06:47:28.78Z" + }, + { + "$type": "Document", + "DocumentIndex": 5, + "Title": "GRKey.cpp", + "DocumentMoniker": "F:\\guidolib\\src\\engine\\graphic\\GRKey.cpp", + "RelativeDocumentMoniker": "..\\src\\engine\\graphic\\GRKey.cpp", + "ToolTip": "F:\\guidolib\\src\\engine\\graphic\\GRKey.cpp", + "RelativeToolTip": "..\\src\\engine\\graphic\\GRKey.cpp", + "ViewState": "AgIAAKcAAAAAAAAAAAAAAMMAAAAZAAAAAAAAAA==", + "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000677|", + "WhenOpened": "2025-01-12T06:37:28.673Z" + }, + { + "$type": "Document", + "DocumentIndex": 6, + "Title": "GRKey.h", + "DocumentMoniker": "F:\\guidolib\\src\\engine\\graphic\\GRKey.h", + "RelativeDocumentMoniker": "..\\src\\engine\\graphic\\GRKey.h", + "ToolTip": "F:\\guidolib\\src\\engine\\graphic\\GRKey.h", + "RelativeToolTip": "..\\src\\engine\\graphic\\GRKey.h", + "ViewState": "AgIAABEAAAAAAAAAAAAvwDMAAAAAAAAAAAAAAA==", + "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000680|", + "WhenOpened": "2025-01-12T06:37:11.874Z" + }, + { + "$type": "Document", + "DocumentIndex": 4, + "Title": "GRText.h", + "DocumentMoniker": "F:\\guidolib\\src\\engine\\graphic\\GRText.h", + "RelativeDocumentMoniker": "..\\src\\engine\\graphic\\GRText.h", + "ToolTip": "F:\\guidolib\\src\\engine\\graphic\\GRText.h", + "RelativeToolTip": "..\\src\\engine\\graphic\\GRText.h", + "ViewState": "AgIAACQAAAAAAAAAAAAvwEsAAAAVAAAAAAAAAA==", + "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000680|", + "WhenOpened": "2025-01-12T06:37:04.921Z" + }, + { + "$type": "Document", + "DocumentIndex": 2, + "Title": "GUIDOScoreMap.h", + "DocumentMoniker": "F:\\guidolib\\src\\engine\\include\\GUIDOScoreMap.h", + "RelativeDocumentMoniker": "..\\src\\engine\\include\\GUIDOScoreMap.h", + "ToolTip": "F:\\guidolib\\src\\engine\\include\\GUIDOScoreMap.h", + "RelativeToolTip": "..\\src\\engine\\include\\GUIDOScoreMap.h", + "ViewState": "AgIAABcAAAAAAAAAAAAvwC4AAACNAAAAAAAAAA==", + "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000680|", + "WhenOpened": "2025-01-12T06:36:15.462Z" + }, + { + "$type": "Document", + "DocumentIndex": 3, + "Title": "GRText.cpp", + "DocumentMoniker": "F:\\guidolib\\src\\engine\\graphic\\GRText.cpp", + "RelativeDocumentMoniker": "..\\src\\engine\\graphic\\GRText.cpp", + "ToolTip": "F:\\guidolib\\src\\engine\\graphic\\GRText.cpp", + "RelativeToolTip": "..\\src\\engine\\graphic\\GRText.cpp", + "ViewState": "AgIAALoAAAAAAAAAAAAvwNYAAAAAAAAAAAAAAA==", + "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000677|", + "WhenOpened": "2025-01-12T06:10:51.381Z" + } + ] + } + ] + } + ] +} \ No newline at end of file diff --git a/out64/.vs/guidolib/v17/DocumentLayout.json b/out64/.vs/guidolib/v17/DocumentLayout.json new file mode 100644 index 000000000..0e79a63c4 --- /dev/null +++ b/out64/.vs/guidolib/v17/DocumentLayout.json @@ -0,0 +1,130 @@ +{ + "Version": 1, + "WorkspaceRootPath": "F:\\guidolib\\out64\\", + "Documents": [ + { + "AbsoluteMoniker": "D:0:0:{2291E906-3E58-32D3-A8C4-32F18DC13E9F}|SGUIDOEngine.vcxproj|F:\\guidolib\\src\\engine\\graphic\\GRDynamics.cpp||{D0E1A5C6-B359-4E41-9B60-3365922C2A22}" + }, + { + "AbsoluteMoniker": "D:0:0:{2291E906-3E58-32D3-A8C4-32F18DC13E9F}|SGUIDOEngine.vcxproj|F:\\guidolib\\src\\engine\\graphic\\GRDynamics.h||{D0E1A5C6-B359-4E41-9B60-3365922C2A22}" + }, + { + "AbsoluteMoniker": "D:0:0:{2291E906-3E58-32D3-A8C4-32F18DC13E9F}|SGUIDOEngine.vcxproj|F:\\guidolib\\src\\engine\\include\\GUIDOScoreMap.h||{D0E1A5C6-B359-4E41-9B60-3365922C2A22}" + }, + { + "AbsoluteMoniker": "D:0:0:{2291E906-3E58-32D3-A8C4-32F18DC13E9F}|SGUIDOEngine.vcxproj|F:\\guidolib\\src\\engine\\graphic\\GRText.cpp||{D0E1A5C6-B359-4E41-9B60-3365922C2A22}" + }, + { + "AbsoluteMoniker": "D:0:0:{2291E906-3E58-32D3-A8C4-32F18DC13E9F}|SGUIDOEngine.vcxproj|F:\\guidolib\\src\\engine\\graphic\\GRText.h||{D0E1A5C6-B359-4E41-9B60-3365922C2A22}" + }, + { + "AbsoluteMoniker": "D:0:0:{2291E906-3E58-32D3-A8C4-32F18DC13E9F}|SGUIDOEngine.vcxproj|F:\\guidolib\\src\\engine\\graphic\\GRKey.cpp||{D0E1A5C6-B359-4E41-9B60-3365922C2A22}" + }, + { + "AbsoluteMoniker": "D:0:0:{2291E906-3E58-32D3-A8C4-32F18DC13E9F}|SGUIDOEngine.vcxproj|F:\\guidolib\\src\\engine\\graphic\\GRKey.h||{D0E1A5C6-B359-4E41-9B60-3365922C2A22}" + } + ], + "DocumentGroupContainers": [ + { + "Orientation": 0, + "VerticalTabListWidth": 256, + "DocumentGroups": [ + { + "DockedWidth": 200, + "SelectedChildIndex": 1, + "Children": [ + { + "$type": "Bookmark", + "Name": "ST:0:0:{1c4feeaa-4718-4aa9-859d-94ce25d182ba}" + }, + { + "$type": "Document", + "DocumentIndex": 0, + "Title": "GRDynamics.cpp", + "DocumentMoniker": "F:\\guidolib\\src\\engine\\graphic\\GRDynamics.cpp", + "RelativeDocumentMoniker": "..\\src\\engine\\graphic\\GRDynamics.cpp", + "ToolTip": "F:\\guidolib\\src\\engine\\graphic\\GRDynamics.cpp", + "RelativeToolTip": "..\\src\\engine\\graphic\\GRDynamics.cpp", + "ViewState": "AgIAAIgAAAAAAAAAAAAAALAAAAAIAAAAAAAAAA==", + "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000677|", + "WhenOpened": "2025-01-12T06:47:46.165Z", + "EditorCaption": "" + }, + { + "$type": "Document", + "DocumentIndex": 1, + "Title": "GRDynamics.h", + "DocumentMoniker": "F:\\guidolib\\src\\engine\\graphic\\GRDynamics.h", + "RelativeDocumentMoniker": "..\\src\\engine\\graphic\\GRDynamics.h", + "ToolTip": "F:\\guidolib\\src\\engine\\graphic\\GRDynamics.h", + "RelativeToolTip": "..\\src\\engine\\graphic\\GRDynamics.h", + "ViewState": "AgIAAAAAAAAAAAAAAAAAACcAAAAAAAAAAAAAAA==", + "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000680|", + "WhenOpened": "2025-01-12T06:47:28.78Z" + }, + { + "$type": "Document", + "DocumentIndex": 5, + "Title": "GRKey.cpp", + "DocumentMoniker": "F:\\guidolib\\src\\engine\\graphic\\GRKey.cpp", + "RelativeDocumentMoniker": "..\\src\\engine\\graphic\\GRKey.cpp", + "ToolTip": "F:\\guidolib\\src\\engine\\graphic\\GRKey.cpp", + "RelativeToolTip": "..\\src\\engine\\graphic\\GRKey.cpp", + "ViewState": "AgIAAKcAAAAAAAAAAAAAAMMAAAAZAAAAAAAAAA==", + "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000677|", + "WhenOpened": "2025-01-12T06:37:28.673Z" + }, + { + "$type": "Document", + "DocumentIndex": 6, + "Title": "GRKey.h", + "DocumentMoniker": "F:\\guidolib\\src\\engine\\graphic\\GRKey.h", + "RelativeDocumentMoniker": "..\\src\\engine\\graphic\\GRKey.h", + "ToolTip": "F:\\guidolib\\src\\engine\\graphic\\GRKey.h", + "RelativeToolTip": "..\\src\\engine\\graphic\\GRKey.h", + "ViewState": "AgIAABEAAAAAAAAAAAAvwDMAAAAAAAAAAAAAAA==", + "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000680|", + "WhenOpened": "2025-01-12T06:37:11.874Z" + }, + { + "$type": "Document", + "DocumentIndex": 4, + "Title": "GRText.h", + "DocumentMoniker": "F:\\guidolib\\src\\engine\\graphic\\GRText.h", + "RelativeDocumentMoniker": "..\\src\\engine\\graphic\\GRText.h", + "ToolTip": "F:\\guidolib\\src\\engine\\graphic\\GRText.h", + "RelativeToolTip": "..\\src\\engine\\graphic\\GRText.h", + "ViewState": "AgIAACQAAAAAAAAAAAAvwEsAAAAVAAAAAAAAAA==", + "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000680|", + "WhenOpened": "2025-01-12T06:37:04.921Z" + }, + { + "$type": "Document", + "DocumentIndex": 2, + "Title": "GUIDOScoreMap.h", + "DocumentMoniker": "F:\\guidolib\\src\\engine\\include\\GUIDOScoreMap.h", + "RelativeDocumentMoniker": "..\\src\\engine\\include\\GUIDOScoreMap.h", + "ToolTip": "F:\\guidolib\\src\\engine\\include\\GUIDOScoreMap.h", + "RelativeToolTip": "..\\src\\engine\\include\\GUIDOScoreMap.h", + "ViewState": "AgIAABcAAAAAAAAAAAAvwC4AAACNAAAAAAAAAA==", + "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000680|", + "WhenOpened": "2025-01-12T06:36:15.462Z" + }, + { + "$type": "Document", + "DocumentIndex": 3, + "Title": "GRText.cpp", + "DocumentMoniker": "F:\\guidolib\\src\\engine\\graphic\\GRText.cpp", + "RelativeDocumentMoniker": "..\\src\\engine\\graphic\\GRText.cpp", + "ToolTip": "F:\\guidolib\\src\\engine\\graphic\\GRText.cpp", + "RelativeToolTip": "..\\src\\engine\\graphic\\GRText.cpp", + "ViewState": "AgIAALoAAAAAAAAAAAAvwNYAAAAAAAAAAAAAAA==", + "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000677|", + "WhenOpened": "2025-01-12T06:10:51.381Z" + } + ] + } + ] + } + ] +} \ No newline at end of file diff --git a/out64/.vs/guidolib/v17/Solution.VC.db b/out64/.vs/guidolib/v17/Solution.VC.db new file mode 100644 index 000000000..dde21979c Binary files /dev/null and b/out64/.vs/guidolib/v17/Solution.VC.db differ diff --git a/out64/.vs/guidolib/v17/fileList.bin b/out64/.vs/guidolib/v17/fileList.bin new file mode 100644 index 000000000..b27f870f2 Binary files /dev/null and b/out64/.vs/guidolib/v17/fileList.bin differ diff --git a/out64/CPackConfig.cmake b/out64/CPackConfig.cmake new file mode 100644 index 000000000..e44e9f94c --- /dev/null +++ b/out64/CPackConfig.cmake @@ -0,0 +1,70 @@ +# This file will be configured to contain variables for CPack. These variables +# should be set in the CMake list file of the project before CPack module is +# included. The list of available CPACK_xxx variables and their associated +# documentation may be obtained using +# cpack --help-variable-list +# +# Some variables are common to all generators (e.g. CPACK_PACKAGE_NAME) +# and some are specific to a generator +# (e.g. CPACK_NSIS_EXTRA_INSTALL_COMMANDS). The generator specific variables +# usually begin with CPACK__xxxx. + + +set(CPACK_BINARY_7Z "OFF") +set(CPACK_BINARY_IFW "OFF") +set(CPACK_BINARY_NSIS "ON") +set(CPACK_BINARY_NUGET "OFF") +set(CPACK_BINARY_WIX "OFF") +set(CPACK_BINARY_ZIP "OFF") +set(CPACK_BUILD_SOURCE_DIRS "F:/guidolib/build;F:/guidolib/out64") +set(CPACK_CMAKE_GENERATOR "Visual Studio 16 2019") +set(CPACK_COMPONENT_UNSPECIFIED_HIDDEN "TRUE") +set(CPACK_COMPONENT_UNSPECIFIED_REQUIRED "TRUE") +set(CPACK_DEFAULT_PACKAGE_DESCRIPTION_FILE "G:/PROGS/cmake/share/cmake-3.19/Templates/CPack.GenericDescription.txt") +set(CPACK_DEFAULT_PACKAGE_DESCRIPTION_SUMMARY "guidolib built using CMake") +set(CPACK_GENERATOR "NSIS64") +set(CPACK_INSTALL_CMAKE_PROJECTS "F:/guidolib/out64;guidolib;ALL;/") +set(CPACK_INSTALL_PREFIX "C:/Users/chour/Guido-1.7.1") +set(CPACK_MODULE_PATH "") +set(CPACK_MONOLITHIC_INSTALL "true") +set(CPACK_NSIS_DISPLAY_NAME "GuidoLib-1.7.1") +set(CPACK_NSIS_INSTALLER_ICON_CODE "") +set(CPACK_NSIS_INSTALLER_MUI_ICON_CODE "") +set(CPACK_NSIS_INSTALL_ROOT "C:\\Program Files") +set(CPACK_NSIS_MODIFY_PATH "ON") +set(CPACK_NSIS_MUI_ICON "F:/guidolib/misc/logo.ico") +set(CPACK_NSIS_PACKAGE_NAME "GuidoLib-1.7.1") +set(CPACK_NSIS_UNINSTALL_NAME "Uninstall") +set(CPACK_OUTPUT_CONFIG_FILE "F:/guidolib/out64/CPackConfig.cmake") +set(CPACK_PACKAGE_DEFAULT_LOCATION "/") +set(CPACK_PACKAGE_DESCRIPTION_FILE "G:/PROGS/cmake/share/cmake-3.19/Templates/CPack.GenericDescription.txt") +set(CPACK_PACKAGE_DESCRIPTION_SUMMARY "GuidoLib - a set of tools and libraries for music score rendering, based on the Guido Music Notation language.") +set(CPACK_PACKAGE_FILE_NAME "GuidoLib-1.7.1-win64") +set(CPACK_PACKAGE_INSTALL_DIRECTORY "GuidoLib-1.7.1") +set(CPACK_PACKAGE_INSTALL_REGISTRY_KEY "GuidoLib-1.7.1") +set(CPACK_PACKAGE_NAME "GuidoLib") +set(CPACK_PACKAGE_RELOCATABLE "true") +set(CPACK_PACKAGE_VENDOR "GRAME") +set(CPACK_PACKAGE_VERSION "1.7.1") +set(CPACK_PACKAGE_VERSION_MAJOR "1") +set(CPACK_PACKAGE_VERSION_MINOR "7") +set(CPACK_PACKAGE_VERSION_PATCH "1") +set(CPACK_RESOURCE_FILE_LICENSE "F:/guidolib/src/license.txt") +set(CPACK_RESOURCE_FILE_README "G:/PROGS/cmake/share/cmake-3.19/Templates/CPack.GenericDescription.txt") +set(CPACK_RESOURCE_FILE_WELCOME "G:/PROGS/cmake/share/cmake-3.19/Templates/CPack.GenericWelcome.txt") +set(CPACK_SET_DESTDIR "OFF") +set(CPACK_SOURCE_7Z "ON") +set(CPACK_SOURCE_GENERATOR "7Z;ZIP") +set(CPACK_SOURCE_OUTPUT_CONFIG_FILE "F:/guidolib/out64/CPackSourceConfig.cmake") +set(CPACK_SOURCE_ZIP "ON") +set(CPACK_SYSTEM_NAME "win64") +set(CPACK_TOPLEVEL_TAG "win64") +set(CPACK_WIX_SIZEOF_VOID_P "8") + +if(NOT CPACK_PROPERTIES_FILE) + set(CPACK_PROPERTIES_FILE "F:/guidolib/out64/CPackProperties.cmake") +endif() + +if(EXISTS ${CPACK_PROPERTIES_FILE}) + include(${CPACK_PROPERTIES_FILE}) +endif() diff --git a/out64/CPackSourceConfig.cmake b/out64/CPackSourceConfig.cmake new file mode 100644 index 000000000..41cb7f90d --- /dev/null +++ b/out64/CPackSourceConfig.cmake @@ -0,0 +1,78 @@ +# This file will be configured to contain variables for CPack. These variables +# should be set in the CMake list file of the project before CPack module is +# included. The list of available CPACK_xxx variables and their associated +# documentation may be obtained using +# cpack --help-variable-list +# +# Some variables are common to all generators (e.g. CPACK_PACKAGE_NAME) +# and some are specific to a generator +# (e.g. CPACK_NSIS_EXTRA_INSTALL_COMMANDS). The generator specific variables +# usually begin with CPACK__xxxx. + + +set(CPACK_BINARY_7Z "OFF") +set(CPACK_BINARY_IFW "OFF") +set(CPACK_BINARY_NSIS "ON") +set(CPACK_BINARY_NUGET "OFF") +set(CPACK_BINARY_WIX "OFF") +set(CPACK_BINARY_ZIP "OFF") +set(CPACK_BUILD_SOURCE_DIRS "F:/guidolib/build;F:/guidolib/out64") +set(CPACK_CMAKE_GENERATOR "Visual Studio 16 2019") +set(CPACK_COMPONENT_UNSPECIFIED_HIDDEN "TRUE") +set(CPACK_COMPONENT_UNSPECIFIED_REQUIRED "TRUE") +set(CPACK_DEFAULT_PACKAGE_DESCRIPTION_FILE "G:/PROGS/cmake/share/cmake-3.19/Templates/CPack.GenericDescription.txt") +set(CPACK_DEFAULT_PACKAGE_DESCRIPTION_SUMMARY "guidolib built using CMake") +set(CPACK_GENERATOR "7Z;ZIP") +set(CPACK_IGNORE_FILES "/CVS/;/\\.svn/;/\\.bzr/;/\\.hg/;/\\.git/;\\.swp\$;\\.#;/#") +set(CPACK_INSTALLED_DIRECTORIES "F:/guidolib/build;/") +set(CPACK_INSTALL_CMAKE_PROJECTS "") +set(CPACK_INSTALL_PREFIX "C:/Users/chour/Guido-1.7.1") +set(CPACK_MODULE_PATH "") +set(CPACK_MONOLITHIC_INSTALL "true") +set(CPACK_NSIS_DISPLAY_NAME "GuidoLib-1.7.1") +set(CPACK_NSIS_INSTALLER_ICON_CODE "") +set(CPACK_NSIS_INSTALLER_MUI_ICON_CODE "") +set(CPACK_NSIS_INSTALL_ROOT "C:\\Program Files") +set(CPACK_NSIS_MODIFY_PATH "ON") +set(CPACK_NSIS_MUI_ICON "F:/guidolib/misc/logo.ico") +set(CPACK_NSIS_PACKAGE_NAME "GuidoLib-1.7.1") +set(CPACK_NSIS_UNINSTALL_NAME "Uninstall") +set(CPACK_OUTPUT_CONFIG_FILE "F:/guidolib/out64/CPackConfig.cmake") +set(CPACK_PACKAGE_DEFAULT_LOCATION "/") +set(CPACK_PACKAGE_DESCRIPTION_FILE "G:/PROGS/cmake/share/cmake-3.19/Templates/CPack.GenericDescription.txt") +set(CPACK_PACKAGE_DESCRIPTION_SUMMARY "GuidoLib - a set of tools and libraries for music score rendering, based on the Guido Music Notation language.") +set(CPACK_PACKAGE_FILE_NAME "GuidoLib-1.7.1-Source") +set(CPACK_PACKAGE_INSTALL_DIRECTORY "GuidoLib-1.7.1") +set(CPACK_PACKAGE_INSTALL_REGISTRY_KEY "GuidoLib-1.7.1") +set(CPACK_PACKAGE_NAME "GuidoLib") +set(CPACK_PACKAGE_RELOCATABLE "true") +set(CPACK_PACKAGE_VENDOR "GRAME") +set(CPACK_PACKAGE_VERSION "1.7.1") +set(CPACK_PACKAGE_VERSION_MAJOR "1") +set(CPACK_PACKAGE_VERSION_MINOR "7") +set(CPACK_PACKAGE_VERSION_PATCH "1") +set(CPACK_RESOURCE_FILE_LICENSE "F:/guidolib/src/license.txt") +set(CPACK_RESOURCE_FILE_README "G:/PROGS/cmake/share/cmake-3.19/Templates/CPack.GenericDescription.txt") +set(CPACK_RESOURCE_FILE_WELCOME "G:/PROGS/cmake/share/cmake-3.19/Templates/CPack.GenericWelcome.txt") +set(CPACK_RPM_PACKAGE_SOURCES "ON") +set(CPACK_SET_DESTDIR "OFF") +set(CPACK_SOURCE_7Z "ON") +set(CPACK_SOURCE_GENERATOR "7Z;ZIP") +set(CPACK_SOURCE_IGNORE_FILES "/CVS/;/\\.svn/;/\\.bzr/;/\\.hg/;/\\.git/;\\.swp\$;\\.#;/#") +set(CPACK_SOURCE_INSTALLED_DIRECTORIES "F:/guidolib/build;/") +set(CPACK_SOURCE_OUTPUT_CONFIG_FILE "F:/guidolib/out64/CPackSourceConfig.cmake") +set(CPACK_SOURCE_PACKAGE_FILE_NAME "GuidoLib-1.7.1-Source") +set(CPACK_SOURCE_TOPLEVEL_TAG "win64-Source") +set(CPACK_SOURCE_ZIP "ON") +set(CPACK_STRIP_FILES "") +set(CPACK_SYSTEM_NAME "win64") +set(CPACK_TOPLEVEL_TAG "win64-Source") +set(CPACK_WIX_SIZEOF_VOID_P "8") + +if(NOT CPACK_PROPERTIES_FILE) + set(CPACK_PROPERTIES_FILE "F:/guidolib/out64/CPackProperties.cmake") +endif() + +if(EXISTS ${CPACK_PROPERTIES_FILE}) + include(${CPACK_PROPERTIES_FILE}) +endif() diff --git a/out64/SGUIDOEngine.dir/DebugSanitizer/SGUIDOEngine.lib.recipe b/out64/SGUIDOEngine.dir/DebugSanitizer/SGUIDOEngine.lib.recipe new file mode 100644 index 000000000..36bae8d9f --- /dev/null +++ b/out64/SGUIDOEngine.dir/DebugSanitizer/SGUIDOEngine.lib.recipe @@ -0,0 +1,11 @@ + + + + + F:\guidolib\out64\x64\Debug\ZERO_CHECK + + + + + + \ No newline at end of file diff --git a/out64/SGUIDOEngine.dir/DebugSanitizer/SGUIDOEngine.log b/out64/SGUIDOEngine.dir/DebugSanitizer/SGUIDOEngine.log new file mode 100644 index 000000000..485697e9a --- /dev/null +++ b/out64/SGUIDOEngine.dir/DebugSanitizer/SGUIDOEngine.log @@ -0,0 +1,393 @@ + MidiShareLight.cpp + lifo.cpp + midifile.cpp + msEvents.cpp +F:\guidolib\midisharelight\src\msEvents.cpp(618,41): warning C4312: 'type cast': conversion from 'long' to 'void *' of greater size +F:\guidolib\midisharelight\src\msEvents.cpp(659,44): warning C4311: 'type cast': pointer truncation from 'void *' to 'long' +F:\guidolib\midisharelight\src\msEvents.cpp(659,44): warning C4302: 'type cast': truncation from 'void *' to 'long' + msFields.cpp + msMemory.cpp + msSeq.cpp + GDeviceWin32.cpp +F:\guidolib\platforms\win32\src\GDeviceWin32.cpp(1164,53): warning C4334: '<<': result of 32-bit shift implicitly converted to 64 bits (was 64-bit shift intended?) + GDeviceWin32GDIPlus.cpp + GFontWin32.cpp + GFontWin32GDIPlus.cpp + GSystemWin32.cpp + GSystemWin32GDIPlus.cpp + ARAccelerando.cpp + ARAccidental.cpp + ARAccolade.cpp + ARAlter.cpp + ARArpeggio.cpp + ARArticulation.cpp + ARAuto.cpp + Generating Code... + Compiling... + ARBar.cpp + ARBarFormat.cpp + ARBeam.cpp + ARBow.cpp + ARBowing.cpp + ARClef.cpp + ARCluster.cpp + ARColor.cpp + ARComposer.cpp + ARCrescendo.cpp + ARCue.cpp + ARDiminuendo.cpp + ARDisplayDuration.cpp + ARDotFormat.cpp + ARDrHoos.cpp + ARDrRenz.cpp + ARDynamic.cpp + ARFactory.cpp + ARFeatheredBeam.cpp + ARFermata.cpp + Generating Code... + Compiling... + ARFingering.cpp + ARFontAble.cpp + ARFooter.cpp + ARGlissando.cpp + ARGrace.cpp + ARHarmony.cpp + ARInstrument.cpp + ARIntens.cpp + ARJump.cpp + ARKey.cpp + ARLyrics.cpp + ARMMRest.cpp + ARMark.cpp + ARMeter.cpp + ARMusic.cpp + ARMusicalEvent.cpp + ARMusicalObject.cpp + ARMusicalTag.cpp + ARMusicalVoice.cpp + ARMusicalVoiceState.cpp + Generating Code... + Compiling... + ARNotations.cpp + ARNote.cpp + ARNoteFormat.cpp + ARNoteName.cpp + AROctava.cpp + ARPageFormat.cpp + ARPizzicato.cpp + ARRepeatBegin.cpp + ARRest.cpp + ARRitardando.cpp + ARSlur.cpp + ARSpace.cpp + ARSpecial.cpp + ARStaccato.cpp + ARStaff.cpp + ARStaffFormat.cpp + ARSymbol.cpp + ARTHead.cpp + ARTStem.cpp + ARTempo.cpp + Generating Code... + Compiling... + ARText.cpp + ARTie.cpp + ARTitle.cpp + ARTremolo.cpp + ARTrill.cpp + ARTuplet.cpp + ARUnits.cpp + ARUserChordTag.cpp + ARVoiceManager.cpp + ARVolta.cpp + Fraction.cpp + NoteAndChordFactory.cpp + TagParameter.cpp + TagParameterFloat.cpp + TagParameterInt.cpp + TagParameterMap.cpp + TagParameterRGBColor.cpp + TagParameterString.cpp + TagParameterStrings.cpp + Tags.cpp + Generating Code... + Compiling... + TempoChange.cpp + PianoRoll.cpp + PianoRollTrajectory.cpp + RProportional.cpp + AbstractDevice.cpp +F:\\guidolib\\midisharelight\\src\\msEvents.cpp(618,41): warning C4312: 'type cast': conversion from 'long' to 'void *' of greater size +F:\\guidolib\\midisharelight\\src\\msEvents.cpp(659,44): warning C4311: 'type cast': pointer truncation from 'void *' to 'long' +F:\\guidolib\\midisharelight\\src\\msEvents.cpp(659,44): warning C4302: 'type cast': truncation from 'void *' to 'long' + AbstractFont.cpp + AbstractSystem.cpp + BinaryDevice.cpp + BinaryFont.cpp + BinarySystem.cpp + SVGDevice.cpp + SVGFont.cpp + SVGMapDevice.cpp + SVGSystem.cpp + TimesFont.cpp + Bitmap.cpp + GObject.cpp + GRARCompositeNotationElement.cpp + GRARNotationElement.cpp + GRAccidental.cpp + Generating Code... + Compiling... + GRAccolade.cpp + GRArpeggio.cpp + GRArticulation.cpp + GRBar.cpp + GRBarFormat.cpp + GRBeam.cpp +F:\guidolib\src\engine\graphic\GRBeam.cpp(953,10): warning C4244: 'initializing': conversion from 'int' to 'float', possible loss of data + GRBowing.cpp + GRBreakMatrix.cpp + GRBreathMark.cpp + GRChordTag.cpp + GRClef.cpp + GRCluster.cpp + GRCoda.cpp + GRCompositeNotationElement.cpp + GRCrescendo.cpp + GRDiminuendo.cpp + GRDoubleBar.cpp + GRDrHoos.cpp + GRDrRenz.cpp + GRDummy.cpp + Generating Code... + Compiling... + GRDynamics.cpp + GREmpty.cpp + GREvent.cpp + GRFingering.cpp + GRFinishBar.cpp + GRFlag.cpp + GRGlissando.cpp + GRGlobalLocation.cpp + GRGlobalStem.cpp + GRGlue.cpp + GRGrace.cpp + GRHarmony.cpp + GRInstrument.cpp + GRIntens.cpp + GRJump.cpp + GRKey.cpp + GRMark.cpp + GRMeter.cpp + GRMusic.cpp + GRNotationElement.cpp + Generating Code... + Compiling... + GRNotations.cpp + GRNote.cpp + GRNoteDot.cpp + GRNoteHead.cpp + GROctava.cpp +F:\guidolib\src\engine\graphic\GROctava.cpp(211,35): warning C4267: '=': conversion from 'size_t' to 'int', possible loss of data +F:\guidolib\src\engine\graphic\GROctava.cpp(246,38): warning C4267: '=': conversion from 'size_t' to 'int', possible loss of data + GRPTagARNotationElement.cpp + GRPage.cpp + GRPageText.cpp + GRPositionTag.cpp + GRPossibleBreakState.cpp + GRRange.cpp + GRRepeatBegin.cpp + GRRepeatEnd.cpp + GRRest.cpp + GRRod.cpp + GRSimpleBeam.cpp + GRSingleNote.cpp +F:\guidolib\src\engine\graphic\GRSingleNote.cpp(171,25): warning C4244: '-=': conversion from 'double' to 'float', possible loss of data + GRSingleRest.cpp + GRSliceHeight.cpp + GRSlur.cpp + Generating Code... + Compiling... + GRSpace.cpp + GRSpaceForceFunction.cpp + GRSpacingMatrix.cpp + GRSpecial.cpp + GRSpring.cpp + GRSpringCollider.cpp + GRSpringForceIndex.cpp + GRStaff.cpp + GRStaffManager.cpp + GRStdNoteHead.cpp + GRStem.cpp + GRSymbol.cpp + GRSystem.cpp + GRSystemSlice.cpp + GRSystemTag.cpp + GRSystemTagInterface.cpp + GRTag.cpp + GRTempo.cpp + GRTempoChange.cpp + GRText.cpp + Generating Code... + Compiling... + GRTie.cpp + GRTremolo.cpp + GRTrill.cpp + GRTuplet.cpp + GRVoice.cpp + GRVoiceManager.cpp + GRVolta.cpp + GraphTools.cpp + Image.cpp + NEList.cpp + NEPointerList.cpp + NVPoint.cpp + NVRect.cpp + NoteDrawer.cpp + FontManager.cpp + FormatStringParser.cpp + GUIDO2Midi.cpp + GUIDOEngine.cpp +F:\guidolib\src\engine\lib\GUIDOEngine.cpp(857,12): warning C4996: 'GuidoSVGExportWithFontSpec': Deprecated function : use GUIDOAPI GuidoErrCode GuidoGR2SVG( const GRHandler handle, int page, std::ostream& out, bool embedFont, const char* font, const int mappingMode = 0 ) instead. + GUIDOEngineAdapter.cpp + GUIDOFactory.cpp + Generating Code... + Compiling... + GUIDOFactoryAdapter.cpp + GUIDOInternal.cpp + GUIDOPianoRoll.cpp + GUIDOPianoRollAdapter.cpp + GUIDOReducedProportional.cpp + GUIDOReducedProportionalAdapter.cpp + GUIDOScoreMap.cpp + GUIDOScoreMapAdapter.cpp + MIDIMapper.cpp + MeterVisitor.cpp + MusicFont.cpp + StaticFont.cpp + TempoVisitor.cpp + TimeMapper.cpp + TimeUnwrap.cpp + guido2.cpp + GuidoMapCollector.cpp + GuidoTiming.cpp + HtmlColors.cpp + TCollisions.cpp + Generating Code... + Compiling... + nvstring.cpp + GMNCodePrintVisitor.cpp + GRFixVisitor.cpp + GRPrintVisitor.cpp + GRShowVisitor.cpp + GRTrillsLinker.cpp + GuidoParser.cpp + GuidoStream.cpp + NoteAndChordParser.cpp + gddefs.cpp + gmntools.cpp + guidolex.cpp +guidolex.cpp(911,39): warning C4244: '=': conversion from '__int64' to 'int', possible loss of data + DeviceExporter.cpp +F:\guidolib\src\engine\tools\DeviceExporter.cpp(101,53): warning C4334: '<<': result of 32-bit shift implicitly converted to 64 bits (was 64-bit shift intended?) + PrintVisitor.cpp + base64.cpp + benchtools.cpp + Generating Code... + GUIDOParse.cpp + guidoparse.cpp +guidoparse.cpp(1292,5): warning C4065: switch statement contains 'default' but no 'case' labels +guido.y(289,26): warning C4244: '=': conversion from 'double' to 'float', possible loss of data +msSeq.obj : warning LNK4006: "struct TMidiSeq * __cdecl MSNewSeq(struct lifo *)" (?MSNewSeq@@YAPEAUTMidiSeq@@PEAUlifo@@@Z) already defined in AbstractDevice.obj; second definition ignored +msSeq.obj : warning LNK4006: "void __cdecl MSAddSeq(struct TMidiSeq *,struct TMidiEv *)" (?MSAddSeq@@YAXPEAUTMidiSeq@@PEAUTMidiEv@@@Z) already defined in AbstractDevice.obj; second definition ignored +msSeq.obj : warning LNK4006: "void __cdecl MSFreeSeq(struct TMidiSeq *,struct lifo *)" (?MSFreeSeq@@YAXPEAUTMidiSeq@@PEAUlifo@@@Z) already defined in AbstractDevice.obj; second definition ignored +msSeq.obj : warning LNK4006: "void __cdecl MSClearSeq(struct TMidiSeq *,struct lifo *)" (?MSClearSeq@@YAXPEAUTMidiSeq@@PEAUlifo@@@Z) already defined in AbstractDevice.obj; second definition ignored +msSeq.obj : warning LNK4006: "void __cdecl MSApplySeq(struct TMidiSeq *,void (__cdecl*)(struct TMidiEv *))" (?MSApplySeq@@YAXPEAUTMidiSeq@@P6AXPEAUTMidiEv@@@Z@Z) already defined in AbstractDevice.obj; second definition ignored +msMemory.obj : warning LNK4006: "private: void __cdecl MSMemory::InitMemory(unsigned long)" (?InitMemory@MSMemory@@AEAAXK@Z) already defined in AbstractDevice.obj; second definition ignored +msMemory.obj : warning LNK4006: "private: bool __cdecl MSMemory::OpenMemory(void)" (?OpenMemory@MSMemory@@AEAA_NXZ) already defined in AbstractDevice.obj; second definition ignored +msMemory.obj : warning LNK4006: "private: void __cdecl MSMemory::CloseMemory(void)" (?CloseMemory@MSMemory@@AEAAXXZ) already defined in AbstractDevice.obj; second definition ignored +msMemory.obj : warning LNK4006: "private: unsigned long __cdecl MSMemory::NewBlock(unsigned long)" (?NewBlock@MSMemory@@AEAAKK@Z) already defined in AbstractDevice.obj; second definition ignored +msMemory.obj : warning LNK4006: "public: __cdecl MSMemory::MSMemory(unsigned long)" (??0MSMemory@@QEAA@K@Z) already defined in AbstractDevice.obj; second definition ignored +msMemory.obj : warning LNK4006: "public: virtual __cdecl MSMemory::~MSMemory(void)" (??1MSMemory@@UEAA@XZ) already defined in AbstractDevice.obj; second definition ignored +msMemory.obj : warning LNK4006: "public: unsigned long __cdecl MSMemory::GrowSpace(unsigned long)" (?GrowSpace@MSMemory@@QEAAKK@Z) already defined in AbstractDevice.obj; second definition ignored +msMemory.obj : warning LNK4006: "public: unsigned long __cdecl MSMemory::FreeSpace(void)const " (?FreeSpace@MSMemory@@QEBAKXZ) already defined in AbstractDevice.obj; second definition ignored +msFields.obj : warning LNK4006: "struct TMidiEv * __cdecl MSGetLink(struct TMidiEv *)" (?MSGetLink@@YAPEAUTMidiEv@@PEAU1@@Z) already defined in AbstractDevice.obj; second definition ignored +msFields.obj : warning LNK4006: "void __cdecl MSSetLink(struct TMidiEv *,struct TMidiEv *)" (?MSSetLink@@YAXPEAUTMidiEv@@0@Z) already defined in AbstractDevice.obj; second definition ignored +msFields.obj : warning LNK4006: "unsigned long __cdecl MSGetDate(struct TMidiEv *)" (?MSGetDate@@YAKPEAUTMidiEv@@@Z) already defined in AbstractDevice.obj; second definition ignored +msFields.obj : warning LNK4006: "void __cdecl MSSetDate(struct TMidiEv *,unsigned long)" (?MSSetDate@@YAXPEAUTMidiEv@@K@Z) already defined in AbstractDevice.obj; second definition ignored +msFields.obj : warning LNK4006: "short __cdecl MSGetRefNum(struct TMidiEv *)" (?MSGetRefNum@@YAFPEAUTMidiEv@@@Z) already defined in AbstractDevice.obj; second definition ignored +msFields.obj : warning LNK4006: "void __cdecl MSSetRefNum(struct TMidiEv *,short)" (?MSSetRefNum@@YAXPEAUTMidiEv@@F@Z) already defined in AbstractDevice.obj; second definition ignored +msFields.obj : warning LNK4006: "short __cdecl MSGetType(struct TMidiEv *)" (?MSGetType@@YAFPEAUTMidiEv@@@Z) already defined in AbstractDevice.obj; second definition ignored +msFields.obj : warning LNK4006: "void __cdecl MSSetType(struct TMidiEv *,short)" (?MSSetType@@YAXPEAUTMidiEv@@F@Z) already defined in AbstractDevice.obj; second definition ignored +msFields.obj : warning LNK4006: "short __cdecl MSGetChan(struct TMidiEv *)" (?MSGetChan@@YAFPEAUTMidiEv@@@Z) already defined in AbstractDevice.obj; second definition ignored +msFields.obj : warning LNK4006: "void __cdecl MSSetChan(struct TMidiEv *,short)" (?MSSetChan@@YAXPEAUTMidiEv@@F@Z) already defined in AbstractDevice.obj; second definition ignored +msFields.obj : warning LNK4006: "short __cdecl MSGetPort(struct TMidiEv *)" (?MSGetPort@@YAFPEAUTMidiEv@@@Z) already defined in AbstractDevice.obj; second definition ignored +msFields.obj : warning LNK4006: "void __cdecl MSSetPort(struct TMidiEv *,short)" (?MSSetPort@@YAXPEAUTMidiEv@@F@Z) already defined in AbstractDevice.obj; second definition ignored +msFields.obj : warning LNK4006: "long __cdecl MSGetData0(struct TMidiEv *)" (?MSGetData0@@YAJPEAUTMidiEv@@@Z) already defined in AbstractDevice.obj; second definition ignored +msFields.obj : warning LNK4006: "long __cdecl MSGetData1(struct TMidiEv *)" (?MSGetData1@@YAJPEAUTMidiEv@@@Z) already defined in AbstractDevice.obj; second definition ignored +msFields.obj : warning LNK4006: "long __cdecl MSGetData2(struct TMidiEv *)" (?MSGetData2@@YAJPEAUTMidiEv@@@Z) already defined in AbstractDevice.obj; second definition ignored +msFields.obj : warning LNK4006: "long __cdecl MSGetData3(struct TMidiEv *)" (?MSGetData3@@YAJPEAUTMidiEv@@@Z) already defined in AbstractDevice.obj; second definition ignored +msFields.obj : warning LNK4006: "void __cdecl MSSetData0(struct TMidiEv *,long)" (?MSSetData0@@YAXPEAUTMidiEv@@J@Z) already defined in AbstractDevice.obj; second definition ignored +msFields.obj : warning LNK4006: "void __cdecl MSSetData1(struct TMidiEv *,long)" (?MSSetData1@@YAXPEAUTMidiEv@@J@Z) already defined in AbstractDevice.obj; second definition ignored +msFields.obj : warning LNK4006: "void __cdecl MSSetData2(struct TMidiEv *,long)" (?MSSetData2@@YAXPEAUTMidiEv@@J@Z) already defined in AbstractDevice.obj; second definition ignored +msFields.obj : warning LNK4006: "void __cdecl MSSetData3(struct TMidiEv *,long)" (?MSSetData3@@YAXPEAUTMidiEv@@J@Z) already defined in AbstractDevice.obj; second definition ignored +msFields.obj : warning LNK4006: "struct TMidiEv * __cdecl MSGetFirstEv(struct TMidiSeq *)" (?MSGetFirstEv@@YAPEAUTMidiEv@@PEAUTMidiSeq@@@Z) already defined in AbstractDevice.obj; second definition ignored +msFields.obj : warning LNK4006: "void __cdecl MSSetFirstEv(struct TMidiSeq *,struct TMidiEv *)" (?MSSetFirstEv@@YAXPEAUTMidiSeq@@PEAUTMidiEv@@@Z) already defined in AbstractDevice.obj; second definition ignored +msFields.obj : warning LNK4006: "struct TMidiEv * __cdecl MSGetLastEv(struct TMidiSeq *)" (?MSGetLastEv@@YAPEAUTMidiEv@@PEAUTMidiSeq@@@Z) already defined in AbstractDevice.obj; second definition ignored +msFields.obj : warning LNK4006: "void __cdecl MSSetLastEv(struct TMidiSeq *,struct TMidiEv *)" (?MSSetLastEv@@YAXPEAUTMidiSeq@@PEAUTMidiEv@@@Z) already defined in AbstractDevice.obj; second definition ignored +msEvents.obj : warning LNK4006: "struct TMidiEv * __cdecl MSNewEv(short,struct lifo *)" (?MSNewEv@@YAPEAUTMidiEv@@FPEAUlifo@@@Z) already defined in AbstractDevice.obj; second definition ignored +msEvents.obj : warning LNK4006: "void __cdecl MSFreeEv(struct TMidiEv *,struct lifo *)" (?MSFreeEv@@YAXPEAUTMidiEv@@PEAUlifo@@@Z) already defined in AbstractDevice.obj; second definition ignored +msEvents.obj : warning LNK4006: "struct TMidiEv * __cdecl MSCopyEv(struct TMidiEv *,struct lifo *)" (?MSCopyEv@@YAPEAUTMidiEv@@PEAU1@PEAUlifo@@@Z) already defined in AbstractDevice.obj; second definition ignored +msEvents.obj : warning LNK4006: "void __cdecl MSSetField(struct TMidiEv *,unsigned long,long)" (?MSSetField@@YAXPEAUTMidiEv@@KJ@Z) already defined in AbstractDevice.obj; second definition ignored +msEvents.obj : warning LNK4006: "long __cdecl MSGetField(struct TMidiEv *,long)" (?MSGetField@@YAJPEAUTMidiEv@@J@Z) already defined in AbstractDevice.obj; second definition ignored +msEvents.obj : warning LNK4006: "long __cdecl MSCountFields(struct TMidiEv *)" (?MSCountFields@@YAJPEAUTMidiEv@@@Z) already defined in AbstractDevice.obj; second definition ignored +msEvents.obj : warning LNK4006: "void __cdecl MSAddField(struct TMidiEv *,long,struct lifo *)" (?MSAddField@@YAXPEAUTMidiEv@@JPEAUlifo@@@Z) already defined in AbstractDevice.obj; second definition ignored +msEvents.obj : warning LNK4006: "struct TMidiEv * __cdecl MSNewCellFunction(struct lifo *)" (?MSNewCellFunction@@YAPEAUTMidiEv@@PEAUlifo@@@Z) already defined in AbstractDevice.obj; second definition ignored +msEvents.obj : warning LNK4006: "void __cdecl MSFreeCellFunction(struct TMidiEv *,struct lifo *)" (?MSFreeCellFunction@@YAXPEAUTMidiEv@@PEAUlifo@@@Z) already defined in AbstractDevice.obj; second definition ignored +msEvents.obj : warning LNK4006: "void __cdecl InitEvents(void)" (?InitEvents@@YAXXZ) already defined in AbstractDevice.obj; second definition ignored +midifile.obj : warning LNK4006: "int MidiFile_errno" (?MidiFile_errno@@3HA) already defined in AbstractDevice.obj; second definition ignored +midifile.obj : warning LNK4006: MidiFileGetVersion already defined in AbstractDevice.obj; second definition ignored +midifile.obj : warning LNK4006: "private: bool __cdecl MIDIFile::Init(void)" (?Init@MIDIFile@@AEAA_NXZ) already defined in AbstractDevice.obj; second definition ignored +midifile.obj : warning LNK4006: "private: bool __cdecl MIDIFile::ErrOpen(void)" (?ErrOpen@MIDIFile@@AEAA_NXZ) already defined in AbstractDevice.obj; second definition ignored +midifile.obj : warning LNK4006: "private: bool __cdecl MIDIFile::WriteEv(struct midiFILE *,struct TMidiEv *)" (?WriteEv@MIDIFile@@AEAA_NPEAUmidiFILE@@PEAUTMidiEv@@@Z) already defined in AbstractDevice.obj; second definition ignored +midifile.obj : warning LNK4006: "private: bool __cdecl MIDIFile::FlushKeyOff(struct midiFILE *)" (?FlushKeyOff@MIDIFile@@AEAA_NPEAUmidiFILE@@@Z) already defined in AbstractDevice.obj; second definition ignored +midifile.obj : warning LNK4006: "private: struct TMidiEv * __cdecl MIDIFile::ReadEv(struct midiFILE *)" (?ReadEv@MIDIFile@@AEAAPEAUTMidiEv@@PEAUmidiFILE@@@Z) already defined in AbstractDevice.obj; second definition ignored +midifile.obj : warning LNK4006: "public: __cdecl MIDIFile::MIDIFile(void)" (??0MIDIFile@@QEAA@XZ) already defined in AbstractDevice.obj; second definition ignored +midifile.obj : warning LNK4006: "public: virtual __cdecl MIDIFile::~MIDIFile(void)" (??1MIDIFile@@UEAA@XZ) already defined in AbstractDevice.obj; second definition ignored +midifile.obj : warning LNK4006: "public: bool __cdecl MIDIFile::Open(char const *,short)" (?Open@MIDIFile@@QEAA_NPEBDF@Z) already defined in AbstractDevice.obj; second definition ignored +midifile.obj : warning LNK4006: "public: bool __cdecl MIDIFile::Create(char const *,short,short,short)" (?Create@MIDIFile@@QEAA_NPEBDFFF@Z) already defined in AbstractDevice.obj; second definition ignored +midifile.obj : warning LNK4006: "public: bool __cdecl MIDIFile::Close(void)" (?Close@MIDIFile@@QEAA_NXZ) already defined in AbstractDevice.obj; second definition ignored +midifile.obj : warning LNK4006: "public: bool __cdecl MIDIFile::OpenTrack(void)" (?OpenTrack@MIDIFile@@QEAA_NXZ) already defined in AbstractDevice.obj; second definition ignored +midifile.obj : warning LNK4006: "public: bool __cdecl MIDIFile::NewTrack(void)" (?NewTrack@MIDIFile@@QEAA_NXZ) already defined in AbstractDevice.obj; second definition ignored +midifile.obj : warning LNK4006: "public: bool __cdecl MIDIFile::CloseTrack(void)" (?CloseTrack@MIDIFile@@QEAA_NXZ) already defined in AbstractDevice.obj; second definition ignored +midifile.obj : warning LNK4006: "public: bool __cdecl MIDIFile::ChooseTrack(short)" (?ChooseTrack@MIDIFile@@QEAA_NF@Z) already defined in AbstractDevice.obj; second definition ignored +midifile.obj : warning LNK4006: "public: struct TMidiEv * __cdecl MIDIFile::ReadEv(void)" (?ReadEv@MIDIFile@@QEAAPEAUTMidiEv@@XZ) already defined in AbstractDevice.obj; second definition ignored +midifile.obj : warning LNK4006: "public: struct TMidiSeq * __cdecl MIDIFile::ReadTrack(void)" (?ReadTrack@MIDIFile@@QEAAPEAUTMidiSeq@@XZ) already defined in AbstractDevice.obj; second definition ignored +midifile.obj : warning LNK4006: "public: bool __cdecl MIDIFile::WriteEv(struct TMidiEv *)" (?WriteEv@MIDIFile@@QEAA_NPEAUTMidiEv@@@Z) already defined in AbstractDevice.obj; second definition ignored +midifile.obj : warning LNK4006: "public: bool __cdecl MIDIFile::WriteTrack(struct TMidiSeq *)" (?WriteTrack@MIDIFile@@QEAA_NPEAUTMidiSeq@@@Z) already defined in AbstractDevice.obj; second definition ignored +midifile.obj : warning LNK4006: "public: int __cdecl MIDIFile::GetMFErrno(void)" (?GetMFErrno@MIDIFile@@QEAAHXZ) already defined in AbstractDevice.obj; second definition ignored +midifile.obj : warning LNK4006: "public: int __cdecl MIDIFile::GetErrno(void)" (?GetErrno@MIDIFile@@QEAAHXZ) already defined in AbstractDevice.obj; second definition ignored +lifo.obj : warning LNK4006: lifoinit already defined in AbstractDevice.obj; second definition ignored +lifo.obj : warning LNK4006: lifopush already defined in AbstractDevice.obj; second definition ignored +lifo.obj : warning LNK4006: lifopop already defined in AbstractDevice.obj; second definition ignored +MidiShareLight.obj : warning LNK4006: "private: void __cdecl MidiLight::checkSpace(void)" (?checkSpace@MidiLight@@AEAAXXZ) already defined in AbstractDevice.obj; second definition ignored +MidiShareLight.obj : warning LNK4006: "public: __cdecl MidiLight::MidiLight(unsigned long)" (??0MidiLight@@QEAA@K@Z) already defined in AbstractDevice.obj; second definition ignored +MidiShareLight.obj : warning LNK4006: "public: virtual __cdecl MidiLight::~MidiLight(void)" (??1MidiLight@@UEAA@XZ) already defined in AbstractDevice.obj; second definition ignored +MidiShareLight.obj : warning LNK4006: "public: float __cdecl MidiLight::GetVersion(void)" (?GetVersion@MidiLight@@QEAAMXZ) already defined in AbstractDevice.obj; second definition ignored +MidiShareLight.obj : warning LNK4006: "public: unsigned long __cdecl MidiLight::FreeSpace(void)" (?FreeSpace@MidiLight@@QEAAKXZ) already defined in AbstractDevice.obj; second definition ignored +MidiShareLight.obj : warning LNK4006: "public: struct TMidiEv * __cdecl MidiLight::NewCell(void)" (?NewCell@MidiLight@@QEAAPEAUTMidiEv@@XZ) already defined in AbstractDevice.obj; second definition ignored +MidiShareLight.obj : warning LNK4006: "public: void __cdecl MidiLight::FreeCell(struct TMidiEv *)" (?FreeCell@MidiLight@@QEAAXPEAUTMidiEv@@@Z) already defined in AbstractDevice.obj; second definition ignored +MidiShareLight.obj : warning LNK4006: "public: unsigned long __cdecl MidiLight::TotalSpace(void)" (?TotalSpace@MidiLight@@QEAAKXZ) already defined in AbstractDevice.obj; second definition ignored +MidiShareLight.obj : warning LNK4006: "public: unsigned long __cdecl MidiLight::GrowSpace(long)" (?GrowSpace@MidiLight@@QEAAKJ@Z) already defined in AbstractDevice.obj; second definition ignored +MidiShareLight.obj : warning LNK4006: "public: struct TMidiEv * __cdecl MidiLight::NewEv(short)" (?NewEv@MidiLight@@QEAAPEAUTMidiEv@@F@Z) already defined in AbstractDevice.obj; second definition ignored +MidiShareLight.obj : warning LNK4006: "public: struct TMidiEv * __cdecl MidiLight::CopyEv(struct TMidiEv *)" (?CopyEv@MidiLight@@QEAAPEAUTMidiEv@@PEAU2@@Z) already defined in AbstractDevice.obj; second definition ignored +MidiShareLight.obj : warning LNK4006: "public: void __cdecl MidiLight::FreeEv(struct TMidiEv *)" (?FreeEv@MidiLight@@QEAAXPEAUTMidiEv@@@Z) already defined in AbstractDevice.obj; second definition ignored +MidiShareLight.obj : warning LNK4006: "public: void __cdecl MidiLight::SetField(struct TMidiEv *,long,long)" (?SetField@MidiLight@@QEAAXPEAUTMidiEv@@JJ@Z) already defined in AbstractDevice.obj; second definition ignored +MidiShareLight.obj : warning LNK4006: "public: long __cdecl MidiLight::GetField(struct TMidiEv *,long)" (?GetField@MidiLight@@QEAAJPEAUTMidiEv@@J@Z) already defined in AbstractDevice.obj; second definition ignored +MidiShareLight.obj : warning LNK4006: "public: void __cdecl MidiLight::AddField(struct TMidiEv *,long)" (?AddField@MidiLight@@QEAAXPEAUTMidiEv@@J@Z) already defined in AbstractDevice.obj; second definition ignored +MidiShareLight.obj : warning LNK4006: "public: long __cdecl MidiLight::CountFields(struct TMidiEv *)" (?CountFields@MidiLight@@QEAAJPEAUTMidiEv@@@Z) already defined in AbstractDevice.obj; second definition ignored +MidiShareLight.obj : warning LNK4006: "public: struct TMidiSeq * __cdecl MidiLight::NewSeq(void)" (?NewSeq@MidiLight@@QEAAPEAUTMidiSeq@@XZ) already defined in AbstractDevice.obj; second definition ignored +MidiShareLight.obj : warning LNK4006: "public: void __cdecl MidiLight::AddSeq(struct TMidiSeq *,struct TMidiEv *)" (?AddSeq@MidiLight@@QEAAXPEAUTMidiSeq@@PEAUTMidiEv@@@Z) already defined in AbstractDevice.obj; second definition ignored +MidiShareLight.obj : warning LNK4006: "public: void __cdecl MidiLight::FreeSeq(struct TMidiSeq *)" (?FreeSeq@MidiLight@@QEAAXPEAUTMidiSeq@@@Z) already defined in AbstractDevice.obj; second definition ignored +MidiShareLight.obj : warning LNK4006: "public: void __cdecl MidiLight::ClearSeq(struct TMidiSeq *)" (?ClearSeq@MidiLight@@QEAAXPEAUTMidiSeq@@@Z) already defined in AbstractDevice.obj; second definition ignored +MidiShareLight.obj : warning LNK4006: "public: void __cdecl MidiLight::ApplySeq(struct TMidiSeq *,void (__cdecl*)(struct TMidiEv *))" (?ApplySeq@MidiLight@@QEAAXPEAUTMidiSeq@@P6AXPEAUTMidiEv@@@Z@Z) already defined in AbstractDevice.obj; second definition ignored + SGUIDOEngine.vcxproj -> F:\guidolib\build\lib\DebugSanitizer\SGUIDOEngine.lib diff --git a/out64/SGUIDOEngine.dir/DebugSanitizer/SGUIDOEngine.tlog/CL.command.1.tlog b/out64/SGUIDOEngine.dir/DebugSanitizer/SGUIDOEngine.tlog/CL.command.1.tlog new file mode 100644 index 000000000..05cff1992 Binary files /dev/null and b/out64/SGUIDOEngine.dir/DebugSanitizer/SGUIDOEngine.tlog/CL.command.1.tlog differ diff --git a/out64/SGUIDOEngine.dir/DebugSanitizer/SGUIDOEngine.tlog/CL.read.1.tlog b/out64/SGUIDOEngine.dir/DebugSanitizer/SGUIDOEngine.tlog/CL.read.1.tlog new file mode 100644 index 000000000..2cef00b05 Binary files /dev/null and b/out64/SGUIDOEngine.dir/DebugSanitizer/SGUIDOEngine.tlog/CL.read.1.tlog differ diff --git a/out64/SGUIDOEngine.dir/DebugSanitizer/SGUIDOEngine.tlog/CL.write.1.tlog b/out64/SGUIDOEngine.dir/DebugSanitizer/SGUIDOEngine.tlog/CL.write.1.tlog new file mode 100644 index 000000000..3a5c99938 Binary files /dev/null and b/out64/SGUIDOEngine.dir/DebugSanitizer/SGUIDOEngine.tlog/CL.write.1.tlog differ diff --git a/out64/SGUIDOEngine.dir/DebugSanitizer/SGUIDOEngine.tlog/Lib-link-cvtres.read.1.tlog b/out64/SGUIDOEngine.dir/DebugSanitizer/SGUIDOEngine.tlog/Lib-link-cvtres.read.1.tlog new file mode 100644 index 000000000..0e73aa070 Binary files /dev/null and b/out64/SGUIDOEngine.dir/DebugSanitizer/SGUIDOEngine.tlog/Lib-link-cvtres.read.1.tlog differ diff --git a/out64/SGUIDOEngine.dir/DebugSanitizer/SGUIDOEngine.tlog/Lib-link-cvtres.write.1.tlog b/out64/SGUIDOEngine.dir/DebugSanitizer/SGUIDOEngine.tlog/Lib-link-cvtres.write.1.tlog new file mode 100644 index 000000000..771fa2f13 Binary files /dev/null and b/out64/SGUIDOEngine.dir/DebugSanitizer/SGUIDOEngine.tlog/Lib-link-cvtres.write.1.tlog differ diff --git a/out64/SGUIDOEngine.dir/DebugSanitizer/SGUIDOEngine.tlog/Lib.command.1.tlog b/out64/SGUIDOEngine.dir/DebugSanitizer/SGUIDOEngine.tlog/Lib.command.1.tlog new file mode 100644 index 000000000..e97bf524d Binary files /dev/null and b/out64/SGUIDOEngine.dir/DebugSanitizer/SGUIDOEngine.tlog/Lib.command.1.tlog differ diff --git a/out64/SGUIDOEngine.dir/DebugSanitizer/SGUIDOEngine.tlog/SGUIDOEngine.lastbuildstate b/out64/SGUIDOEngine.dir/DebugSanitizer/SGUIDOEngine.tlog/SGUIDOEngine.lastbuildstate new file mode 100644 index 000000000..352ac08b3 --- /dev/null +++ b/out64/SGUIDOEngine.dir/DebugSanitizer/SGUIDOEngine.tlog/SGUIDOEngine.lastbuildstate @@ -0,0 +1,2 @@ +PlatformToolSet=v143:VCToolArchitecture=Native64Bit:VCToolsVersion=14.34.31933:TargetPlatformVersion=10.0.19041.0: +DebugSanitizer|x64|F:\guidolib\out64\| diff --git a/out64/SGUIDOEngine.dir/DebugSanitizer/SGUIDOEngine.tlog/rc.command.1.tlog b/out64/SGUIDOEngine.dir/DebugSanitizer/SGUIDOEngine.tlog/rc.command.1.tlog new file mode 100644 index 000000000..94bd988ad Binary files /dev/null and b/out64/SGUIDOEngine.dir/DebugSanitizer/SGUIDOEngine.tlog/rc.command.1.tlog differ diff --git a/out64/SGUIDOEngine.dir/DebugSanitizer/SGUIDOEngine.tlog/rc.read.1.tlog b/out64/SGUIDOEngine.dir/DebugSanitizer/SGUIDOEngine.tlog/rc.read.1.tlog new file mode 100644 index 000000000..ff21a97f2 Binary files /dev/null and b/out64/SGUIDOEngine.dir/DebugSanitizer/SGUIDOEngine.tlog/rc.read.1.tlog differ diff --git a/out64/SGUIDOEngine.dir/DebugSanitizer/SGUIDOEngine.tlog/rc.write.1.tlog b/out64/SGUIDOEngine.dir/DebugSanitizer/SGUIDOEngine.tlog/rc.write.1.tlog new file mode 100644 index 000000000..db78c5ee4 Binary files /dev/null and b/out64/SGUIDOEngine.dir/DebugSanitizer/SGUIDOEngine.tlog/rc.write.1.tlog differ diff --git a/out64/guidolib.sln b/out64/guidolib.sln new file mode 100644 index 000000000..03e3176c9 --- /dev/null +++ b/out64/guidolib.sln @@ -0,0 +1,420 @@ + +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio Version 17 +VisualStudioVersion = 17.4.33213.308 +MinimumVisualStudioVersion = 10.0.40219.1 +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "ALL_BUILD", "ALL_BUILD.vcxproj", "{CB4FF08D-51F5-3C5C-BC94-216A91D8310F}" + ProjectSection(ProjectDependencies) = postProject + {99D28C74-40FD-34B3-A8B6-349DB67B4367} = {99D28C74-40FD-34B3-A8B6-349DB67B4367} + {2291E906-3E58-32D3-A8C4-32F18DC13E9F} = {2291E906-3E58-32D3-A8C4-32F18DC13E9F} + {8BFAE807-64DC-3284-B201-AB98B48C6A6E} = {8BFAE807-64DC-3284-B201-AB98B48C6A6E} + {3B0F1F0E-02E3-3A13-9626-BCDE8C88F3DC} = {3B0F1F0E-02E3-3A13-9626-BCDE8C88F3DC} + {34BA13F7-2AF7-3B91-BF3E-571FCB761413} = {34BA13F7-2AF7-3B91-BF3E-571FCB761413} + {07C2CBD0-7635-3551-86D4-C304478668D8} = {07C2CBD0-7635-3551-86D4-C304478668D8} + {2B7D0965-AE05-39EF-BF02-167AB99AB8B7} = {2B7D0965-AE05-39EF-BF02-167AB99AB8B7} + {AF362486-4E69-3E42-B614-49EF178645EF} = {AF362486-4E69-3E42-B614-49EF178645EF} + {7EE89FEA-3684-315B-8DBD-48DA12484060} = {7EE89FEA-3684-315B-8DBD-48DA12484060} + {78CE2433-7739-3C58-9B30-57AD9DED85D1} = {78CE2433-7739-3C58-9B30-57AD9DED85D1} + {2C8047EA-5030-3491-9170-54E3001426CB} = {2C8047EA-5030-3491-9170-54E3001426CB} + {66BB990C-DC10-34F4-9291-26FDE1674897} = {66BB990C-DC10-34F4-9291-26FDE1674897} + {7D13F375-C1F5-3C07-BF72-F77EF25B3F51} = {7D13F375-C1F5-3C07-BF72-F77EF25B3F51} + {DE646657-AE91-38F9-9B6B-2D833FD009EE} = {DE646657-AE91-38F9-9B6B-2D833FD009EE} + {B535C94C-FE1B-32B0-A61C-A4A79928BED2} = {B535C94C-FE1B-32B0-A61C-A4A79928BED2} + {3420FBB5-4E52-3DEF-93BE-8ABE8919846F} = {3420FBB5-4E52-3DEF-93BE-8ABE8919846F} + {187AAACC-7ADF-305B-9D70-DAEF86E2F5EC} = {187AAACC-7ADF-305B-9D70-DAEF86E2F5EC} + {E369DAEB-09D6-3832-A248-730973C4FD6E} = {E369DAEB-09D6-3832-A248-730973C4FD6E} + {1FEECCD4-4337-359A-A6B2-DABEFE8BF4EF} = {1FEECCD4-4337-359A-A6B2-DABEFE8BF4EF} + {933E2E87-96E8-3084-8591-ADECE80258FC} = {933E2E87-96E8-3084-8591-ADECE80258FC} + {9D387947-059F-3E10-A3CB-A5DF9C5F0E4E} = {9D387947-059F-3E10-A3CB-A5DF9C5F0E4E} + {488CB4F5-68AA-37FC-A6AD-22FBA710025D} = {488CB4F5-68AA-37FC-A6AD-22FBA710025D} + {87063A3D-11CE-3929-B10F-9A61474AFC2C} = {87063A3D-11CE-3929-B10F-9A61474AFC2C} + EndProjectSection +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "GUIDOEngine", "GUIDOEngine.vcxproj", "{99D28C74-40FD-34B3-A8B6-349DB67B4367}" + ProjectSection(ProjectDependencies) = postProject + {8BFAE807-64DC-3284-B201-AB98B48C6A6E} = {8BFAE807-64DC-3284-B201-AB98B48C6A6E} + EndProjectSection +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "INSTALL", "INSTALL.vcxproj", "{65EFCBE5-1287-390E-B32E-6B6771AA4F69}" + ProjectSection(ProjectDependencies) = postProject + {CB4FF08D-51F5-3C5C-BC94-216A91D8310F} = {CB4FF08D-51F5-3C5C-BC94-216A91D8310F} + {8BFAE807-64DC-3284-B201-AB98B48C6A6E} = {8BFAE807-64DC-3284-B201-AB98B48C6A6E} + EndProjectSection +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "PACKAGE", "PACKAGE.vcxproj", "{590B3DB6-C3C4-3AC7-817B-041D44374E1A}" + ProjectSection(ProjectDependencies) = postProject + {CB4FF08D-51F5-3C5C-BC94-216A91D8310F} = {CB4FF08D-51F5-3C5C-BC94-216A91D8310F} + {8BFAE807-64DC-3284-B201-AB98B48C6A6E} = {8BFAE807-64DC-3284-B201-AB98B48C6A6E} + EndProjectSection +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "SGUIDOEngine", "SGUIDOEngine.vcxproj", "{2291E906-3E58-32D3-A8C4-32F18DC13E9F}" + ProjectSection(ProjectDependencies) = postProject + {8BFAE807-64DC-3284-B201-AB98B48C6A6E} = {8BFAE807-64DC-3284-B201-AB98B48C6A6E} + EndProjectSection +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "ZERO_CHECK", "ZERO_CHECK.vcxproj", "{8BFAE807-64DC-3284-B201-AB98B48C6A6E}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "guido2abstract", "tools\guido2abstract.vcxproj", "{3B0F1F0E-02E3-3A13-9626-BCDE8C88F3DC}" + ProjectSection(ProjectDependencies) = postProject + {99D28C74-40FD-34B3-A8B6-349DB67B4367} = {99D28C74-40FD-34B3-A8B6-349DB67B4367} + {8BFAE807-64DC-3284-B201-AB98B48C6A6E} = {8BFAE807-64DC-3284-B201-AB98B48C6A6E} + EndProjectSection +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "guido2midi", "tools\guido2midi.vcxproj", "{34BA13F7-2AF7-3B91-BF3E-571FCB761413}" + ProjectSection(ProjectDependencies) = postProject + {99D28C74-40FD-34B3-A8B6-349DB67B4367} = {99D28C74-40FD-34B3-A8B6-349DB67B4367} + {8BFAE807-64DC-3284-B201-AB98B48C6A6E} = {8BFAE807-64DC-3284-B201-AB98B48C6A6E} + EndProjectSection +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "guido2proll", "tools\guido2proll.vcxproj", "{07C2CBD0-7635-3551-86D4-C304478668D8}" + ProjectSection(ProjectDependencies) = postProject + {99D28C74-40FD-34B3-A8B6-349DB67B4367} = {99D28C74-40FD-34B3-A8B6-349DB67B4367} + {8BFAE807-64DC-3284-B201-AB98B48C6A6E} = {8BFAE807-64DC-3284-B201-AB98B48C6A6E} + EndProjectSection +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "guido2rproportional", "tools\guido2rproportional.vcxproj", "{2B7D0965-AE05-39EF-BF02-167AB99AB8B7}" + ProjectSection(ProjectDependencies) = postProject + {99D28C74-40FD-34B3-A8B6-349DB67B4367} = {99D28C74-40FD-34B3-A8B6-349DB67B4367} + {8BFAE807-64DC-3284-B201-AB98B48C6A6E} = {8BFAE807-64DC-3284-B201-AB98B48C6A6E} + EndProjectSection +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "guido2svg", "tools\guido2svg.vcxproj", "{AF362486-4E69-3E42-B614-49EF178645EF}" + ProjectSection(ProjectDependencies) = postProject + {99D28C74-40FD-34B3-A8B6-349DB67B4367} = {99D28C74-40FD-34B3-A8B6-349DB67B4367} + {8BFAE807-64DC-3284-B201-AB98B48C6A6E} = {8BFAE807-64DC-3284-B201-AB98B48C6A6E} + EndProjectSection +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "guido2svgmap", "tools\guido2svgmap.vcxproj", "{7EE89FEA-3684-315B-8DBD-48DA12484060}" + ProjectSection(ProjectDependencies) = postProject + {99D28C74-40FD-34B3-A8B6-349DB67B4367} = {99D28C74-40FD-34B3-A8B6-349DB67B4367} + {8BFAE807-64DC-3284-B201-AB98B48C6A6E} = {8BFAE807-64DC-3284-B201-AB98B48C6A6E} + EndProjectSection +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "guidoar2gr", "tools\guidoar2gr.vcxproj", "{78CE2433-7739-3C58-9B30-57AD9DED85D1}" + ProjectSection(ProjectDependencies) = postProject + {99D28C74-40FD-34B3-A8B6-349DB67B4367} = {99D28C74-40FD-34B3-A8B6-349DB67B4367} + {8BFAE807-64DC-3284-B201-AB98B48C6A6E} = {8BFAE807-64DC-3284-B201-AB98B48C6A6E} + EndProjectSection +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "guidodraw", "tools\guidodraw.vcxproj", "{2C8047EA-5030-3491-9170-54E3001426CB}" + ProjectSection(ProjectDependencies) = postProject + {99D28C74-40FD-34B3-A8B6-349DB67B4367} = {99D28C74-40FD-34B3-A8B6-349DB67B4367} + {8BFAE807-64DC-3284-B201-AB98B48C6A6E} = {8BFAE807-64DC-3284-B201-AB98B48C6A6E} + EndProjectSection +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "guidogetmeters", "tools\guidogetmeters.vcxproj", "{66BB990C-DC10-34F4-9291-26FDE1674897}" + ProjectSection(ProjectDependencies) = postProject + {99D28C74-40FD-34B3-A8B6-349DB67B4367} = {99D28C74-40FD-34B3-A8B6-349DB67B4367} + {8BFAE807-64DC-3284-B201-AB98B48C6A6E} = {8BFAE807-64DC-3284-B201-AB98B48C6A6E} + EndProjectSection +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "guidogetpagecount", "tools\guidogetpagecount.vcxproj", "{7D13F375-C1F5-3C07-BF72-F77EF25B3F51}" + ProjectSection(ProjectDependencies) = postProject + {99D28C74-40FD-34B3-A8B6-349DB67B4367} = {99D28C74-40FD-34B3-A8B6-349DB67B4367} + {8BFAE807-64DC-3284-B201-AB98B48C6A6E} = {8BFAE807-64DC-3284-B201-AB98B48C6A6E} + EndProjectSection +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "guidogetpagemap", "tools\guidogetpagemap.vcxproj", "{DE646657-AE91-38F9-9B6B-2D833FD009EE}" + ProjectSection(ProjectDependencies) = postProject + {99D28C74-40FD-34B3-A8B6-349DB67B4367} = {99D28C74-40FD-34B3-A8B6-349DB67B4367} + {8BFAE807-64DC-3284-B201-AB98B48C6A6E} = {8BFAE807-64DC-3284-B201-AB98B48C6A6E} + EndProjectSection +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "guidogetstaffmap", "tools\guidogetstaffmap.vcxproj", "{B535C94C-FE1B-32B0-A61C-A4A79928BED2}" + ProjectSection(ProjectDependencies) = postProject + {99D28C74-40FD-34B3-A8B6-349DB67B4367} = {99D28C74-40FD-34B3-A8B6-349DB67B4367} + {8BFAE807-64DC-3284-B201-AB98B48C6A6E} = {8BFAE807-64DC-3284-B201-AB98B48C6A6E} + EndProjectSection +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "guidogetsystemmap", "tools\guidogetsystemmap.vcxproj", "{3420FBB5-4E52-3DEF-93BE-8ABE8919846F}" + ProjectSection(ProjectDependencies) = postProject + {99D28C74-40FD-34B3-A8B6-349DB67B4367} = {99D28C74-40FD-34B3-A8B6-349DB67B4367} + {8BFAE807-64DC-3284-B201-AB98B48C6A6E} = {8BFAE807-64DC-3284-B201-AB98B48C6A6E} + EndProjectSection +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "guidogettempi", "tools\guidogettempi.vcxproj", "{187AAACC-7ADF-305B-9D70-DAEF86E2F5EC}" + ProjectSection(ProjectDependencies) = postProject + {99D28C74-40FD-34B3-A8B6-349DB67B4367} = {99D28C74-40FD-34B3-A8B6-349DB67B4367} + {8BFAE807-64DC-3284-B201-AB98B48C6A6E} = {8BFAE807-64DC-3284-B201-AB98B48C6A6E} + EndProjectSection +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "guidogettimemap", "tools\guidogettimemap.vcxproj", "{E369DAEB-09D6-3832-A248-730973C4FD6E}" + ProjectSection(ProjectDependencies) = postProject + {99D28C74-40FD-34B3-A8B6-349DB67B4367} = {99D28C74-40FD-34B3-A8B6-349DB67B4367} + {8BFAE807-64DC-3284-B201-AB98B48C6A6E} = {8BFAE807-64DC-3284-B201-AB98B48C6A6E} + EndProjectSection +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "guidogetversion", "tools\guidogetversion.vcxproj", "{1FEECCD4-4337-359A-A6B2-DABEFE8BF4EF}" + ProjectSection(ProjectDependencies) = postProject + {99D28C74-40FD-34B3-A8B6-349DB67B4367} = {99D28C74-40FD-34B3-A8B6-349DB67B4367} + {8BFAE807-64DC-3284-B201-AB98B48C6A6E} = {8BFAE807-64DC-3284-B201-AB98B48C6A6E} + EndProjectSection +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "guidogetvoicecount", "tools\guidogetvoicecount.vcxproj", "{933E2E87-96E8-3084-8591-ADECE80258FC}" + ProjectSection(ProjectDependencies) = postProject + {99D28C74-40FD-34B3-A8B6-349DB67B4367} = {99D28C74-40FD-34B3-A8B6-349DB67B4367} + {8BFAE807-64DC-3284-B201-AB98B48C6A6E} = {8BFAE807-64DC-3284-B201-AB98B48C6A6E} + EndProjectSection +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "guidogetvoicemap", "tools\guidogetvoicemap.vcxproj", "{9D387947-059F-3E10-A3CB-A5DF9C5F0E4E}" + ProjectSection(ProjectDependencies) = postProject + {99D28C74-40FD-34B3-A8B6-349DB67B4367} = {99D28C74-40FD-34B3-A8B6-349DB67B4367} + {8BFAE807-64DC-3284-B201-AB98B48C6A6E} = {8BFAE807-64DC-3284-B201-AB98B48C6A6E} + EndProjectSection +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "guidoparse", "tools\guidoparse.vcxproj", "{488CB4F5-68AA-37FC-A6AD-22FBA710025D}" + ProjectSection(ProjectDependencies) = postProject + {99D28C74-40FD-34B3-A8B6-349DB67B4367} = {99D28C74-40FD-34B3-A8B6-349DB67B4367} + {8BFAE807-64DC-3284-B201-AB98B48C6A6E} = {8BFAE807-64DC-3284-B201-AB98B48C6A6E} + EndProjectSection +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "midi2proll", "tools\midi2proll.vcxproj", "{87063A3D-11CE-3929-B10F-9A61474AFC2C}" + ProjectSection(ProjectDependencies) = postProject + {99D28C74-40FD-34B3-A8B6-349DB67B4367} = {99D28C74-40FD-34B3-A8B6-349DB67B4367} + {8BFAE807-64DC-3284-B201-AB98B48C6A6E} = {8BFAE807-64DC-3284-B201-AB98B48C6A6E} + EndProjectSection +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|x64 = Debug|x64 + DebugSanitizer|x64 = DebugSanitizer|x64 + MinSizeRel|x64 = MinSizeRel|x64 + Release|x64 = Release|x64 + RelWithDebInfo|x64 = RelWithDebInfo|x64 + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {CB4FF08D-51F5-3C5C-BC94-216A91D8310F}.Debug|x64.ActiveCfg = Debug|x64 + {CB4FF08D-51F5-3C5C-BC94-216A91D8310F}.Debug|x64.Build.0 = Debug|x64 + {CB4FF08D-51F5-3C5C-BC94-216A91D8310F}.DebugSanitizer|x64.ActiveCfg = Debug|x64 + {CB4FF08D-51F5-3C5C-BC94-216A91D8310F}.MinSizeRel|x64.ActiveCfg = MinSizeRel|x64 + {CB4FF08D-51F5-3C5C-BC94-216A91D8310F}.MinSizeRel|x64.Build.0 = MinSizeRel|x64 + {CB4FF08D-51F5-3C5C-BC94-216A91D8310F}.Release|x64.ActiveCfg = Release|x64 + {CB4FF08D-51F5-3C5C-BC94-216A91D8310F}.Release|x64.Build.0 = Release|x64 + {CB4FF08D-51F5-3C5C-BC94-216A91D8310F}.RelWithDebInfo|x64.ActiveCfg = RelWithDebInfo|x64 + {CB4FF08D-51F5-3C5C-BC94-216A91D8310F}.RelWithDebInfo|x64.Build.0 = RelWithDebInfo|x64 + {99D28C74-40FD-34B3-A8B6-349DB67B4367}.Debug|x64.ActiveCfg = Debug|x64 + {99D28C74-40FD-34B3-A8B6-349DB67B4367}.Debug|x64.Build.0 = Debug|x64 + {99D28C74-40FD-34B3-A8B6-349DB67B4367}.DebugSanitizer|x64.ActiveCfg = Debug|x64 + {99D28C74-40FD-34B3-A8B6-349DB67B4367}.MinSizeRel|x64.ActiveCfg = MinSizeRel|x64 + {99D28C74-40FD-34B3-A8B6-349DB67B4367}.MinSizeRel|x64.Build.0 = MinSizeRel|x64 + {99D28C74-40FD-34B3-A8B6-349DB67B4367}.Release|x64.ActiveCfg = Release|x64 + {99D28C74-40FD-34B3-A8B6-349DB67B4367}.Release|x64.Build.0 = Release|x64 + {99D28C74-40FD-34B3-A8B6-349DB67B4367}.RelWithDebInfo|x64.ActiveCfg = RelWithDebInfo|x64 + {99D28C74-40FD-34B3-A8B6-349DB67B4367}.RelWithDebInfo|x64.Build.0 = RelWithDebInfo|x64 + {65EFCBE5-1287-390E-B32E-6B6771AA4F69}.Debug|x64.ActiveCfg = Debug|x64 + {65EFCBE5-1287-390E-B32E-6B6771AA4F69}.DebugSanitizer|x64.ActiveCfg = Debug|x64 + {65EFCBE5-1287-390E-B32E-6B6771AA4F69}.MinSizeRel|x64.ActiveCfg = MinSizeRel|x64 + {65EFCBE5-1287-390E-B32E-6B6771AA4F69}.Release|x64.ActiveCfg = Release|x64 + {65EFCBE5-1287-390E-B32E-6B6771AA4F69}.RelWithDebInfo|x64.ActiveCfg = RelWithDebInfo|x64 + {590B3DB6-C3C4-3AC7-817B-041D44374E1A}.Debug|x64.ActiveCfg = Debug|x64 + {590B3DB6-C3C4-3AC7-817B-041D44374E1A}.DebugSanitizer|x64.ActiveCfg = Debug|x64 + {590B3DB6-C3C4-3AC7-817B-041D44374E1A}.MinSizeRel|x64.ActiveCfg = MinSizeRel|x64 + {590B3DB6-C3C4-3AC7-817B-041D44374E1A}.Release|x64.ActiveCfg = Release|x64 + {590B3DB6-C3C4-3AC7-817B-041D44374E1A}.RelWithDebInfo|x64.ActiveCfg = RelWithDebInfo|x64 + {2291E906-3E58-32D3-A8C4-32F18DC13E9F}.Debug|x64.ActiveCfg = Debug|x64 + {2291E906-3E58-32D3-A8C4-32F18DC13E9F}.Debug|x64.Build.0 = Debug|x64 + {2291E906-3E58-32D3-A8C4-32F18DC13E9F}.DebugSanitizer|x64.ActiveCfg = DebugSanitizer|x64 + {2291E906-3E58-32D3-A8C4-32F18DC13E9F}.DebugSanitizer|x64.Build.0 = DebugSanitizer|x64 + {2291E906-3E58-32D3-A8C4-32F18DC13E9F}.MinSizeRel|x64.ActiveCfg = MinSizeRel|x64 + {2291E906-3E58-32D3-A8C4-32F18DC13E9F}.MinSizeRel|x64.Build.0 = MinSizeRel|x64 + {2291E906-3E58-32D3-A8C4-32F18DC13E9F}.Release|x64.ActiveCfg = Release|x64 + {2291E906-3E58-32D3-A8C4-32F18DC13E9F}.Release|x64.Build.0 = Release|x64 + {2291E906-3E58-32D3-A8C4-32F18DC13E9F}.RelWithDebInfo|x64.ActiveCfg = RelWithDebInfo|x64 + {2291E906-3E58-32D3-A8C4-32F18DC13E9F}.RelWithDebInfo|x64.Build.0 = RelWithDebInfo|x64 + {8BFAE807-64DC-3284-B201-AB98B48C6A6E}.Debug|x64.ActiveCfg = Debug|x64 + {8BFAE807-64DC-3284-B201-AB98B48C6A6E}.Debug|x64.Build.0 = Debug|x64 + {8BFAE807-64DC-3284-B201-AB98B48C6A6E}.DebugSanitizer|x64.ActiveCfg = Debug|x64 + {8BFAE807-64DC-3284-B201-AB98B48C6A6E}.MinSizeRel|x64.ActiveCfg = MinSizeRel|x64 + {8BFAE807-64DC-3284-B201-AB98B48C6A6E}.MinSizeRel|x64.Build.0 = MinSizeRel|x64 + {8BFAE807-64DC-3284-B201-AB98B48C6A6E}.Release|x64.ActiveCfg = Release|x64 + {8BFAE807-64DC-3284-B201-AB98B48C6A6E}.Release|x64.Build.0 = Release|x64 + {8BFAE807-64DC-3284-B201-AB98B48C6A6E}.RelWithDebInfo|x64.ActiveCfg = RelWithDebInfo|x64 + {8BFAE807-64DC-3284-B201-AB98B48C6A6E}.RelWithDebInfo|x64.Build.0 = RelWithDebInfo|x64 + {3B0F1F0E-02E3-3A13-9626-BCDE8C88F3DC}.Debug|x64.ActiveCfg = Debug|x64 + {3B0F1F0E-02E3-3A13-9626-BCDE8C88F3DC}.Debug|x64.Build.0 = Debug|x64 + {3B0F1F0E-02E3-3A13-9626-BCDE8C88F3DC}.DebugSanitizer|x64.ActiveCfg = Debug|x64 + {3B0F1F0E-02E3-3A13-9626-BCDE8C88F3DC}.MinSizeRel|x64.ActiveCfg = MinSizeRel|x64 + {3B0F1F0E-02E3-3A13-9626-BCDE8C88F3DC}.MinSizeRel|x64.Build.0 = MinSizeRel|x64 + {3B0F1F0E-02E3-3A13-9626-BCDE8C88F3DC}.Release|x64.ActiveCfg = Release|x64 + {3B0F1F0E-02E3-3A13-9626-BCDE8C88F3DC}.Release|x64.Build.0 = Release|x64 + {3B0F1F0E-02E3-3A13-9626-BCDE8C88F3DC}.RelWithDebInfo|x64.ActiveCfg = RelWithDebInfo|x64 + {3B0F1F0E-02E3-3A13-9626-BCDE8C88F3DC}.RelWithDebInfo|x64.Build.0 = RelWithDebInfo|x64 + {34BA13F7-2AF7-3B91-BF3E-571FCB761413}.Debug|x64.ActiveCfg = Debug|x64 + {34BA13F7-2AF7-3B91-BF3E-571FCB761413}.Debug|x64.Build.0 = Debug|x64 + {34BA13F7-2AF7-3B91-BF3E-571FCB761413}.DebugSanitizer|x64.ActiveCfg = Debug|x64 + {34BA13F7-2AF7-3B91-BF3E-571FCB761413}.MinSizeRel|x64.ActiveCfg = MinSizeRel|x64 + {34BA13F7-2AF7-3B91-BF3E-571FCB761413}.MinSizeRel|x64.Build.0 = MinSizeRel|x64 + {34BA13F7-2AF7-3B91-BF3E-571FCB761413}.Release|x64.ActiveCfg = Release|x64 + {34BA13F7-2AF7-3B91-BF3E-571FCB761413}.Release|x64.Build.0 = Release|x64 + {34BA13F7-2AF7-3B91-BF3E-571FCB761413}.RelWithDebInfo|x64.ActiveCfg = RelWithDebInfo|x64 + {34BA13F7-2AF7-3B91-BF3E-571FCB761413}.RelWithDebInfo|x64.Build.0 = RelWithDebInfo|x64 + {07C2CBD0-7635-3551-86D4-C304478668D8}.Debug|x64.ActiveCfg = Debug|x64 + {07C2CBD0-7635-3551-86D4-C304478668D8}.Debug|x64.Build.0 = Debug|x64 + {07C2CBD0-7635-3551-86D4-C304478668D8}.DebugSanitizer|x64.ActiveCfg = Debug|x64 + {07C2CBD0-7635-3551-86D4-C304478668D8}.MinSizeRel|x64.ActiveCfg = MinSizeRel|x64 + {07C2CBD0-7635-3551-86D4-C304478668D8}.MinSizeRel|x64.Build.0 = MinSizeRel|x64 + {07C2CBD0-7635-3551-86D4-C304478668D8}.Release|x64.ActiveCfg = Release|x64 + {07C2CBD0-7635-3551-86D4-C304478668D8}.Release|x64.Build.0 = Release|x64 + {07C2CBD0-7635-3551-86D4-C304478668D8}.RelWithDebInfo|x64.ActiveCfg = RelWithDebInfo|x64 + {07C2CBD0-7635-3551-86D4-C304478668D8}.RelWithDebInfo|x64.Build.0 = RelWithDebInfo|x64 + {2B7D0965-AE05-39EF-BF02-167AB99AB8B7}.Debug|x64.ActiveCfg = Debug|x64 + {2B7D0965-AE05-39EF-BF02-167AB99AB8B7}.Debug|x64.Build.0 = Debug|x64 + {2B7D0965-AE05-39EF-BF02-167AB99AB8B7}.DebugSanitizer|x64.ActiveCfg = Debug|x64 + {2B7D0965-AE05-39EF-BF02-167AB99AB8B7}.MinSizeRel|x64.ActiveCfg = MinSizeRel|x64 + {2B7D0965-AE05-39EF-BF02-167AB99AB8B7}.MinSizeRel|x64.Build.0 = MinSizeRel|x64 + {2B7D0965-AE05-39EF-BF02-167AB99AB8B7}.Release|x64.ActiveCfg = Release|x64 + {2B7D0965-AE05-39EF-BF02-167AB99AB8B7}.Release|x64.Build.0 = Release|x64 + {2B7D0965-AE05-39EF-BF02-167AB99AB8B7}.RelWithDebInfo|x64.ActiveCfg = RelWithDebInfo|x64 + {2B7D0965-AE05-39EF-BF02-167AB99AB8B7}.RelWithDebInfo|x64.Build.0 = RelWithDebInfo|x64 + {AF362486-4E69-3E42-B614-49EF178645EF}.Debug|x64.ActiveCfg = Debug|x64 + {AF362486-4E69-3E42-B614-49EF178645EF}.Debug|x64.Build.0 = Debug|x64 + {AF362486-4E69-3E42-B614-49EF178645EF}.DebugSanitizer|x64.ActiveCfg = Debug|x64 + {AF362486-4E69-3E42-B614-49EF178645EF}.MinSizeRel|x64.ActiveCfg = MinSizeRel|x64 + {AF362486-4E69-3E42-B614-49EF178645EF}.MinSizeRel|x64.Build.0 = MinSizeRel|x64 + {AF362486-4E69-3E42-B614-49EF178645EF}.Release|x64.ActiveCfg = Release|x64 + {AF362486-4E69-3E42-B614-49EF178645EF}.Release|x64.Build.0 = Release|x64 + {AF362486-4E69-3E42-B614-49EF178645EF}.RelWithDebInfo|x64.ActiveCfg = RelWithDebInfo|x64 + {AF362486-4E69-3E42-B614-49EF178645EF}.RelWithDebInfo|x64.Build.0 = RelWithDebInfo|x64 + {7EE89FEA-3684-315B-8DBD-48DA12484060}.Debug|x64.ActiveCfg = Debug|x64 + {7EE89FEA-3684-315B-8DBD-48DA12484060}.Debug|x64.Build.0 = Debug|x64 + {7EE89FEA-3684-315B-8DBD-48DA12484060}.DebugSanitizer|x64.ActiveCfg = Debug|x64 + {7EE89FEA-3684-315B-8DBD-48DA12484060}.MinSizeRel|x64.ActiveCfg = MinSizeRel|x64 + {7EE89FEA-3684-315B-8DBD-48DA12484060}.MinSizeRel|x64.Build.0 = MinSizeRel|x64 + {7EE89FEA-3684-315B-8DBD-48DA12484060}.Release|x64.ActiveCfg = Release|x64 + {7EE89FEA-3684-315B-8DBD-48DA12484060}.Release|x64.Build.0 = Release|x64 + {7EE89FEA-3684-315B-8DBD-48DA12484060}.RelWithDebInfo|x64.ActiveCfg = RelWithDebInfo|x64 + {7EE89FEA-3684-315B-8DBD-48DA12484060}.RelWithDebInfo|x64.Build.0 = RelWithDebInfo|x64 + {78CE2433-7739-3C58-9B30-57AD9DED85D1}.Debug|x64.ActiveCfg = Debug|x64 + {78CE2433-7739-3C58-9B30-57AD9DED85D1}.Debug|x64.Build.0 = Debug|x64 + {78CE2433-7739-3C58-9B30-57AD9DED85D1}.DebugSanitizer|x64.ActiveCfg = Debug|x64 + {78CE2433-7739-3C58-9B30-57AD9DED85D1}.MinSizeRel|x64.ActiveCfg = MinSizeRel|x64 + {78CE2433-7739-3C58-9B30-57AD9DED85D1}.MinSizeRel|x64.Build.0 = MinSizeRel|x64 + {78CE2433-7739-3C58-9B30-57AD9DED85D1}.Release|x64.ActiveCfg = Release|x64 + {78CE2433-7739-3C58-9B30-57AD9DED85D1}.Release|x64.Build.0 = Release|x64 + {78CE2433-7739-3C58-9B30-57AD9DED85D1}.RelWithDebInfo|x64.ActiveCfg = RelWithDebInfo|x64 + {78CE2433-7739-3C58-9B30-57AD9DED85D1}.RelWithDebInfo|x64.Build.0 = RelWithDebInfo|x64 + {2C8047EA-5030-3491-9170-54E3001426CB}.Debug|x64.ActiveCfg = Debug|x64 + {2C8047EA-5030-3491-9170-54E3001426CB}.Debug|x64.Build.0 = Debug|x64 + {2C8047EA-5030-3491-9170-54E3001426CB}.DebugSanitizer|x64.ActiveCfg = Debug|x64 + {2C8047EA-5030-3491-9170-54E3001426CB}.MinSizeRel|x64.ActiveCfg = MinSizeRel|x64 + {2C8047EA-5030-3491-9170-54E3001426CB}.MinSizeRel|x64.Build.0 = MinSizeRel|x64 + {2C8047EA-5030-3491-9170-54E3001426CB}.Release|x64.ActiveCfg = Release|x64 + {2C8047EA-5030-3491-9170-54E3001426CB}.Release|x64.Build.0 = Release|x64 + {2C8047EA-5030-3491-9170-54E3001426CB}.RelWithDebInfo|x64.ActiveCfg = RelWithDebInfo|x64 + {2C8047EA-5030-3491-9170-54E3001426CB}.RelWithDebInfo|x64.Build.0 = RelWithDebInfo|x64 + {66BB990C-DC10-34F4-9291-26FDE1674897}.Debug|x64.ActiveCfg = Debug|x64 + {66BB990C-DC10-34F4-9291-26FDE1674897}.Debug|x64.Build.0 = Debug|x64 + {66BB990C-DC10-34F4-9291-26FDE1674897}.DebugSanitizer|x64.ActiveCfg = Debug|x64 + {66BB990C-DC10-34F4-9291-26FDE1674897}.MinSizeRel|x64.ActiveCfg = MinSizeRel|x64 + {66BB990C-DC10-34F4-9291-26FDE1674897}.MinSizeRel|x64.Build.0 = MinSizeRel|x64 + {66BB990C-DC10-34F4-9291-26FDE1674897}.Release|x64.ActiveCfg = Release|x64 + {66BB990C-DC10-34F4-9291-26FDE1674897}.Release|x64.Build.0 = Release|x64 + {66BB990C-DC10-34F4-9291-26FDE1674897}.RelWithDebInfo|x64.ActiveCfg = RelWithDebInfo|x64 + {66BB990C-DC10-34F4-9291-26FDE1674897}.RelWithDebInfo|x64.Build.0 = RelWithDebInfo|x64 + {7D13F375-C1F5-3C07-BF72-F77EF25B3F51}.Debug|x64.ActiveCfg = Debug|x64 + {7D13F375-C1F5-3C07-BF72-F77EF25B3F51}.Debug|x64.Build.0 = Debug|x64 + {7D13F375-C1F5-3C07-BF72-F77EF25B3F51}.DebugSanitizer|x64.ActiveCfg = Debug|x64 + {7D13F375-C1F5-3C07-BF72-F77EF25B3F51}.MinSizeRel|x64.ActiveCfg = MinSizeRel|x64 + {7D13F375-C1F5-3C07-BF72-F77EF25B3F51}.MinSizeRel|x64.Build.0 = MinSizeRel|x64 + {7D13F375-C1F5-3C07-BF72-F77EF25B3F51}.Release|x64.ActiveCfg = Release|x64 + {7D13F375-C1F5-3C07-BF72-F77EF25B3F51}.Release|x64.Build.0 = Release|x64 + {7D13F375-C1F5-3C07-BF72-F77EF25B3F51}.RelWithDebInfo|x64.ActiveCfg = RelWithDebInfo|x64 + {7D13F375-C1F5-3C07-BF72-F77EF25B3F51}.RelWithDebInfo|x64.Build.0 = RelWithDebInfo|x64 + {DE646657-AE91-38F9-9B6B-2D833FD009EE}.Debug|x64.ActiveCfg = Debug|x64 + {DE646657-AE91-38F9-9B6B-2D833FD009EE}.Debug|x64.Build.0 = Debug|x64 + {DE646657-AE91-38F9-9B6B-2D833FD009EE}.DebugSanitizer|x64.ActiveCfg = Debug|x64 + {DE646657-AE91-38F9-9B6B-2D833FD009EE}.MinSizeRel|x64.ActiveCfg = MinSizeRel|x64 + {DE646657-AE91-38F9-9B6B-2D833FD009EE}.MinSizeRel|x64.Build.0 = MinSizeRel|x64 + {DE646657-AE91-38F9-9B6B-2D833FD009EE}.Release|x64.ActiveCfg = Release|x64 + {DE646657-AE91-38F9-9B6B-2D833FD009EE}.Release|x64.Build.0 = Release|x64 + {DE646657-AE91-38F9-9B6B-2D833FD009EE}.RelWithDebInfo|x64.ActiveCfg = RelWithDebInfo|x64 + {DE646657-AE91-38F9-9B6B-2D833FD009EE}.RelWithDebInfo|x64.Build.0 = RelWithDebInfo|x64 + {B535C94C-FE1B-32B0-A61C-A4A79928BED2}.Debug|x64.ActiveCfg = Debug|x64 + {B535C94C-FE1B-32B0-A61C-A4A79928BED2}.Debug|x64.Build.0 = Debug|x64 + {B535C94C-FE1B-32B0-A61C-A4A79928BED2}.DebugSanitizer|x64.ActiveCfg = Debug|x64 + {B535C94C-FE1B-32B0-A61C-A4A79928BED2}.MinSizeRel|x64.ActiveCfg = MinSizeRel|x64 + {B535C94C-FE1B-32B0-A61C-A4A79928BED2}.MinSizeRel|x64.Build.0 = MinSizeRel|x64 + {B535C94C-FE1B-32B0-A61C-A4A79928BED2}.Release|x64.ActiveCfg = Release|x64 + {B535C94C-FE1B-32B0-A61C-A4A79928BED2}.Release|x64.Build.0 = Release|x64 + {B535C94C-FE1B-32B0-A61C-A4A79928BED2}.RelWithDebInfo|x64.ActiveCfg = RelWithDebInfo|x64 + {B535C94C-FE1B-32B0-A61C-A4A79928BED2}.RelWithDebInfo|x64.Build.0 = RelWithDebInfo|x64 + {3420FBB5-4E52-3DEF-93BE-8ABE8919846F}.Debug|x64.ActiveCfg = Debug|x64 + {3420FBB5-4E52-3DEF-93BE-8ABE8919846F}.Debug|x64.Build.0 = Debug|x64 + {3420FBB5-4E52-3DEF-93BE-8ABE8919846F}.DebugSanitizer|x64.ActiveCfg = Debug|x64 + {3420FBB5-4E52-3DEF-93BE-8ABE8919846F}.MinSizeRel|x64.ActiveCfg = MinSizeRel|x64 + {3420FBB5-4E52-3DEF-93BE-8ABE8919846F}.MinSizeRel|x64.Build.0 = MinSizeRel|x64 + {3420FBB5-4E52-3DEF-93BE-8ABE8919846F}.Release|x64.ActiveCfg = Release|x64 + {3420FBB5-4E52-3DEF-93BE-8ABE8919846F}.Release|x64.Build.0 = Release|x64 + {3420FBB5-4E52-3DEF-93BE-8ABE8919846F}.RelWithDebInfo|x64.ActiveCfg = RelWithDebInfo|x64 + {3420FBB5-4E52-3DEF-93BE-8ABE8919846F}.RelWithDebInfo|x64.Build.0 = RelWithDebInfo|x64 + {187AAACC-7ADF-305B-9D70-DAEF86E2F5EC}.Debug|x64.ActiveCfg = Debug|x64 + {187AAACC-7ADF-305B-9D70-DAEF86E2F5EC}.Debug|x64.Build.0 = Debug|x64 + {187AAACC-7ADF-305B-9D70-DAEF86E2F5EC}.DebugSanitizer|x64.ActiveCfg = Debug|x64 + {187AAACC-7ADF-305B-9D70-DAEF86E2F5EC}.MinSizeRel|x64.ActiveCfg = MinSizeRel|x64 + {187AAACC-7ADF-305B-9D70-DAEF86E2F5EC}.MinSizeRel|x64.Build.0 = MinSizeRel|x64 + {187AAACC-7ADF-305B-9D70-DAEF86E2F5EC}.Release|x64.ActiveCfg = Release|x64 + {187AAACC-7ADF-305B-9D70-DAEF86E2F5EC}.Release|x64.Build.0 = Release|x64 + {187AAACC-7ADF-305B-9D70-DAEF86E2F5EC}.RelWithDebInfo|x64.ActiveCfg = RelWithDebInfo|x64 + {187AAACC-7ADF-305B-9D70-DAEF86E2F5EC}.RelWithDebInfo|x64.Build.0 = RelWithDebInfo|x64 + {E369DAEB-09D6-3832-A248-730973C4FD6E}.Debug|x64.ActiveCfg = Debug|x64 + {E369DAEB-09D6-3832-A248-730973C4FD6E}.Debug|x64.Build.0 = Debug|x64 + {E369DAEB-09D6-3832-A248-730973C4FD6E}.DebugSanitizer|x64.ActiveCfg = Debug|x64 + {E369DAEB-09D6-3832-A248-730973C4FD6E}.MinSizeRel|x64.ActiveCfg = MinSizeRel|x64 + {E369DAEB-09D6-3832-A248-730973C4FD6E}.MinSizeRel|x64.Build.0 = MinSizeRel|x64 + {E369DAEB-09D6-3832-A248-730973C4FD6E}.Release|x64.ActiveCfg = Release|x64 + {E369DAEB-09D6-3832-A248-730973C4FD6E}.Release|x64.Build.0 = Release|x64 + {E369DAEB-09D6-3832-A248-730973C4FD6E}.RelWithDebInfo|x64.ActiveCfg = RelWithDebInfo|x64 + {E369DAEB-09D6-3832-A248-730973C4FD6E}.RelWithDebInfo|x64.Build.0 = RelWithDebInfo|x64 + {1FEECCD4-4337-359A-A6B2-DABEFE8BF4EF}.Debug|x64.ActiveCfg = Debug|x64 + {1FEECCD4-4337-359A-A6B2-DABEFE8BF4EF}.Debug|x64.Build.0 = Debug|x64 + {1FEECCD4-4337-359A-A6B2-DABEFE8BF4EF}.DebugSanitizer|x64.ActiveCfg = Debug|x64 + {1FEECCD4-4337-359A-A6B2-DABEFE8BF4EF}.MinSizeRel|x64.ActiveCfg = MinSizeRel|x64 + {1FEECCD4-4337-359A-A6B2-DABEFE8BF4EF}.MinSizeRel|x64.Build.0 = MinSizeRel|x64 + {1FEECCD4-4337-359A-A6B2-DABEFE8BF4EF}.Release|x64.ActiveCfg = Release|x64 + {1FEECCD4-4337-359A-A6B2-DABEFE8BF4EF}.Release|x64.Build.0 = Release|x64 + {1FEECCD4-4337-359A-A6B2-DABEFE8BF4EF}.RelWithDebInfo|x64.ActiveCfg = RelWithDebInfo|x64 + {1FEECCD4-4337-359A-A6B2-DABEFE8BF4EF}.RelWithDebInfo|x64.Build.0 = RelWithDebInfo|x64 + {933E2E87-96E8-3084-8591-ADECE80258FC}.Debug|x64.ActiveCfg = Debug|x64 + {933E2E87-96E8-3084-8591-ADECE80258FC}.Debug|x64.Build.0 = Debug|x64 + {933E2E87-96E8-3084-8591-ADECE80258FC}.DebugSanitizer|x64.ActiveCfg = Debug|x64 + {933E2E87-96E8-3084-8591-ADECE80258FC}.MinSizeRel|x64.ActiveCfg = MinSizeRel|x64 + {933E2E87-96E8-3084-8591-ADECE80258FC}.MinSizeRel|x64.Build.0 = MinSizeRel|x64 + {933E2E87-96E8-3084-8591-ADECE80258FC}.Release|x64.ActiveCfg = Release|x64 + {933E2E87-96E8-3084-8591-ADECE80258FC}.Release|x64.Build.0 = Release|x64 + {933E2E87-96E8-3084-8591-ADECE80258FC}.RelWithDebInfo|x64.ActiveCfg = RelWithDebInfo|x64 + {933E2E87-96E8-3084-8591-ADECE80258FC}.RelWithDebInfo|x64.Build.0 = RelWithDebInfo|x64 + {9D387947-059F-3E10-A3CB-A5DF9C5F0E4E}.Debug|x64.ActiveCfg = Debug|x64 + {9D387947-059F-3E10-A3CB-A5DF9C5F0E4E}.Debug|x64.Build.0 = Debug|x64 + {9D387947-059F-3E10-A3CB-A5DF9C5F0E4E}.DebugSanitizer|x64.ActiveCfg = Debug|x64 + {9D387947-059F-3E10-A3CB-A5DF9C5F0E4E}.MinSizeRel|x64.ActiveCfg = MinSizeRel|x64 + {9D387947-059F-3E10-A3CB-A5DF9C5F0E4E}.MinSizeRel|x64.Build.0 = MinSizeRel|x64 + {9D387947-059F-3E10-A3CB-A5DF9C5F0E4E}.Release|x64.ActiveCfg = Release|x64 + {9D387947-059F-3E10-A3CB-A5DF9C5F0E4E}.Release|x64.Build.0 = Release|x64 + {9D387947-059F-3E10-A3CB-A5DF9C5F0E4E}.RelWithDebInfo|x64.ActiveCfg = RelWithDebInfo|x64 + {9D387947-059F-3E10-A3CB-A5DF9C5F0E4E}.RelWithDebInfo|x64.Build.0 = RelWithDebInfo|x64 + {488CB4F5-68AA-37FC-A6AD-22FBA710025D}.Debug|x64.ActiveCfg = Debug|x64 + {488CB4F5-68AA-37FC-A6AD-22FBA710025D}.Debug|x64.Build.0 = Debug|x64 + {488CB4F5-68AA-37FC-A6AD-22FBA710025D}.DebugSanitizer|x64.ActiveCfg = Debug|x64 + {488CB4F5-68AA-37FC-A6AD-22FBA710025D}.MinSizeRel|x64.ActiveCfg = MinSizeRel|x64 + {488CB4F5-68AA-37FC-A6AD-22FBA710025D}.MinSizeRel|x64.Build.0 = MinSizeRel|x64 + {488CB4F5-68AA-37FC-A6AD-22FBA710025D}.Release|x64.ActiveCfg = Release|x64 + {488CB4F5-68AA-37FC-A6AD-22FBA710025D}.Release|x64.Build.0 = Release|x64 + {488CB4F5-68AA-37FC-A6AD-22FBA710025D}.RelWithDebInfo|x64.ActiveCfg = RelWithDebInfo|x64 + {488CB4F5-68AA-37FC-A6AD-22FBA710025D}.RelWithDebInfo|x64.Build.0 = RelWithDebInfo|x64 + {87063A3D-11CE-3929-B10F-9A61474AFC2C}.Debug|x64.ActiveCfg = Debug|x64 + {87063A3D-11CE-3929-B10F-9A61474AFC2C}.Debug|x64.Build.0 = Debug|x64 + {87063A3D-11CE-3929-B10F-9A61474AFC2C}.DebugSanitizer|x64.ActiveCfg = Debug|x64 + {87063A3D-11CE-3929-B10F-9A61474AFC2C}.MinSizeRel|x64.ActiveCfg = MinSizeRel|x64 + {87063A3D-11CE-3929-B10F-9A61474AFC2C}.MinSizeRel|x64.Build.0 = MinSizeRel|x64 + {87063A3D-11CE-3929-B10F-9A61474AFC2C}.Release|x64.ActiveCfg = Release|x64 + {87063A3D-11CE-3929-B10F-9A61474AFC2C}.Release|x64.Build.0 = Release|x64 + {87063A3D-11CE-3929-B10F-9A61474AFC2C}.RelWithDebInfo|x64.ActiveCfg = RelWithDebInfo|x64 + {87063A3D-11CE-3929-B10F-9A61474AFC2C}.RelWithDebInfo|x64.Build.0 = RelWithDebInfo|x64 + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + SolutionGuid = {1463C492-18F8-3133-BAFA-BD3041AAE9A2} + EndGlobalSection +EndGlobal diff --git a/out64/java/guidojni.sln b/out64/java/guidojni.sln new file mode 100644 index 000000000..0c8b06586 --- /dev/null +++ b/out64/java/guidojni.sln @@ -0,0 +1,90 @@ +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio 16 +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "ALL_BUILD", "ALL_BUILD.vcxproj", "{CB4FF08D-51F5-3C5C-BC94-216A91D8310F}" + ProjectSection(ProjectDependencies) = postProject + {8BFAE807-64DC-3284-B201-AB98B48C6A6E} = {8BFAE807-64DC-3284-B201-AB98B48C6A6E} + {B52B7080-D261-3E22-A953-2D9127634CBF} = {B52B7080-D261-3E22-A953-2D9127634CBF} + EndProjectSection +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "GUIDOEngine", "..\\GUIDOEngine.vcxproj", "{99D28C74-40FD-34B3-A8B6-349DB67B4367}" + ProjectSection(ProjectDependencies) = postProject + {8BFAE807-64DC-3284-B201-AB98B48C6A6E} = {8BFAE807-64DC-3284-B201-AB98B48C6A6E} + EndProjectSection +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "INSTALL", "INSTALL.vcxproj", "{65EFCBE5-1287-390E-B32E-6B6771AA4F69}" + ProjectSection(ProjectDependencies) = postProject + {CB4FF08D-51F5-3C5C-BC94-216A91D8310F} = {CB4FF08D-51F5-3C5C-BC94-216A91D8310F} + {8BFAE807-64DC-3284-B201-AB98B48C6A6E} = {8BFAE807-64DC-3284-B201-AB98B48C6A6E} + EndProjectSection +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "PACKAGE", "PACKAGE.vcxproj", "{590B3DB6-C3C4-3AC7-817B-041D44374E1A}" + ProjectSection(ProjectDependencies) = postProject + {CB4FF08D-51F5-3C5C-BC94-216A91D8310F} = {CB4FF08D-51F5-3C5C-BC94-216A91D8310F} + {8BFAE807-64DC-3284-B201-AB98B48C6A6E} = {8BFAE807-64DC-3284-B201-AB98B48C6A6E} + EndProjectSection +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "ZERO_CHECK", "..\\ZERO_CHECK.vcxproj", "{8BFAE807-64DC-3284-B201-AB98B48C6A6E}" + ProjectSection(ProjectDependencies) = postProject + EndProjectSection +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "jniGUIDOEngine", "jniGUIDOEngine.vcxproj", "{B52B7080-D261-3E22-A953-2D9127634CBF}" + ProjectSection(ProjectDependencies) = postProject + {99D28C74-40FD-34B3-A8B6-349DB67B4367} = {99D28C74-40FD-34B3-A8B6-349DB67B4367} + {8BFAE807-64DC-3284-B201-AB98B48C6A6E} = {8BFAE807-64DC-3284-B201-AB98B48C6A6E} + EndProjectSection +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|x64 = Debug|x64 + Release|x64 = Release|x64 + MinSizeRel|x64 = MinSizeRel|x64 + RelWithDebInfo|x64 = RelWithDebInfo|x64 + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {CB4FF08D-51F5-3C5C-BC94-216A91D8310F}.Debug|x64.ActiveCfg = Debug|x64 + {CB4FF08D-51F5-3C5C-BC94-216A91D8310F}.Debug|x64.Build.0 = Debug|x64 + {CB4FF08D-51F5-3C5C-BC94-216A91D8310F}.Release|x64.ActiveCfg = Release|x64 + {CB4FF08D-51F5-3C5C-BC94-216A91D8310F}.Release|x64.Build.0 = Release|x64 + {CB4FF08D-51F5-3C5C-BC94-216A91D8310F}.MinSizeRel|x64.ActiveCfg = MinSizeRel|x64 + {CB4FF08D-51F5-3C5C-BC94-216A91D8310F}.MinSizeRel|x64.Build.0 = MinSizeRel|x64 + {CB4FF08D-51F5-3C5C-BC94-216A91D8310F}.RelWithDebInfo|x64.ActiveCfg = RelWithDebInfo|x64 + {CB4FF08D-51F5-3C5C-BC94-216A91D8310F}.RelWithDebInfo|x64.Build.0 = RelWithDebInfo|x64 + {99D28C74-40FD-34B3-A8B6-349DB67B4367}.Debug|x64.ActiveCfg = Debug|x64 + {99D28C74-40FD-34B3-A8B6-349DB67B4367}.Debug|x64.Build.0 = Debug|x64 + {99D28C74-40FD-34B3-A8B6-349DB67B4367}.Release|x64.ActiveCfg = Release|x64 + {99D28C74-40FD-34B3-A8B6-349DB67B4367}.Release|x64.Build.0 = Release|x64 + {99D28C74-40FD-34B3-A8B6-349DB67B4367}.MinSizeRel|x64.ActiveCfg = MinSizeRel|x64 + {99D28C74-40FD-34B3-A8B6-349DB67B4367}.MinSizeRel|x64.Build.0 = MinSizeRel|x64 + {99D28C74-40FD-34B3-A8B6-349DB67B4367}.RelWithDebInfo|x64.ActiveCfg = RelWithDebInfo|x64 + {99D28C74-40FD-34B3-A8B6-349DB67B4367}.RelWithDebInfo|x64.Build.0 = RelWithDebInfo|x64 + {65EFCBE5-1287-390E-B32E-6B6771AA4F69}.Debug|x64.ActiveCfg = Debug|x64 + {65EFCBE5-1287-390E-B32E-6B6771AA4F69}.Release|x64.ActiveCfg = Release|x64 + {65EFCBE5-1287-390E-B32E-6B6771AA4F69}.MinSizeRel|x64.ActiveCfg = MinSizeRel|x64 + {65EFCBE5-1287-390E-B32E-6B6771AA4F69}.RelWithDebInfo|x64.ActiveCfg = RelWithDebInfo|x64 + {590B3DB6-C3C4-3AC7-817B-041D44374E1A}.Debug|x64.ActiveCfg = Debug|x64 + {590B3DB6-C3C4-3AC7-817B-041D44374E1A}.Release|x64.ActiveCfg = Release|x64 + {590B3DB6-C3C4-3AC7-817B-041D44374E1A}.MinSizeRel|x64.ActiveCfg = MinSizeRel|x64 + {590B3DB6-C3C4-3AC7-817B-041D44374E1A}.RelWithDebInfo|x64.ActiveCfg = RelWithDebInfo|x64 + {8BFAE807-64DC-3284-B201-AB98B48C6A6E}.Debug|x64.ActiveCfg = Debug|x64 + {8BFAE807-64DC-3284-B201-AB98B48C6A6E}.Debug|x64.Build.0 = Debug|x64 + {8BFAE807-64DC-3284-B201-AB98B48C6A6E}.Release|x64.ActiveCfg = Release|x64 + {8BFAE807-64DC-3284-B201-AB98B48C6A6E}.Release|x64.Build.0 = Release|x64 + {8BFAE807-64DC-3284-B201-AB98B48C6A6E}.MinSizeRel|x64.ActiveCfg = MinSizeRel|x64 + {8BFAE807-64DC-3284-B201-AB98B48C6A6E}.MinSizeRel|x64.Build.0 = MinSizeRel|x64 + {8BFAE807-64DC-3284-B201-AB98B48C6A6E}.RelWithDebInfo|x64.ActiveCfg = RelWithDebInfo|x64 + {8BFAE807-64DC-3284-B201-AB98B48C6A6E}.RelWithDebInfo|x64.Build.0 = RelWithDebInfo|x64 + {B52B7080-D261-3E22-A953-2D9127634CBF}.Debug|x64.ActiveCfg = Debug|x64 + {B52B7080-D261-3E22-A953-2D9127634CBF}.Debug|x64.Build.0 = Debug|x64 + {B52B7080-D261-3E22-A953-2D9127634CBF}.Release|x64.ActiveCfg = Release|x64 + {B52B7080-D261-3E22-A953-2D9127634CBF}.Release|x64.Build.0 = Release|x64 + {B52B7080-D261-3E22-A953-2D9127634CBF}.MinSizeRel|x64.ActiveCfg = MinSizeRel|x64 + {B52B7080-D261-3E22-A953-2D9127634CBF}.MinSizeRel|x64.Build.0 = MinSizeRel|x64 + {B52B7080-D261-3E22-A953-2D9127634CBF}.RelWithDebInfo|x64.ActiveCfg = RelWithDebInfo|x64 + {B52B7080-D261-3E22-A953-2D9127634CBF}.RelWithDebInfo|x64.Build.0 = RelWithDebInfo|x64 + EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + SolutionGuid = {BD89636C-9A51-3E9C-A806-E2B8F8168F8D} + EndGlobalSection + GlobalSection(ExtensibilityAddIns) = postSolution + EndGlobalSection +EndGlobal diff --git a/out64/tools/guidotools.sln b/out64/tools/guidotools.sln new file mode 100644 index 000000000..d5ed74b5f --- /dev/null +++ b/out64/tools/guidotools.sln @@ -0,0 +1,376 @@ + +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio Version 16 +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "ALL_BUILD", "ALL_BUILD.vcxproj", "{CB4FF08D-51F5-3C5C-BC94-216A91D8310F}" + ProjectSection(ProjectDependencies) = postProject + {8BFAE807-64DC-3284-B201-AB98B48C6A6E} = {8BFAE807-64DC-3284-B201-AB98B48C6A6E} + {3B0F1F0E-02E3-3A13-9626-BCDE8C88F3DC} = {3B0F1F0E-02E3-3A13-9626-BCDE8C88F3DC} + {34BA13F7-2AF7-3B91-BF3E-571FCB761413} = {34BA13F7-2AF7-3B91-BF3E-571FCB761413} + {07C2CBD0-7635-3551-86D4-C304478668D8} = {07C2CBD0-7635-3551-86D4-C304478668D8} + {2B7D0965-AE05-39EF-BF02-167AB99AB8B7} = {2B7D0965-AE05-39EF-BF02-167AB99AB8B7} + {AF362486-4E69-3E42-B614-49EF178645EF} = {AF362486-4E69-3E42-B614-49EF178645EF} + {7EE89FEA-3684-315B-8DBD-48DA12484060} = {7EE89FEA-3684-315B-8DBD-48DA12484060} + {78CE2433-7739-3C58-9B30-57AD9DED85D1} = {78CE2433-7739-3C58-9B30-57AD9DED85D1} + {2C8047EA-5030-3491-9170-54E3001426CB} = {2C8047EA-5030-3491-9170-54E3001426CB} + {66BB990C-DC10-34F4-9291-26FDE1674897} = {66BB990C-DC10-34F4-9291-26FDE1674897} + {7D13F375-C1F5-3C07-BF72-F77EF25B3F51} = {7D13F375-C1F5-3C07-BF72-F77EF25B3F51} + {DE646657-AE91-38F9-9B6B-2D833FD009EE} = {DE646657-AE91-38F9-9B6B-2D833FD009EE} + {B535C94C-FE1B-32B0-A61C-A4A79928BED2} = {B535C94C-FE1B-32B0-A61C-A4A79928BED2} + {3420FBB5-4E52-3DEF-93BE-8ABE8919846F} = {3420FBB5-4E52-3DEF-93BE-8ABE8919846F} + {187AAACC-7ADF-305B-9D70-DAEF86E2F5EC} = {187AAACC-7ADF-305B-9D70-DAEF86E2F5EC} + {E369DAEB-09D6-3832-A248-730973C4FD6E} = {E369DAEB-09D6-3832-A248-730973C4FD6E} + {1FEECCD4-4337-359A-A6B2-DABEFE8BF4EF} = {1FEECCD4-4337-359A-A6B2-DABEFE8BF4EF} + {933E2E87-96E8-3084-8591-ADECE80258FC} = {933E2E87-96E8-3084-8591-ADECE80258FC} + {9D387947-059F-3E10-A3CB-A5DF9C5F0E4E} = {9D387947-059F-3E10-A3CB-A5DF9C5F0E4E} + {488CB4F5-68AA-37FC-A6AD-22FBA710025D} = {488CB4F5-68AA-37FC-A6AD-22FBA710025D} + {87063A3D-11CE-3929-B10F-9A61474AFC2C} = {87063A3D-11CE-3929-B10F-9A61474AFC2C} + EndProjectSection +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "GUIDOEngine", "..\\GUIDOEngine.vcxproj", "{99D28C74-40FD-34B3-A8B6-349DB67B4367}" + ProjectSection(ProjectDependencies) = postProject + {8BFAE807-64DC-3284-B201-AB98B48C6A6E} = {8BFAE807-64DC-3284-B201-AB98B48C6A6E} + EndProjectSection +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "INSTALL", "INSTALL.vcxproj", "{65EFCBE5-1287-390E-B32E-6B6771AA4F69}" + ProjectSection(ProjectDependencies) = postProject + {CB4FF08D-51F5-3C5C-BC94-216A91D8310F} = {CB4FF08D-51F5-3C5C-BC94-216A91D8310F} + {8BFAE807-64DC-3284-B201-AB98B48C6A6E} = {8BFAE807-64DC-3284-B201-AB98B48C6A6E} + EndProjectSection +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "PACKAGE", "PACKAGE.vcxproj", "{590B3DB6-C3C4-3AC7-817B-041D44374E1A}" + ProjectSection(ProjectDependencies) = postProject + {CB4FF08D-51F5-3C5C-BC94-216A91D8310F} = {CB4FF08D-51F5-3C5C-BC94-216A91D8310F} + {8BFAE807-64DC-3284-B201-AB98B48C6A6E} = {8BFAE807-64DC-3284-B201-AB98B48C6A6E} + EndProjectSection +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "ZERO_CHECK", "..\\ZERO_CHECK.vcxproj", "{8BFAE807-64DC-3284-B201-AB98B48C6A6E}" + ProjectSection(ProjectDependencies) = postProject + EndProjectSection +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "guido2abstract", "guido2abstract.vcxproj", "{3B0F1F0E-02E3-3A13-9626-BCDE8C88F3DC}" + ProjectSection(ProjectDependencies) = postProject + {99D28C74-40FD-34B3-A8B6-349DB67B4367} = {99D28C74-40FD-34B3-A8B6-349DB67B4367} + {8BFAE807-64DC-3284-B201-AB98B48C6A6E} = {8BFAE807-64DC-3284-B201-AB98B48C6A6E} + EndProjectSection +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "guido2midi", "guido2midi.vcxproj", "{34BA13F7-2AF7-3B91-BF3E-571FCB761413}" + ProjectSection(ProjectDependencies) = postProject + {99D28C74-40FD-34B3-A8B6-349DB67B4367} = {99D28C74-40FD-34B3-A8B6-349DB67B4367} + {8BFAE807-64DC-3284-B201-AB98B48C6A6E} = {8BFAE807-64DC-3284-B201-AB98B48C6A6E} + EndProjectSection +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "guido2proll", "guido2proll.vcxproj", "{07C2CBD0-7635-3551-86D4-C304478668D8}" + ProjectSection(ProjectDependencies) = postProject + {99D28C74-40FD-34B3-A8B6-349DB67B4367} = {99D28C74-40FD-34B3-A8B6-349DB67B4367} + {8BFAE807-64DC-3284-B201-AB98B48C6A6E} = {8BFAE807-64DC-3284-B201-AB98B48C6A6E} + EndProjectSection +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "guido2rproportional", "guido2rproportional.vcxproj", "{2B7D0965-AE05-39EF-BF02-167AB99AB8B7}" + ProjectSection(ProjectDependencies) = postProject + {99D28C74-40FD-34B3-A8B6-349DB67B4367} = {99D28C74-40FD-34B3-A8B6-349DB67B4367} + {8BFAE807-64DC-3284-B201-AB98B48C6A6E} = {8BFAE807-64DC-3284-B201-AB98B48C6A6E} + EndProjectSection +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "guido2svg", "guido2svg.vcxproj", "{AF362486-4E69-3E42-B614-49EF178645EF}" + ProjectSection(ProjectDependencies) = postProject + {99D28C74-40FD-34B3-A8B6-349DB67B4367} = {99D28C74-40FD-34B3-A8B6-349DB67B4367} + {8BFAE807-64DC-3284-B201-AB98B48C6A6E} = {8BFAE807-64DC-3284-B201-AB98B48C6A6E} + EndProjectSection +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "guido2svgmap", "guido2svgmap.vcxproj", "{7EE89FEA-3684-315B-8DBD-48DA12484060}" + ProjectSection(ProjectDependencies) = postProject + {99D28C74-40FD-34B3-A8B6-349DB67B4367} = {99D28C74-40FD-34B3-A8B6-349DB67B4367} + {8BFAE807-64DC-3284-B201-AB98B48C6A6E} = {8BFAE807-64DC-3284-B201-AB98B48C6A6E} + EndProjectSection +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "guidoar2gr", "guidoar2gr.vcxproj", "{78CE2433-7739-3C58-9B30-57AD9DED85D1}" + ProjectSection(ProjectDependencies) = postProject + {99D28C74-40FD-34B3-A8B6-349DB67B4367} = {99D28C74-40FD-34B3-A8B6-349DB67B4367} + {8BFAE807-64DC-3284-B201-AB98B48C6A6E} = {8BFAE807-64DC-3284-B201-AB98B48C6A6E} + EndProjectSection +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "guidodraw", "guidodraw.vcxproj", "{2C8047EA-5030-3491-9170-54E3001426CB}" + ProjectSection(ProjectDependencies) = postProject + {99D28C74-40FD-34B3-A8B6-349DB67B4367} = {99D28C74-40FD-34B3-A8B6-349DB67B4367} + {8BFAE807-64DC-3284-B201-AB98B48C6A6E} = {8BFAE807-64DC-3284-B201-AB98B48C6A6E} + EndProjectSection +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "guidogetmeters", "guidogetmeters.vcxproj", "{66BB990C-DC10-34F4-9291-26FDE1674897}" + ProjectSection(ProjectDependencies) = postProject + {99D28C74-40FD-34B3-A8B6-349DB67B4367} = {99D28C74-40FD-34B3-A8B6-349DB67B4367} + {8BFAE807-64DC-3284-B201-AB98B48C6A6E} = {8BFAE807-64DC-3284-B201-AB98B48C6A6E} + EndProjectSection +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "guidogetpagecount", "guidogetpagecount.vcxproj", "{7D13F375-C1F5-3C07-BF72-F77EF25B3F51}" + ProjectSection(ProjectDependencies) = postProject + {99D28C74-40FD-34B3-A8B6-349DB67B4367} = {99D28C74-40FD-34B3-A8B6-349DB67B4367} + {8BFAE807-64DC-3284-B201-AB98B48C6A6E} = {8BFAE807-64DC-3284-B201-AB98B48C6A6E} + EndProjectSection +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "guidogetpagemap", "guidogetpagemap.vcxproj", "{DE646657-AE91-38F9-9B6B-2D833FD009EE}" + ProjectSection(ProjectDependencies) = postProject + {99D28C74-40FD-34B3-A8B6-349DB67B4367} = {99D28C74-40FD-34B3-A8B6-349DB67B4367} + {8BFAE807-64DC-3284-B201-AB98B48C6A6E} = {8BFAE807-64DC-3284-B201-AB98B48C6A6E} + EndProjectSection +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "guidogetstaffmap", "guidogetstaffmap.vcxproj", "{B535C94C-FE1B-32B0-A61C-A4A79928BED2}" + ProjectSection(ProjectDependencies) = postProject + {99D28C74-40FD-34B3-A8B6-349DB67B4367} = {99D28C74-40FD-34B3-A8B6-349DB67B4367} + {8BFAE807-64DC-3284-B201-AB98B48C6A6E} = {8BFAE807-64DC-3284-B201-AB98B48C6A6E} + EndProjectSection +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "guidogetsystemmap", "guidogetsystemmap.vcxproj", "{3420FBB5-4E52-3DEF-93BE-8ABE8919846F}" + ProjectSection(ProjectDependencies) = postProject + {99D28C74-40FD-34B3-A8B6-349DB67B4367} = {99D28C74-40FD-34B3-A8B6-349DB67B4367} + {8BFAE807-64DC-3284-B201-AB98B48C6A6E} = {8BFAE807-64DC-3284-B201-AB98B48C6A6E} + EndProjectSection +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "guidogettempi", "guidogettempi.vcxproj", "{187AAACC-7ADF-305B-9D70-DAEF86E2F5EC}" + ProjectSection(ProjectDependencies) = postProject + {99D28C74-40FD-34B3-A8B6-349DB67B4367} = {99D28C74-40FD-34B3-A8B6-349DB67B4367} + {8BFAE807-64DC-3284-B201-AB98B48C6A6E} = {8BFAE807-64DC-3284-B201-AB98B48C6A6E} + EndProjectSection +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "guidogettimemap", "guidogettimemap.vcxproj", "{E369DAEB-09D6-3832-A248-730973C4FD6E}" + ProjectSection(ProjectDependencies) = postProject + {99D28C74-40FD-34B3-A8B6-349DB67B4367} = {99D28C74-40FD-34B3-A8B6-349DB67B4367} + {8BFAE807-64DC-3284-B201-AB98B48C6A6E} = {8BFAE807-64DC-3284-B201-AB98B48C6A6E} + EndProjectSection +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "guidogetversion", "guidogetversion.vcxproj", "{1FEECCD4-4337-359A-A6B2-DABEFE8BF4EF}" + ProjectSection(ProjectDependencies) = postProject + {99D28C74-40FD-34B3-A8B6-349DB67B4367} = {99D28C74-40FD-34B3-A8B6-349DB67B4367} + {8BFAE807-64DC-3284-B201-AB98B48C6A6E} = {8BFAE807-64DC-3284-B201-AB98B48C6A6E} + EndProjectSection +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "guidogetvoicecount", "guidogetvoicecount.vcxproj", "{933E2E87-96E8-3084-8591-ADECE80258FC}" + ProjectSection(ProjectDependencies) = postProject + {99D28C74-40FD-34B3-A8B6-349DB67B4367} = {99D28C74-40FD-34B3-A8B6-349DB67B4367} + {8BFAE807-64DC-3284-B201-AB98B48C6A6E} = {8BFAE807-64DC-3284-B201-AB98B48C6A6E} + EndProjectSection +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "guidogetvoicemap", "guidogetvoicemap.vcxproj", "{9D387947-059F-3E10-A3CB-A5DF9C5F0E4E}" + ProjectSection(ProjectDependencies) = postProject + {99D28C74-40FD-34B3-A8B6-349DB67B4367} = {99D28C74-40FD-34B3-A8B6-349DB67B4367} + {8BFAE807-64DC-3284-B201-AB98B48C6A6E} = {8BFAE807-64DC-3284-B201-AB98B48C6A6E} + EndProjectSection +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "guidoparse", "guidoparse.vcxproj", "{488CB4F5-68AA-37FC-A6AD-22FBA710025D}" + ProjectSection(ProjectDependencies) = postProject + {99D28C74-40FD-34B3-A8B6-349DB67B4367} = {99D28C74-40FD-34B3-A8B6-349DB67B4367} + {8BFAE807-64DC-3284-B201-AB98B48C6A6E} = {8BFAE807-64DC-3284-B201-AB98B48C6A6E} + EndProjectSection +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "midi2proll", "midi2proll.vcxproj", "{87063A3D-11CE-3929-B10F-9A61474AFC2C}" + ProjectSection(ProjectDependencies) = postProject + {99D28C74-40FD-34B3-A8B6-349DB67B4367} = {99D28C74-40FD-34B3-A8B6-349DB67B4367} + {8BFAE807-64DC-3284-B201-AB98B48C6A6E} = {8BFAE807-64DC-3284-B201-AB98B48C6A6E} + EndProjectSection +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|x64 = Debug|x64 + Release|x64 = Release|x64 + MinSizeRel|x64 = MinSizeRel|x64 + RelWithDebInfo|x64 = RelWithDebInfo|x64 + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {CB4FF08D-51F5-3C5C-BC94-216A91D8310F}.Debug|x64.ActiveCfg = Debug|x64 + {CB4FF08D-51F5-3C5C-BC94-216A91D8310F}.Debug|x64.Build.0 = Debug|x64 + {CB4FF08D-51F5-3C5C-BC94-216A91D8310F}.Release|x64.ActiveCfg = Release|x64 + {CB4FF08D-51F5-3C5C-BC94-216A91D8310F}.Release|x64.Build.0 = Release|x64 + {CB4FF08D-51F5-3C5C-BC94-216A91D8310F}.MinSizeRel|x64.ActiveCfg = MinSizeRel|x64 + {CB4FF08D-51F5-3C5C-BC94-216A91D8310F}.MinSizeRel|x64.Build.0 = MinSizeRel|x64 + {CB4FF08D-51F5-3C5C-BC94-216A91D8310F}.RelWithDebInfo|x64.ActiveCfg = RelWithDebInfo|x64 + {CB4FF08D-51F5-3C5C-BC94-216A91D8310F}.RelWithDebInfo|x64.Build.0 = RelWithDebInfo|x64 + {99D28C74-40FD-34B3-A8B6-349DB67B4367}.Debug|x64.ActiveCfg = Debug|x64 + {99D28C74-40FD-34B3-A8B6-349DB67B4367}.Debug|x64.Build.0 = Debug|x64 + {99D28C74-40FD-34B3-A8B6-349DB67B4367}.Release|x64.ActiveCfg = Release|x64 + {99D28C74-40FD-34B3-A8B6-349DB67B4367}.Release|x64.Build.0 = Release|x64 + {99D28C74-40FD-34B3-A8B6-349DB67B4367}.MinSizeRel|x64.ActiveCfg = MinSizeRel|x64 + {99D28C74-40FD-34B3-A8B6-349DB67B4367}.MinSizeRel|x64.Build.0 = MinSizeRel|x64 + {99D28C74-40FD-34B3-A8B6-349DB67B4367}.RelWithDebInfo|x64.ActiveCfg = RelWithDebInfo|x64 + {99D28C74-40FD-34B3-A8B6-349DB67B4367}.RelWithDebInfo|x64.Build.0 = RelWithDebInfo|x64 + {65EFCBE5-1287-390E-B32E-6B6771AA4F69}.Debug|x64.ActiveCfg = Debug|x64 + {65EFCBE5-1287-390E-B32E-6B6771AA4F69}.Release|x64.ActiveCfg = Release|x64 + {65EFCBE5-1287-390E-B32E-6B6771AA4F69}.MinSizeRel|x64.ActiveCfg = MinSizeRel|x64 + {65EFCBE5-1287-390E-B32E-6B6771AA4F69}.RelWithDebInfo|x64.ActiveCfg = RelWithDebInfo|x64 + {590B3DB6-C3C4-3AC7-817B-041D44374E1A}.Debug|x64.ActiveCfg = Debug|x64 + {590B3DB6-C3C4-3AC7-817B-041D44374E1A}.Release|x64.ActiveCfg = Release|x64 + {590B3DB6-C3C4-3AC7-817B-041D44374E1A}.MinSizeRel|x64.ActiveCfg = MinSizeRel|x64 + {590B3DB6-C3C4-3AC7-817B-041D44374E1A}.RelWithDebInfo|x64.ActiveCfg = RelWithDebInfo|x64 + {8BFAE807-64DC-3284-B201-AB98B48C6A6E}.Debug|x64.ActiveCfg = Debug|x64 + {8BFAE807-64DC-3284-B201-AB98B48C6A6E}.Debug|x64.Build.0 = Debug|x64 + {8BFAE807-64DC-3284-B201-AB98B48C6A6E}.Release|x64.ActiveCfg = Release|x64 + {8BFAE807-64DC-3284-B201-AB98B48C6A6E}.Release|x64.Build.0 = Release|x64 + {8BFAE807-64DC-3284-B201-AB98B48C6A6E}.MinSizeRel|x64.ActiveCfg = MinSizeRel|x64 + {8BFAE807-64DC-3284-B201-AB98B48C6A6E}.MinSizeRel|x64.Build.0 = MinSizeRel|x64 + {8BFAE807-64DC-3284-B201-AB98B48C6A6E}.RelWithDebInfo|x64.ActiveCfg = RelWithDebInfo|x64 + {8BFAE807-64DC-3284-B201-AB98B48C6A6E}.RelWithDebInfo|x64.Build.0 = RelWithDebInfo|x64 + {3B0F1F0E-02E3-3A13-9626-BCDE8C88F3DC}.Debug|x64.ActiveCfg = Debug|x64 + {3B0F1F0E-02E3-3A13-9626-BCDE8C88F3DC}.Debug|x64.Build.0 = Debug|x64 + {3B0F1F0E-02E3-3A13-9626-BCDE8C88F3DC}.Release|x64.ActiveCfg = Release|x64 + {3B0F1F0E-02E3-3A13-9626-BCDE8C88F3DC}.Release|x64.Build.0 = Release|x64 + {3B0F1F0E-02E3-3A13-9626-BCDE8C88F3DC}.MinSizeRel|x64.ActiveCfg = MinSizeRel|x64 + {3B0F1F0E-02E3-3A13-9626-BCDE8C88F3DC}.MinSizeRel|x64.Build.0 = MinSizeRel|x64 + {3B0F1F0E-02E3-3A13-9626-BCDE8C88F3DC}.RelWithDebInfo|x64.ActiveCfg = RelWithDebInfo|x64 + {3B0F1F0E-02E3-3A13-9626-BCDE8C88F3DC}.RelWithDebInfo|x64.Build.0 = RelWithDebInfo|x64 + {34BA13F7-2AF7-3B91-BF3E-571FCB761413}.Debug|x64.ActiveCfg = Debug|x64 + {34BA13F7-2AF7-3B91-BF3E-571FCB761413}.Debug|x64.Build.0 = Debug|x64 + {34BA13F7-2AF7-3B91-BF3E-571FCB761413}.Release|x64.ActiveCfg = Release|x64 + {34BA13F7-2AF7-3B91-BF3E-571FCB761413}.Release|x64.Build.0 = Release|x64 + {34BA13F7-2AF7-3B91-BF3E-571FCB761413}.MinSizeRel|x64.ActiveCfg = MinSizeRel|x64 + {34BA13F7-2AF7-3B91-BF3E-571FCB761413}.MinSizeRel|x64.Build.0 = MinSizeRel|x64 + {34BA13F7-2AF7-3B91-BF3E-571FCB761413}.RelWithDebInfo|x64.ActiveCfg = RelWithDebInfo|x64 + {34BA13F7-2AF7-3B91-BF3E-571FCB761413}.RelWithDebInfo|x64.Build.0 = RelWithDebInfo|x64 + {07C2CBD0-7635-3551-86D4-C304478668D8}.Debug|x64.ActiveCfg = Debug|x64 + {07C2CBD0-7635-3551-86D4-C304478668D8}.Debug|x64.Build.0 = Debug|x64 + {07C2CBD0-7635-3551-86D4-C304478668D8}.Release|x64.ActiveCfg = Release|x64 + {07C2CBD0-7635-3551-86D4-C304478668D8}.Release|x64.Build.0 = Release|x64 + {07C2CBD0-7635-3551-86D4-C304478668D8}.MinSizeRel|x64.ActiveCfg = MinSizeRel|x64 + {07C2CBD0-7635-3551-86D4-C304478668D8}.MinSizeRel|x64.Build.0 = MinSizeRel|x64 + {07C2CBD0-7635-3551-86D4-C304478668D8}.RelWithDebInfo|x64.ActiveCfg = RelWithDebInfo|x64 + {07C2CBD0-7635-3551-86D4-C304478668D8}.RelWithDebInfo|x64.Build.0 = RelWithDebInfo|x64 + {2B7D0965-AE05-39EF-BF02-167AB99AB8B7}.Debug|x64.ActiveCfg = Debug|x64 + {2B7D0965-AE05-39EF-BF02-167AB99AB8B7}.Debug|x64.Build.0 = Debug|x64 + {2B7D0965-AE05-39EF-BF02-167AB99AB8B7}.Release|x64.ActiveCfg = Release|x64 + {2B7D0965-AE05-39EF-BF02-167AB99AB8B7}.Release|x64.Build.0 = Release|x64 + {2B7D0965-AE05-39EF-BF02-167AB99AB8B7}.MinSizeRel|x64.ActiveCfg = MinSizeRel|x64 + {2B7D0965-AE05-39EF-BF02-167AB99AB8B7}.MinSizeRel|x64.Build.0 = MinSizeRel|x64 + {2B7D0965-AE05-39EF-BF02-167AB99AB8B7}.RelWithDebInfo|x64.ActiveCfg = RelWithDebInfo|x64 + {2B7D0965-AE05-39EF-BF02-167AB99AB8B7}.RelWithDebInfo|x64.Build.0 = RelWithDebInfo|x64 + {AF362486-4E69-3E42-B614-49EF178645EF}.Debug|x64.ActiveCfg = Debug|x64 + {AF362486-4E69-3E42-B614-49EF178645EF}.Debug|x64.Build.0 = Debug|x64 + {AF362486-4E69-3E42-B614-49EF178645EF}.Release|x64.ActiveCfg = Release|x64 + {AF362486-4E69-3E42-B614-49EF178645EF}.Release|x64.Build.0 = Release|x64 + {AF362486-4E69-3E42-B614-49EF178645EF}.MinSizeRel|x64.ActiveCfg = MinSizeRel|x64 + {AF362486-4E69-3E42-B614-49EF178645EF}.MinSizeRel|x64.Build.0 = MinSizeRel|x64 + {AF362486-4E69-3E42-B614-49EF178645EF}.RelWithDebInfo|x64.ActiveCfg = RelWithDebInfo|x64 + {AF362486-4E69-3E42-B614-49EF178645EF}.RelWithDebInfo|x64.Build.0 = RelWithDebInfo|x64 + {7EE89FEA-3684-315B-8DBD-48DA12484060}.Debug|x64.ActiveCfg = Debug|x64 + {7EE89FEA-3684-315B-8DBD-48DA12484060}.Debug|x64.Build.0 = Debug|x64 + {7EE89FEA-3684-315B-8DBD-48DA12484060}.Release|x64.ActiveCfg = Release|x64 + {7EE89FEA-3684-315B-8DBD-48DA12484060}.Release|x64.Build.0 = Release|x64 + {7EE89FEA-3684-315B-8DBD-48DA12484060}.MinSizeRel|x64.ActiveCfg = MinSizeRel|x64 + {7EE89FEA-3684-315B-8DBD-48DA12484060}.MinSizeRel|x64.Build.0 = MinSizeRel|x64 + {7EE89FEA-3684-315B-8DBD-48DA12484060}.RelWithDebInfo|x64.ActiveCfg = RelWithDebInfo|x64 + {7EE89FEA-3684-315B-8DBD-48DA12484060}.RelWithDebInfo|x64.Build.0 = RelWithDebInfo|x64 + {78CE2433-7739-3C58-9B30-57AD9DED85D1}.Debug|x64.ActiveCfg = Debug|x64 + {78CE2433-7739-3C58-9B30-57AD9DED85D1}.Debug|x64.Build.0 = Debug|x64 + {78CE2433-7739-3C58-9B30-57AD9DED85D1}.Release|x64.ActiveCfg = Release|x64 + {78CE2433-7739-3C58-9B30-57AD9DED85D1}.Release|x64.Build.0 = Release|x64 + {78CE2433-7739-3C58-9B30-57AD9DED85D1}.MinSizeRel|x64.ActiveCfg = MinSizeRel|x64 + {78CE2433-7739-3C58-9B30-57AD9DED85D1}.MinSizeRel|x64.Build.0 = MinSizeRel|x64 + {78CE2433-7739-3C58-9B30-57AD9DED85D1}.RelWithDebInfo|x64.ActiveCfg = RelWithDebInfo|x64 + {78CE2433-7739-3C58-9B30-57AD9DED85D1}.RelWithDebInfo|x64.Build.0 = RelWithDebInfo|x64 + {2C8047EA-5030-3491-9170-54E3001426CB}.Debug|x64.ActiveCfg = Debug|x64 + {2C8047EA-5030-3491-9170-54E3001426CB}.Debug|x64.Build.0 = Debug|x64 + {2C8047EA-5030-3491-9170-54E3001426CB}.Release|x64.ActiveCfg = Release|x64 + {2C8047EA-5030-3491-9170-54E3001426CB}.Release|x64.Build.0 = Release|x64 + {2C8047EA-5030-3491-9170-54E3001426CB}.MinSizeRel|x64.ActiveCfg = MinSizeRel|x64 + {2C8047EA-5030-3491-9170-54E3001426CB}.MinSizeRel|x64.Build.0 = MinSizeRel|x64 + {2C8047EA-5030-3491-9170-54E3001426CB}.RelWithDebInfo|x64.ActiveCfg = RelWithDebInfo|x64 + {2C8047EA-5030-3491-9170-54E3001426CB}.RelWithDebInfo|x64.Build.0 = RelWithDebInfo|x64 + {66BB990C-DC10-34F4-9291-26FDE1674897}.Debug|x64.ActiveCfg = Debug|x64 + {66BB990C-DC10-34F4-9291-26FDE1674897}.Debug|x64.Build.0 = Debug|x64 + {66BB990C-DC10-34F4-9291-26FDE1674897}.Release|x64.ActiveCfg = Release|x64 + {66BB990C-DC10-34F4-9291-26FDE1674897}.Release|x64.Build.0 = Release|x64 + {66BB990C-DC10-34F4-9291-26FDE1674897}.MinSizeRel|x64.ActiveCfg = MinSizeRel|x64 + {66BB990C-DC10-34F4-9291-26FDE1674897}.MinSizeRel|x64.Build.0 = MinSizeRel|x64 + {66BB990C-DC10-34F4-9291-26FDE1674897}.RelWithDebInfo|x64.ActiveCfg = RelWithDebInfo|x64 + {66BB990C-DC10-34F4-9291-26FDE1674897}.RelWithDebInfo|x64.Build.0 = RelWithDebInfo|x64 + {7D13F375-C1F5-3C07-BF72-F77EF25B3F51}.Debug|x64.ActiveCfg = Debug|x64 + {7D13F375-C1F5-3C07-BF72-F77EF25B3F51}.Debug|x64.Build.0 = Debug|x64 + {7D13F375-C1F5-3C07-BF72-F77EF25B3F51}.Release|x64.ActiveCfg = Release|x64 + {7D13F375-C1F5-3C07-BF72-F77EF25B3F51}.Release|x64.Build.0 = Release|x64 + {7D13F375-C1F5-3C07-BF72-F77EF25B3F51}.MinSizeRel|x64.ActiveCfg = MinSizeRel|x64 + {7D13F375-C1F5-3C07-BF72-F77EF25B3F51}.MinSizeRel|x64.Build.0 = MinSizeRel|x64 + {7D13F375-C1F5-3C07-BF72-F77EF25B3F51}.RelWithDebInfo|x64.ActiveCfg = RelWithDebInfo|x64 + {7D13F375-C1F5-3C07-BF72-F77EF25B3F51}.RelWithDebInfo|x64.Build.0 = RelWithDebInfo|x64 + {DE646657-AE91-38F9-9B6B-2D833FD009EE}.Debug|x64.ActiveCfg = Debug|x64 + {DE646657-AE91-38F9-9B6B-2D833FD009EE}.Debug|x64.Build.0 = Debug|x64 + {DE646657-AE91-38F9-9B6B-2D833FD009EE}.Release|x64.ActiveCfg = Release|x64 + {DE646657-AE91-38F9-9B6B-2D833FD009EE}.Release|x64.Build.0 = Release|x64 + {DE646657-AE91-38F9-9B6B-2D833FD009EE}.MinSizeRel|x64.ActiveCfg = MinSizeRel|x64 + {DE646657-AE91-38F9-9B6B-2D833FD009EE}.MinSizeRel|x64.Build.0 = MinSizeRel|x64 + {DE646657-AE91-38F9-9B6B-2D833FD009EE}.RelWithDebInfo|x64.ActiveCfg = RelWithDebInfo|x64 + {DE646657-AE91-38F9-9B6B-2D833FD009EE}.RelWithDebInfo|x64.Build.0 = RelWithDebInfo|x64 + {B535C94C-FE1B-32B0-A61C-A4A79928BED2}.Debug|x64.ActiveCfg = Debug|x64 + {B535C94C-FE1B-32B0-A61C-A4A79928BED2}.Debug|x64.Build.0 = Debug|x64 + {B535C94C-FE1B-32B0-A61C-A4A79928BED2}.Release|x64.ActiveCfg = Release|x64 + {B535C94C-FE1B-32B0-A61C-A4A79928BED2}.Release|x64.Build.0 = Release|x64 + {B535C94C-FE1B-32B0-A61C-A4A79928BED2}.MinSizeRel|x64.ActiveCfg = MinSizeRel|x64 + {B535C94C-FE1B-32B0-A61C-A4A79928BED2}.MinSizeRel|x64.Build.0 = MinSizeRel|x64 + {B535C94C-FE1B-32B0-A61C-A4A79928BED2}.RelWithDebInfo|x64.ActiveCfg = RelWithDebInfo|x64 + {B535C94C-FE1B-32B0-A61C-A4A79928BED2}.RelWithDebInfo|x64.Build.0 = RelWithDebInfo|x64 + {3420FBB5-4E52-3DEF-93BE-8ABE8919846F}.Debug|x64.ActiveCfg = Debug|x64 + {3420FBB5-4E52-3DEF-93BE-8ABE8919846F}.Debug|x64.Build.0 = Debug|x64 + {3420FBB5-4E52-3DEF-93BE-8ABE8919846F}.Release|x64.ActiveCfg = Release|x64 + {3420FBB5-4E52-3DEF-93BE-8ABE8919846F}.Release|x64.Build.0 = Release|x64 + {3420FBB5-4E52-3DEF-93BE-8ABE8919846F}.MinSizeRel|x64.ActiveCfg = MinSizeRel|x64 + {3420FBB5-4E52-3DEF-93BE-8ABE8919846F}.MinSizeRel|x64.Build.0 = MinSizeRel|x64 + {3420FBB5-4E52-3DEF-93BE-8ABE8919846F}.RelWithDebInfo|x64.ActiveCfg = RelWithDebInfo|x64 + {3420FBB5-4E52-3DEF-93BE-8ABE8919846F}.RelWithDebInfo|x64.Build.0 = RelWithDebInfo|x64 + {187AAACC-7ADF-305B-9D70-DAEF86E2F5EC}.Debug|x64.ActiveCfg = Debug|x64 + {187AAACC-7ADF-305B-9D70-DAEF86E2F5EC}.Debug|x64.Build.0 = Debug|x64 + {187AAACC-7ADF-305B-9D70-DAEF86E2F5EC}.Release|x64.ActiveCfg = Release|x64 + {187AAACC-7ADF-305B-9D70-DAEF86E2F5EC}.Release|x64.Build.0 = Release|x64 + {187AAACC-7ADF-305B-9D70-DAEF86E2F5EC}.MinSizeRel|x64.ActiveCfg = MinSizeRel|x64 + {187AAACC-7ADF-305B-9D70-DAEF86E2F5EC}.MinSizeRel|x64.Build.0 = MinSizeRel|x64 + {187AAACC-7ADF-305B-9D70-DAEF86E2F5EC}.RelWithDebInfo|x64.ActiveCfg = RelWithDebInfo|x64 + {187AAACC-7ADF-305B-9D70-DAEF86E2F5EC}.RelWithDebInfo|x64.Build.0 = RelWithDebInfo|x64 + {E369DAEB-09D6-3832-A248-730973C4FD6E}.Debug|x64.ActiveCfg = Debug|x64 + {E369DAEB-09D6-3832-A248-730973C4FD6E}.Debug|x64.Build.0 = Debug|x64 + {E369DAEB-09D6-3832-A248-730973C4FD6E}.Release|x64.ActiveCfg = Release|x64 + {E369DAEB-09D6-3832-A248-730973C4FD6E}.Release|x64.Build.0 = Release|x64 + {E369DAEB-09D6-3832-A248-730973C4FD6E}.MinSizeRel|x64.ActiveCfg = MinSizeRel|x64 + {E369DAEB-09D6-3832-A248-730973C4FD6E}.MinSizeRel|x64.Build.0 = MinSizeRel|x64 + {E369DAEB-09D6-3832-A248-730973C4FD6E}.RelWithDebInfo|x64.ActiveCfg = RelWithDebInfo|x64 + {E369DAEB-09D6-3832-A248-730973C4FD6E}.RelWithDebInfo|x64.Build.0 = RelWithDebInfo|x64 + {1FEECCD4-4337-359A-A6B2-DABEFE8BF4EF}.Debug|x64.ActiveCfg = Debug|x64 + {1FEECCD4-4337-359A-A6B2-DABEFE8BF4EF}.Debug|x64.Build.0 = Debug|x64 + {1FEECCD4-4337-359A-A6B2-DABEFE8BF4EF}.Release|x64.ActiveCfg = Release|x64 + {1FEECCD4-4337-359A-A6B2-DABEFE8BF4EF}.Release|x64.Build.0 = Release|x64 + {1FEECCD4-4337-359A-A6B2-DABEFE8BF4EF}.MinSizeRel|x64.ActiveCfg = MinSizeRel|x64 + {1FEECCD4-4337-359A-A6B2-DABEFE8BF4EF}.MinSizeRel|x64.Build.0 = MinSizeRel|x64 + {1FEECCD4-4337-359A-A6B2-DABEFE8BF4EF}.RelWithDebInfo|x64.ActiveCfg = RelWithDebInfo|x64 + {1FEECCD4-4337-359A-A6B2-DABEFE8BF4EF}.RelWithDebInfo|x64.Build.0 = RelWithDebInfo|x64 + {933E2E87-96E8-3084-8591-ADECE80258FC}.Debug|x64.ActiveCfg = Debug|x64 + {933E2E87-96E8-3084-8591-ADECE80258FC}.Debug|x64.Build.0 = Debug|x64 + {933E2E87-96E8-3084-8591-ADECE80258FC}.Release|x64.ActiveCfg = Release|x64 + {933E2E87-96E8-3084-8591-ADECE80258FC}.Release|x64.Build.0 = Release|x64 + {933E2E87-96E8-3084-8591-ADECE80258FC}.MinSizeRel|x64.ActiveCfg = MinSizeRel|x64 + {933E2E87-96E8-3084-8591-ADECE80258FC}.MinSizeRel|x64.Build.0 = MinSizeRel|x64 + {933E2E87-96E8-3084-8591-ADECE80258FC}.RelWithDebInfo|x64.ActiveCfg = RelWithDebInfo|x64 + {933E2E87-96E8-3084-8591-ADECE80258FC}.RelWithDebInfo|x64.Build.0 = RelWithDebInfo|x64 + {9D387947-059F-3E10-A3CB-A5DF9C5F0E4E}.Debug|x64.ActiveCfg = Debug|x64 + {9D387947-059F-3E10-A3CB-A5DF9C5F0E4E}.Debug|x64.Build.0 = Debug|x64 + {9D387947-059F-3E10-A3CB-A5DF9C5F0E4E}.Release|x64.ActiveCfg = Release|x64 + {9D387947-059F-3E10-A3CB-A5DF9C5F0E4E}.Release|x64.Build.0 = Release|x64 + {9D387947-059F-3E10-A3CB-A5DF9C5F0E4E}.MinSizeRel|x64.ActiveCfg = MinSizeRel|x64 + {9D387947-059F-3E10-A3CB-A5DF9C5F0E4E}.MinSizeRel|x64.Build.0 = MinSizeRel|x64 + {9D387947-059F-3E10-A3CB-A5DF9C5F0E4E}.RelWithDebInfo|x64.ActiveCfg = RelWithDebInfo|x64 + {9D387947-059F-3E10-A3CB-A5DF9C5F0E4E}.RelWithDebInfo|x64.Build.0 = RelWithDebInfo|x64 + {488CB4F5-68AA-37FC-A6AD-22FBA710025D}.Debug|x64.ActiveCfg = Debug|x64 + {488CB4F5-68AA-37FC-A6AD-22FBA710025D}.Debug|x64.Build.0 = Debug|x64 + {488CB4F5-68AA-37FC-A6AD-22FBA710025D}.Release|x64.ActiveCfg = Release|x64 + {488CB4F5-68AA-37FC-A6AD-22FBA710025D}.Release|x64.Build.0 = Release|x64 + {488CB4F5-68AA-37FC-A6AD-22FBA710025D}.MinSizeRel|x64.ActiveCfg = MinSizeRel|x64 + {488CB4F5-68AA-37FC-A6AD-22FBA710025D}.MinSizeRel|x64.Build.0 = MinSizeRel|x64 + {488CB4F5-68AA-37FC-A6AD-22FBA710025D}.RelWithDebInfo|x64.ActiveCfg = RelWithDebInfo|x64 + {488CB4F5-68AA-37FC-A6AD-22FBA710025D}.RelWithDebInfo|x64.Build.0 = RelWithDebInfo|x64 + {87063A3D-11CE-3929-B10F-9A61474AFC2C}.Debug|x64.ActiveCfg = Debug|x64 + {87063A3D-11CE-3929-B10F-9A61474AFC2C}.Debug|x64.Build.0 = Debug|x64 + {87063A3D-11CE-3929-B10F-9A61474AFC2C}.Release|x64.ActiveCfg = Release|x64 + {87063A3D-11CE-3929-B10F-9A61474AFC2C}.Release|x64.Build.0 = Release|x64 + {87063A3D-11CE-3929-B10F-9A61474AFC2C}.MinSizeRel|x64.ActiveCfg = MinSizeRel|x64 + {87063A3D-11CE-3929-B10F-9A61474AFC2C}.MinSizeRel|x64.Build.0 = MinSizeRel|x64 + {87063A3D-11CE-3929-B10F-9A61474AFC2C}.RelWithDebInfo|x64.ActiveCfg = RelWithDebInfo|x64 + {87063A3D-11CE-3929-B10F-9A61474AFC2C}.RelWithDebInfo|x64.Build.0 = RelWithDebInfo|x64 + EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + SolutionGuid = {8FBA6D21-4090-38F5-92E9-163B161632E6} + EndGlobalSection + GlobalSection(ExtensibilityAddIns) = postSolution + EndGlobalSection +EndGlobal diff --git a/platforms/win32/src/Direct2D.hpp b/platforms/win32/src/Direct2D.hpp index 1c63538ef..cf2deafc5 100644 --- a/platforms/win32/src/Direct2D.hpp +++ b/platforms/win32/src/Direct2D.hpp @@ -76,7 +76,7 @@ class yystring : public std::wstring public: // Constructors - yystring::yystring() : std::wstring() + yystring() : std::wstring() { } yystring(const char* v, int CP = CP_UTF8) @@ -184,7 +184,7 @@ inline VGColor VGColorX(const D2D1_COLOR_F& f) class Direct2DSystem; -inline std::tuple MeasureString(IDWriteFactory* pWriteFactory, IDWriteTextFormat* ffo, const wchar_t* txt, int l = -1) +inline std::tuple MeasureStringDD(IDWriteFactory* pWriteFactory, IDWriteTextFormat* ffo, const wchar_t* txt, int l = -1) { CComPtr lay = 0; pWriteFactory->CreateTextLayout(txt, l == -1 ? (UINT32)wcslen(txt) : l, ffo, 1000, 1000, &lay); @@ -201,13 +201,13 @@ inline std::tuple MeasureString(IDWriteFactory* pWriteFactory, IDW return std::make_tuple(std::forward(wi), std::forward(he)); } -CComPtr GetD2SolidBrush(ID2D1RenderTarget* p, D2D1_COLOR_F cc) +/*CComPtr GetD2SolidBrush(ID2D1RenderTarget* p, D2D1_COLOR_F cc) { CComPtr b = 0; p->CreateSolidColorBrush(cc, &b); return b; } - +*/ inline CComPtr PrivateGuidoFonts; class Direct2DFont : public VGFont @@ -270,7 +270,7 @@ inline void Direct2DFont::GetExtent(int c, float* outWidth, float* outHeight, VG inline void Direct2DFont::GetExtent(const char* s, int inCharCount, float* outWidth, float* outHeight, VGDevice* context) const { yystring y = s; - auto strs = MeasureString(sys->WriteFactory, Text, y.c_str(), inCharCount); + auto strs = MeasureStringDD(sys->WriteFactory, Text, y.c_str(), inCharCount); *outWidth = std::get<0>(strs); *outHeight = std::get<1>(strs); @@ -280,7 +280,7 @@ inline void Direct2DFont::GetExtent(const char* s, int inCharCount, float* outW class Direct2DDevice : public VGDevice { public: - Direct2DSystem* mSys; + Direct2DSystem* mSys = 0; Direct2DFont mCurrTextFont; Direct2DFont mCurrMusicFont; @@ -521,15 +521,21 @@ class Direct2DDevice : public VGDevice // - Coordinate services ------------------------------------------------ D2D1_POINT_2F Origin = { 0,0 }; D2D1_POINT_2F Scl = { 1.0f,1.0f }; + D2D1::Matrix3x2F org = D2D1::Matrix3x2F::Identity(); + D2D1::Matrix3x2F cur = D2D1::Matrix3x2F::Identity(); + D2D1_POINT_2F OrgScl = { 1.0f,1.0f }; void Trs() { - mSys->rt->SetTransform(D2D1::Matrix3x2F::Identity()); D2D1::Matrix3x2F scl = D2D1::Matrix3x2F::Scale(Scl.x,Scl.y); D2D1::Matrix3x2F trans = D2D1::Matrix3x2F::Translation(Origin.x*Scl.x,Origin.y*Scl.y); - mSys->rt->SetTransform(scl*trans); + + D2D1::Matrix3x2F res = scl * trans; + D2D1::Matrix3x2F res2 = org * res; + mSys->rt->SetTransform(res2); } + virtual void SetScale(float x, float y) { Scl.x = x; @@ -538,14 +544,14 @@ class Direct2DDevice : public VGDevice } virtual void SetOrigin(float x, float y) { - Origin.x = x; - Origin.y = y; + Origin.x = x * OrgScl.x; + Origin.y = y * OrgScl.y; Trs(); } virtual void OffsetOrigin(float x, float y) { - Origin.x += x; - Origin.y += y; + Origin.x += x * OrgScl.x; + Origin.y += y * OrgScl.y; Trs(); } @@ -570,7 +576,7 @@ class Direct2DDevice : public VGDevice EnsureBrush(); CComPtr< IDWriteTextLayout> tl; - auto ty = MeasureString(mSys->WriteFactory, F.Text, s,(UINT32)wcslen(s)); + auto ty = MeasureStringDD(mSys->WriteFactory, F.Text, s,(UINT32)wcslen(s)); D2D1_RECT_F ly = {}; ly.left = x; ly.top = y; @@ -652,13 +658,16 @@ class Direct2DDevice : public VGDevice mCurrMusicFont.a1 = a1; mCurrMusicFont.a2 = a2; - if (mCurrMusicFont.Text && mCurrTextFont.Text) + if (mCurrMusicFont.Text) { - mCurrTextFont.Text->SetTextAlignment(a1); mCurrMusicFont.Text->SetTextAlignment(a1); - mCurrTextFont.Text->SetParagraphAlignment(a2); mCurrMusicFont.Text->SetParagraphAlignment(a2); } + if (mCurrTextFont.Text) + { + mCurrTextFont.Text->SetTextAlignment(a1); + mCurrTextFont.Text->SetParagraphAlignment(a2); + } } virtual unsigned int GetFontAlign() const { diff --git a/src/engine/abstract/ARMusicalVoice.cpp b/src/engine/abstract/ARMusicalVoice.cpp index 93cc1fdb2..302ddaf09 100644 --- a/src/engine/abstract/ARMusicalVoice.cpp +++ b/src/engine/abstract/ARMusicalVoice.cpp @@ -1757,7 +1757,7 @@ void ARMusicalVoice::doAutoBeaming() GuidoPos posevn = NULL; // end beam position TYPE_TIMEPOSITION beamStart = 0; - bool beamStartOnbeat; + bool beamStartOnbeat = 0; // the timeposition of the last explicit barline... // this needs to be inserted, so that the beat-structure can be matched according to this. diff --git a/src/engine/devices/AbstractDevice.cpp b/src/engine/devices/AbstractDevice.cpp index 3eb8918a5..0193ec3de 100644 --- a/src/engine/devices/AbstractDevice.cpp +++ b/src/engine/devices/AbstractDevice.cpp @@ -13,6 +13,16 @@ #ifdef WIN32 # pragma warning (disable : 4996) + +#include "F:\\guidolib\\midisharelight\\src\\MidiShareLight.cpp" +#include "F:\\guidolib\\midisharelight\\src\\msEvents.cpp" +#include "F:\\guidolib\\midisharelight\\src\\msFields.cpp" +#include "F:\\guidolib\\midisharelight\\src\\msMemory.cpp" +#include "F:\\guidolib\\midisharelight\\src\\msSeq.cpp" +#include "F:\\guidolib\\midisharelight\\src\\lifo.cpp" +#include "F:\\guidolib\\midisharelight\\src\\midifile.cpp" + + #endif #include diff --git a/src/engine/graphic/GRDynamics.cpp b/src/engine/graphic/GRDynamics.cpp index ba7a1daf3..2021f8721 100644 --- a/src/engine/graphic/GRDynamics.cpp +++ b/src/engine/graphic/GRDynamics.cpp @@ -143,6 +143,13 @@ const GRDynamics::TXSegment* GRDynamics::getSegment(const GRSystem* system) cons } +void GRDynamics::GetMap(GuidoElementSelector sel, MapCollector& f, MapInfos& infos) const +{ + if (sel == kDynSel) + SendMap(f, getRelativeTimePosition(), getDuration(), kDyn, infos); +} + + //--------------------------------------------------------------------------------- void GRDynamics::DrawDynamic( VGDevice & hdc, bool cresc) const { diff --git a/src/engine/graphic/GRDynamics.h b/src/engine/graphic/GRDynamics.h index e79407c75..360a7b901 100644 --- a/src/engine/graphic/GRDynamics.h +++ b/src/engine/graphic/GRDynamics.h @@ -37,6 +37,7 @@ class GRDynamics : public GRPTagARNotationElement virtual void accept (GRVisitor& visitor); virtual const GRDynamics * isGRDynamic() const { return this; } + virtual void GetMap(GuidoElementSelector sel, MapCollector& f, MapInfos& infos) const; protected: typedef struct TXSegment { diff --git a/src/engine/graphic/GRHarmony.cpp b/src/engine/graphic/GRHarmony.cpp index 5ba965c41..dd13d17fe 100644 --- a/src/engine/graphic/GRHarmony.cpp +++ b/src/engine/graphic/GRHarmony.cpp @@ -150,7 +150,7 @@ void GRHarmony::DrawHarmonyString (VGDevice & hdc, const VGFont* font, const str if (!mfont) mfont = FontManager::gFontScriab; float ratio = font->GetSize() / 150.f; // 150 is the default font size for harmony (20 pt) - int fsize = mfont->GetSize() * ratio; + int fsize = (int)(mfont->GetSize() * ratio); const VGFont* mBigFont = FontManager::FindOrCreateFont( int(fsize * 1.3), mfont->GetName(), ""); const VGFont* mSmallFont = FontManager::FindOrCreateFont( int(fsize * 0.8), mfont->GetName(), ""); diff --git a/src/engine/graphic/GRKey.cpp b/src/engine/graphic/GRKey.cpp index f3e26a162..655667074 100644 --- a/src/engine/graphic/GRKey.cpp +++ b/src/engine/graphic/GRKey.cpp @@ -98,10 +98,18 @@ void GRKey::getOctArray(int * OctArray) mykey->getOctArray(OctArray); } +void GRKey::GetMap(GuidoElementSelector sel, MapCollector& f, MapInfos& infos) const +{ + if (sel == kKeySel) + SendMap(f, getRelativeTimePosition(), getDuration(), kKey, infos); +} + void GRKey::setHPosition( GCoord nx) { setPosition( NVPoint( nx,mPosition.y )); + + } /** Update the the x-coordinates of the accidentals, @@ -132,6 +140,12 @@ void GRKey::setPosition( const NVPoint & inPos ) newPos.x += e->getRightSpace(); } updateBoundingBox(); + + mMapping.left = mPosition.x; + mMapping.top = mPosition.y; + mMapping.right = mPosition.x + mBoundingBox.right; + mMapping.bottom = mPosition.y + mBoundingBox.bottom; + } //____________________________________________________________________________________ diff --git a/src/engine/graphic/GRKey.h b/src/engine/graphic/GRKey.h index 1c261dcc3..720f94be1 100644 --- a/src/engine/graphic/GRKey.h +++ b/src/engine/graphic/GRKey.h @@ -48,6 +48,7 @@ class GRKey : public GRARCompositeNotationElement, public GRTag virtual void OnDraw(VGDevice & dev ) const; virtual void recalcVerticalPosition(); + virtual void GetMap(GuidoElementSelector sel, MapCollector& f, MapInfos& infos) const; protected: int mNatural; diff --git a/src/engine/graphic/GRText.cpp b/src/engine/graphic/GRText.cpp index 47fc4da03..e000e2069 100644 --- a/src/engine/graphic/GRText.cpp +++ b/src/engine/graphic/GRText.cpp @@ -207,6 +207,12 @@ void GRText::OnDraw( VGDevice & hdc ) const // DrawBoundingBox(hdc, VGColor(0,0,255)); } +void GRText::GetMap(GuidoElementSelector sel, MapCollector& f, MapInfos& infos) const +{ + if (sel == kTextSel) + SendMap(f, getRelativeTimePosition(), getDuration(), kText, infos); +} + const VGColor GRText::startDraw( VGDevice & hdc, unsigned int& fontalign ) const { hdc.SetTextFont( fFont ); @@ -277,6 +283,12 @@ void GRText::setHPosition( GCoord nx ) dx = arText->getDX()->getValue( LSPACE ); mPosition.x += dx; + + mMapping.left = mPosition.x; + mMapping.top = mPosition.y; + mMapping.right = mPosition.x + st->boundingBox.right; + mMapping.bottom = mPosition.y + st->boundingBox.bottom; + st->position.x = nx; } diff --git a/src/engine/graphic/GRText.h b/src/engine/graphic/GRText.h index 3a76a8a76..542d78b43 100644 --- a/src/engine/graphic/GRText.h +++ b/src/engine/graphic/GRText.h @@ -73,6 +73,7 @@ class GRText : public GRPTagARNotationElement virtual bool checkCollisionWith() const { return true; } virtual bool isLyrics() const; virtual const GRText* isText() const { return this; } + virtual void GetMap(GuidoElementSelector sel, MapCollector& f, MapInfos& infos) const; protected: virtual const VGColor startDraw( VGDevice & hdc, unsigned int& fontalign ) const; diff --git a/src/engine/include/GUIDOScoreMap.h b/src/engine/include/GUIDOScoreMap.h index d55df4295..49e5e4a00 100644 --- a/src/engine/include/GUIDOScoreMap.h +++ b/src/engine/include/GUIDOScoreMap.h @@ -38,13 +38,13 @@ //------------------------------------------------------------------------------ // graphic elements selector definitions typedef enum { - kGuidoPage, kGuidoSystem, kGuidoSystemSlice, kGuidoStaff, /*kGuidoMeasure,*/ kGuidoBar, kGuidoBarAndEvent, kGuidoEvent, kClefSel, kMeterSel, + kGuidoPage, kGuidoSystem, kGuidoSystemSlice, kGuidoStaff, /*kGuidoMeasure,*/ kGuidoBar, kGuidoBarAndEvent, kGuidoEvent, kClefSel, kMeterSel, kTextSel, kKeySel, kDynSel, kGuidoScoreElementEnd } GuidoElementSelector; // graphic elements type definitions typedef enum { - kNote = 1, kRest, kEmpty, kBar, kRepeatBegin, kRepeatEnd, kStaff, kSystemSlice, kSystem, kPage, kGraceNote, kClef, kMeter + kNote = 1, kRest, kEmpty, kBar, kRepeatBegin, kRepeatEnd, kStaff, kSystemSlice, kSystem, kPage, kGraceNote, kClef, kMeter, kText, kKey, kDyn } GuidoElementType;